commit 8ab7efe2a47ba0517f58bc80bfe9398d68d92abf parent faebadb2b6ef37bf298a08ec702c5ab724408339 Author: Brian Graham <brian@buildingbetterteams.de> Date: Sat, 4 Apr 2026 22:05:02 +0200 Raise budget to $2/$10, delete 25 budget-killed sonnet/opus runs $0.50 was fine for haiku (~$0.18/run) but sonnet costs $0.50-1.10 and opus $0.50+. Most sonnet runs were hitting the cap mid-build, producing incomplete games. Budget raised: low=$2.00, high=$10.00 Deleted 25 runs where sonnet/opus hit the old $0.50 limit. 65 valid runs remain (57 haiku, 8 sonnet). Opus runs deleted (all 3 were budget-limited). Re-run sonnet and opus sweeps to get clean data. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Diffstat:
278 files changed, 8 insertions(+), 89204 deletions(-)
diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2301 +0,0 @@ -{ - "name": "loop-bench-oldyixfl", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-oldyixfl", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,19 +0,0 @@ -{ - "name": "loop-bench-oldyixfl", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:21:29.185Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2301 +0,0 @@ -{ - "name": "loop-bench-5vlxz4ta", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-5vlxz4ta", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,19 +0,0 @@ -{ - "name": "loop-bench-5vlxz4ta", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:23:10.658Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2301 +0,0 @@ -{ - "name": "loop-bench-xwmz17oo", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-xwmz17oo", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,19 +0,0 @@ -{ - "name": "loop-bench-xwmz17oo", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:33:46.682Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html @@ -1,179 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - * { margin: 0; padding: 0; box-sizing: border-box; } - - body { - background: #0a0a1a; - color: #e0e0e0; - font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - overflow: hidden; - } - - .game-wrapper { - display: flex; - gap: 24px; - align-items: flex-start; - } - - /* Side panels */ - .side-panel { - display: flex; - flex-direction: column; - gap: 16px; - min-width: 120px; - } - - .panel-box { - background: #1a1a2e; - border: 2px solid #333; - border-radius: 8px; - padding: 12px; - text-align: center; - } - - .panel-box h3 { - font-size: 11px; - text-transform: uppercase; - letter-spacing: 2px; - color: #888; - margin-bottom: 8px; - } - - .panel-box .value { - font-size: 22px; - font-weight: 700; - color: #fff; - font-variant-numeric: tabular-nums; - } - - .preview-box canvas { - display: block; - margin: 0 auto; - } - - /* Main board */ - .board-container { - position: relative; - border: 3px solid #444; - border-radius: 4px; - line-height: 0; - box-shadow: 0 0 40px rgba(0, 150, 255, 0.08); - } - - #game-canvas { - display: block; - } - - /* Overlay */ - #overlay { - position: absolute; - inset: 0; - background: rgba(0, 0, 0, 0.75); - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - border-radius: 2px; - z-index: 10; - transition: opacity 0.2s; - } - - #overlay.hidden { - display: none; - } - - #overlay-text { - font-size: 36px; - font-weight: 800; - letter-spacing: 4px; - color: #fff; - text-shadow: 0 0 20px rgba(0, 150, 255, 0.6); - } - - .overlay-sub { - margin-top: 12px; - font-size: 14px; - color: #aaa; - } - - /* Controls help */ - .controls { - font-size: 11px; - color: #666; - line-height: 1.8; - } - - .controls kbd { - display: inline-block; - background: #222; - border: 1px solid #444; - border-radius: 3px; - padding: 1px 6px; - font-family: inherit; - font-size: 10px; - color: #ccc; - } - </style> -</head> -<body> - <div class="game-wrapper"> - <!-- Left panel --> - <div class="side-panel"> - <div class="panel-box preview-box"> - <h3>Hold</h3> - <canvas id="hold-canvas" width="100" height="60"></canvas> - </div> - <div class="panel-box"> - <h3>Score</h3> - <div class="value" id="score">0</div> - </div> - <div class="panel-box"> - <h3>Level</h3> - <div class="value" id="level">0</div> - </div> - <div class="panel-box"> - <h3>Lines</h3> - <div class="value" id="lines">0</div> - </div> - <div class="controls"> - <kbd>←</kbd> <kbd>→</kbd> Move<br/> - <kbd>↓</kbd> Soft drop<br/> - <kbd>↑</kbd> / <kbd>X</kbd> Rotate CW<br/> - <kbd>Z</kbd> Rotate CCW<br/> - <kbd>Space</kbd> Hard drop<br/> - <kbd>C</kbd> / <kbd>Shift</kbd> Hold<br/> - <kbd>P</kbd> Pause<br/> - <kbd>R</kbd> Restart - </div> - </div> - - <!-- Board --> - <div class="board-container"> - <canvas id="game-canvas"></canvas> - <div id="overlay" class="hidden"> - <div id="overlay-text"></div> - <div class="overlay-sub"></div> - </div> - </div> - - <!-- Right panel --> - <div class="side-panel"> - <div class="panel-box preview-box"> - <h3>Next</h3> - <canvas id="preview-canvas" width="100" height="60"></canvas> - </div> - </div> - </div> - - <script type="module" src="./dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-t77na7cp", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-t77na7cp", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,22 +0,0 @@ -{ - "name": "loop-bench-t77na7cp", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,557 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T08:32:08.278Z", - "formats": { - "markdown": { - "sources": { - "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md": { - "lines": 201, - "tokens": 1741, - "sources": 1, - "clones": 7, - "duplicatedLines": 532, - "duplicatedTokens": 4657, - "percentage": 264.68, - "percentageTokens": 267.49, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md": { - "lines": 180, - "tokens": 1515, - "sources": 1, - "clones": 3, - "duplicatedLines": 161, - "duplicatedTokens": 1392, - "percentage": 89.44, - "percentageTokens": 91.88, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md": { - "lines": 210, - "tokens": 1787, - "sources": 1, - "clones": 2, - "duplicatedLines": 183, - "duplicatedTokens": 1623, - "percentage": 87.14, - "percentageTokens": 90.82, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md": { - "lines": 201, - "tokens": 1741, - "sources": 1, - "clones": 2, - "duplicatedLines": 188, - "duplicatedTokens": 1642, - "percentage": 93.53, - "percentageTokens": 94.31, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 792, - "tokens": 6784, - "sources": 4, - "clones": 7, - "duplicatedLines": 532, - "duplicatedTokens": 4657, - "percentage": 67.17, - "percentageTokens": 68.65, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "typescript": { - "sources": { - "tests/tetris.spec.ts": { - "lines": 137, - "tokens": 1594, - "sources": 1, - "clones": 4, - "duplicatedLines": 24, - "duplicatedTokens": 298, - "percentage": 17.52, - "percentageTokens": 18.7, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/tetris.ts": { - "lines": 633, - "tokens": 6812, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 770, - "tokens": 8406, - "sources": 2, - "clones": 2, - "duplicatedLines": 12, - "duplicatedTokens": 149, - "percentage": 1.56, - "percentageTokens": 1.77, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "test-results/.last-run.json": { - "lines": 8, - "tokens": 33, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "tsconfig.json": { - "lines": 11, - "tokens": 76, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 40, - "tokens": 241, - "sources": 3, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "dist/tetris.js": { - "lines": 542, - "tokens": 6674, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 542, - "tokens": 6674, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 178, - "tokens": 1227, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 178, - "tokens": 1227, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 2322, - "tokens": 23332, - "sources": 11, - "clones": 9, - "duplicatedLines": 544, - "duplicatedTokens": 4806, - "percentage": 23.43, - "percentageTokens": 20.6, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "markdown", - "lines": 63, - "fragment": "s equality\n\nExpected: 320\nReceived: 300\n```\n\n# Page snapshot\n\n```yaml\n- generic [ref=e2]:\n - generic [ref=e3]:\n - heading \"Hold\" [level=3] [ref=e5]\n - generic [ref=e7]:\n - heading \"Score\" [level=3] [ref=e8]\n - generic [ref=e9]: \"0\"\n - generic [ref=e10]:\n - heading \"Level\" [level=3] [ref=e11]\n - generic [ref=e12]: \"0\"\n - generic [ref=e13]:\n - heading \"Lines\" [level=3] [ref=e14]\n - generic [ref=e15]: \"0\"\n - generic [ref=e16]:\n - generic [ref=e17]: ←\n - generic [ref=e18]: →\n - text: Move\n - generic [ref=e19]: ↓\n - text: Soft drop\n - generic [ref=e20]: ↑\n - text: /\n - generic [ref=e21]: X\n - text: Rotate CW\n - generic [ref=e22]: Z\n - text: Rotate CCW\n - generic [ref=e23]: Space\n - text: Hard drop\n - generic [ref=e24]: C\n - text: /\n - generic [ref=e25]: Shift\n - text: Hold\n - generic [ref=e26]: P\n - text: Pause\n - generic [ref=e27]: R\n - text: Restart\n - heading \"Next\" [level=3] [ref=e32]\n```\n\n# Test source\n\n```ts\n 1 | import { test, expect } from \"@playwright/test\";\n 2 | import { join } from \"path\";\n 3 | \n 4 | const htmlPath = join(__dirname, \"..\", \"index.html\");\n 5 | \n 6 | test.describe(\"Tetris Game\", () => {\n 7 | test.beforeEach(async ({ page }) => {\n 8 | await page.goto(`file://${htmlPath}`);\n 9 | await page.waitForSelector(\"#game-canvas\");\n 10 | await page.waitForTimeout(200);\n 11 | });\n 12 | \n 13 | test(\"renders the game canvas\", async ({ page }) => {\n 14 | const canvas = page.locator(\"#game-canvas\");\n 15 | await expect(canvas).toBeVisible();\n 16 | const box = a", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md", - "start": 19, - "end": 81, - "startLoc": { - "line": 19, - "column": 1, - "position": 107 - }, - "endLoc": { - "line": 81, - "column": 2, - "position": 417 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 19, - "end": 81, - "startLoc": { - "line": 19, - "column": 1, - "position": 107 - }, - "endLoc": { - "line": 81, - "column": 3, - "position": 418 - } - } - }, - { - "format": "markdown", - "lines": 72, - "fragment": " ^ Error: expect(received).toBe(expected) // Object.is equality\n 19 | expect(box!.height).toBe(640);\n 20 | });\n 21 | \n 22 | test(\"renders preview and hold canvases\", async ({ page }) => {\n 23 | await expect(page.locator(\"#preview-canvas\")).toBeVisible();\n 24 | await expect(page.locator(\"#hold-canvas\")).toBeVisible();\n 25 | });\n 26 | \n 27 | test(\"displays initial score, level, and lines as 0\", async ({ page }) => {\n 28 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 29 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 30 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 31 | });\n 32 | \n 33 | test(\"overlay is hidden on start\", async ({ page }) => {\n 34 | const overlay = page.locator(\"#overlay\");\n 35 | await expect(overlay).toHaveClass(/hidden/);\n 36 | });\n 37 | \n 38 | test(\"pause toggles with P key\", async ({ page }) => {\n 39 | const overlay = page.locator(\"#overlay\");\n 40 | await expect(overlay).toHaveClass(/hidden/);\n 41 | \n 42 | await page.keyboard.press(\"p\");\n 43 | await expect(overlay).not.toHaveClass(/hidden/);\n 44 | await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n 45 | \n 46 | await page.keyboard.press(\"p\");\n 47 | await expect(overlay).toHaveClass(/hidden/);\n 48 | });\n 49 | \n 50 | test(\"arrow keys move pieces without errors\", async ({ page }) => {\n 51 | const errors: string[] = [];\n 52 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 53 | \n 54 | await page.keyboard.press(\"ArrowLeft\");\n 55 | await page.keyboard.press(\"ArrowRight\");\n 56 | await page.keyboard.press(\"ArrowDown\");\n 57 | await page.keyboard.press(\"ArrowUp\");\n 58 | await page.waitForTimeout(100);\n 59 | \n 60 | expect(errors).toHaveLength(0);\n 61 | });\n 62 | \n 63 | test(\"hard drop with Space increases score\", async ({ page }) => {\n 64 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 65 | \n 66 | await page.keyboard.press(\" \");\n 67 | await page.waitForTimeout(100);\n 68 | \n 69 | const scoreText = await page.locator(\"#score\").textContent();\n 70 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n 71 | expect(score).toBeGreaterThan(0);\n 72 | });\n 73 | \n 74 | test(\"hold piece with C key works\", async ({ page }) => {\n 75 | const errors: string[] = [];\n 76 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 77 | \n 78 | await page.keyboard.press(\"c\");\n 79 | await page.waitForTimeout(100);\n 80 | \n 81 | expect(errors).toHaveLength(0);\n 82 | });\n 83 | \n 84 | test(\"restart with R key resets score\", async ({ page }) => {\n 85 | await page.keyboard.press(\" \");\n 86 | await page.waitForTimeout(100);\n 87 | \n 88 | const scoreText = await page.locator(\"#score\").textContent();\n 89 ", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md", - "start": 83, - "end": 154, - "startLoc": { - "line": 83, - "column": 3, - "position": 428 - }, - "endLoc": { - "line": 154, - "column": 3, - "position": 1210 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 82, - "end": 153, - "startLoc": { - "line": 82, - "column": 3, - "position": 425 - }, - "endLoc": { - "line": 153, - "column": 2, - "position": 1206 - } - } - }, - { - "format": "markdown", - "lines": 29, - "fragment": "ace(/,/g, \"\"), 10);\n 90 | expect(score).toBeGreaterThan(0);\n 91 | \n 92 | await page.keyboard.press(\"r\");\n 93 | await page.waitForTimeout(100);\n 94 | \n 95 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 96 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 97 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 98 | });\n 99 | \n 100 | test(\"rotation keys work without errors\", async ({ page }) => {\n 101 | const errors: string[] = [];\n 102 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 103 | \n 104 | await page.keyboard.press(\"x\");\n 105 | await page.waitForTimeout(50);\n 106 | await page.keyboard.press(\"z\");\n 107 | await page.waitForTimeout(50);\n 108 | await page.keyboard.press(\"ArrowUp\");\n 109 | await page.waitForTimeout(50);\n 110 | \n 111 | expect(errors).toHaveLength(0);\n 112 | });\n 113 | \n 114 | test(\"game over triggers after filling the board\", async ({ page }) => {\n 115 | const errors: string[] = [];\n 116 | page.on(\"pageerror\", (err) => errors.push(er", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md", - "start": 155, - "end": 183, - "startLoc": { - "line": 155, - "column": 3, - "position": 1217 - }, - "endLoc": { - "line": 183, - "column": 4, - "position": 1517 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 155, - "end": 183, - "startLoc": { - "line": 155, - "column": 3, - "position": 1217 - }, - "endLoc": { - "line": 183, - "column": 4, - "position": 1518 - } - } - }, - { - "format": "markdown", - "lines": 88, - "fragment": "div>\n - unexpected value \"hidden\"\n\n```\n\n# Page snapshot\n\n```yaml\n- generic [ref=e2]:\n - generic [ref=e3]:\n - heading \"Hold\" [level=3] [ref=e5]\n - generic [ref=e7]:\n - heading \"Score\" [level=3] [ref=e8]\n - generic [ref=e9]: \"0\"\n - generic [ref=e10]:\n - heading \"Level\" [level=3] [ref=e11]\n - generic [ref=e12]: \"0\"\n - generic [ref=e13]:\n - heading \"Lines\" [level=3] [ref=e14]\n - generic [ref=e15]: \"0\"\n - generic [ref=e16]:\n - generic [ref=e17]: ←\n - generic [ref=e18]: →\n - text: Move\n - generic [ref=e19]: ↓\n - text: Soft drop\n - generic [ref=e20]: ↑\n - text: /\n - generic [ref=e21]: X\n - text: Rotate CW\n - generic [ref=e22]: Z\n - text: Rotate CCW\n - generic [ref=e23]: Space\n - text: Hard drop\n - generic [ref=e24]: C\n - text: /\n - generic [ref=e25]: Shift\n - text: Hold\n - generic [ref=e26]: P\n - text: Pause\n - generic [ref=e27]: R\n - text: Restart\n - heading \"Next\" [level=3] [ref=e32]\n```\n\n# Test source\n\n```ts\n 1 | import { test, expect } from \"@playwright/test\";\n 2 | import { join } from \"path\";\n 3 | \n 4 | const htmlPath = join(__dirname, \"..\", \"index.html\");\n 5 | \n 6 | test.describe(\"Tetris Game\", () => {\n 7 | test.beforeEach(async ({ page }) => {\n 8 | await page.goto(`file://${htmlPath}`);\n 9 | await page.waitForSelector(\"#game-canvas\");\n 10 | await page.waitForTimeout(200);\n 11 | });\n 12 | \n 13 | test(\"renders the game canvas\", async ({ page }) => {\n 14 | const canvas = page.locator(\"#game-canvas\");\n 15 | await expect(canvas).toBeVisible();\n 16 | const box = await canvas.boundingBox();\n 17 | expect(box).not.toBeNull();\n 18 | expect(box!.width).toBe(320);\n 19 | expect(box!.height).toBe(640);\n 20 | });\n 21 | \n 22 | test(\"renders preview and hold canvases\", async ({ page }) => {\n 23 | await expect(page.locator(\"#preview-canvas\")).toBeVisible();\n 24 | await expect(page.locator(\"#hold-canvas\")).toBeVisible();\n 25 | });\n 26 | \n 27 | test(\"displays initial score, level, and lines as 0\", async ({ page }) => {\n 28 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 29 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 30 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 31 | });\n 32 | \n 33 | test(\"overlay is hidden on start\", async ({ page }) => {\n 34 | const overlay = page.locator(\"#overlay\");\n 35 | await expect(overlay).toHaveClass(/hidden/);\n 36 | });\n 37 | \n 38 | test(\"pause toggles with P key\", async ({ page }) => {\n 39 | const overlay = page.locator(\"#overlay\");\n 40 | await expect(overlay).toHaveCla", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md", - "start": 28, - "end": 115, - "startLoc": { - "line": 28, - "column": 1, - "position": 153 - }, - "endLoc": { - "line": 115, - "column": 2, - "position": 747 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 19, - "end": 106, - "startLoc": { - "line": 19, - "column": 1, - "position": 107 - }, - "endLoc": { - "line": 106, - "column": 3, - "position": 702 - } - } - }, - { - "format": "markdown", - "lines": 97, - "fragment": " ^ Error: expect(locator).not.toHaveClass(expected) failed\n 44 | await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n 45 | \n 46 | await page.keyboard.press(\"p\");\n 47 | await expect(overlay).toHaveClass(/hidden/);\n 48 | });\n 49 | \n 50 | test(\"arrow keys move pieces without errors\", async ({ page }) => {\n 51 | const errors: string[] = [];\n 52 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 53 | \n 54 | await page.keyboard.press(\"ArrowLeft\");\n 55 | await page.keyboard.press(\"ArrowRight\");\n 56 | await page.keyboard.press(\"ArrowDown\");\n 57 | await page.keyboard.press(\"ArrowUp\");\n 58 | await page.waitForTimeout(100);\n 59 | \n 60 | expect(errors).toHaveLength(0);\n 61 | });\n 62 | \n 63 | test(\"hard drop with Space increases score\", async ({ page }) => {\n 64 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 65 | \n 66 | await page.keyboard.press(\" \");\n 67 | await page.waitForTimeout(100);\n 68 | \n 69 | const scoreText = await page.locator(\"#score\").textContent();\n 70 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n 71 | expect(score).toBeGreaterThan(0);\n 72 | });\n 73 | \n 74 | test(\"hold piece with C key works\", async ({ page }) => {\n 75 | const errors: string[] = [];\n 76 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 77 | \n 78 | await page.keyboard.press(\"c\");\n 79 | await page.waitForTimeout(100);\n 80 | \n 81 | expect(errors).toHaveLength(0);\n 82 | });\n 83 | \n 84 | test(\"restart with R key resets score\", async ({ page }) => {\n 85 | await page.keyboard.press(\" \");\n 86 | await page.waitForTimeout(100);\n 87 | \n 88 | const scoreText = await page.locator(\"#score\").textContent();\n 89 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n 90 | expect(score).toBeGreaterThan(0);\n 91 | \n 92 | await page.keyboard.press(\"r\");\n 93 | await page.waitForTimeout(100);\n 94 | \n 95 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 96 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 97 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 98 | });\n 99 | \n 100 | test(\"rotation keys work without errors\", async ({ page }) => {\n 101 | const errors: string[] = [];\n 102 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 103 | \n 104 | await page.keyboard.press(\"x\");\n 105 | await page.waitForTimeout(50);\n 106 | await page.keyboard.press(\"z\");\n 107 | await page.waitForTimeout(50);\n 108 | await page.keyboard.press(\"ArrowUp\");\n 109 | await page.waitForTimeout(50);\n 110 | \n 111 | expect(errors).toHaveLength(0);\n 112 | });\n 113 | \n 114 | test(\"game over triggers after filling the board\", async ({ page }) => {\n 115 | const errors: string[] = [];\n 116 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 117 | \n 118 | for (let i = 0; i < 50; i++) {\n 119 | await page.keyboard.press(\" \");\n 120 | await page.waitForTimeout(60);\n 121 | }\n 122 | \n 123 | await page.waitForTimeout(200);\n 124 | expect(errors).toHaveLength(0);\n 125 | });\n 126 | \n 127 | test(\"multiple hard drops track scoring correctly\", async ({ page }) => {\n 128 | let prevScore = 0;\n 129 | for (let i = 0; i < 5; i++) {\n 130 | await page.keyboard.press(\" \");\n 131 | await page.waitForTimeout(100);\n 132 | const text = await page.locator(\"#score\").textContent();\n 133 | const current = parseInt(text!.replace(/,/g, \"\"), 10);\n 134 | expect(current).toBeGreaterThanOrEqual(prevScore);\n 135 | prevS", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md", - "start": 117, - "end": 213, - "startLoc": { - "line": 117, - "column": 3, - "position": 760 - }, - "endLoc": { - "line": 213, - "column": 4, - "position": 1789 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 107, - "end": 204, - "startLoc": { - "line": 107, - "column": 3, - "position": 711 - }, - "endLoc": { - "line": 204, - "column": 4, - "position": 1743 - } - } - }, - { - "format": "markdown", - "lines": 121, - "fragment": "s/tetris.spec.ts:63:7\n\n# Error details\n\n```\nError: expect(received).toBeGreaterThan(expected)\n\nExpected: > 0\nReceived: 0\n```\n\n# Page snapshot\n\n```yaml\n- generic [ref=e2]:\n - generic [ref=e3]:\n - heading \"Hold\" [level=3] [ref=e5]\n - generic [ref=e7]:\n - heading \"Score\" [level=3] [ref=e8]\n - generic [ref=e9]: \"0\"\n - generic [ref=e10]:\n - heading \"Level\" [level=3] [ref=e11]\n - generic [ref=e12]: \"0\"\n - generic [ref=e13]:\n - heading \"Lines\" [level=3] [ref=e14]\n - generic [ref=e15]: \"0\"\n - generic [ref=e16]:\n - generic [ref=e17]: ←\n - generic [ref=e18]: →\n - text: Move\n - generic [ref=e19]: ↓\n - text: Soft drop\n - generic [ref=e20]: ↑\n - text: /\n - generic [ref=e21]: X\n - text: Rotate CW\n - generic [ref=e22]: Z\n - text: Rotate CCW\n - generic [ref=e23]: Space\n - text: Hard drop\n - generic [ref=e24]: C\n - text: /\n - generic [ref=e25]: Shift\n - text: Hold\n - generic [ref=e26]: P\n - text: Pause\n - generic [ref=e27]: R\n - text: Restart\n - heading \"Next\" [level=3] [ref=e32]\n```\n\n# Test source\n\n```ts\n 1 | import { test, expect } from \"@playwright/test\";\n 2 | import { join } from \"path\";\n 3 | \n 4 | const htmlPath = join(__dirname, \"..\", \"index.html\");\n 5 | \n 6 | test.describe(\"Tetris Game\", () => {\n 7 | test.beforeEach(async ({ page }) => {\n 8 | await page.goto(`file://${htmlPath}`);\n 9 | await page.waitForSelector(\"#game-canvas\");\n 10 | await page.waitForTimeout(200);\n 11 | });\n 12 | \n 13 | test(\"renders the game canvas\", async ({ page }) => {\n 14 | const canvas = page.locator(\"#game-canvas\");\n 15 | await expect(canvas).toBeVisible();\n 16 | const box = await canvas.boundingBox();\n 17 | expect(box).not.toBeNull();\n 18 | expect(box!.width).toBe(320);\n 19 | expect(box!.height).toBe(640);\n 20 | });\n 21 | \n 22 | test(\"renders preview and hold canvases\", async ({ page }) => {\n 23 | await expect(page.locator(\"#preview-canvas\")).toBeVisible();\n 24 | await expect(page.locator(\"#hold-canvas\")).toBeVisible();\n 25 | });\n 26 | \n 27 | test(\"displays initial score, level, and lines as 0\", async ({ page }) => {\n 28 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 29 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 30 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 31 | });\n 32 | \n 33 | test(\"overlay is hidden on start\", async ({ page }) => {\n 34 | const overlay = page.locator(\"#overlay\");\n 35 | await expect(overlay).toHaveClass(/hidden/);\n 36 | });\n 37 | \n 38 | test(\"pause toggles with P key\", async ({ page }) => {\n 39 | const overlay = page.locator(\"#overlay\");\n 40 | await expect(overlay).toHaveClass(/hidden/);\n 41 | \n 42 | await page.keyboard.press(\"p\");\n 43 | await expect(overlay).not.toHaveClass(/hidden/);\n 44 | await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n 45 | \n 46 | await page.keyboard.press(\"p\");\n 47 | await expect(overlay).toHaveClass(/hidden/);\n 48 | });\n 49 | \n 50 | test(\"arrow keys move pieces without errors\", async ({ page }) => {\n 51 | const errors: string[] = [];\n 52 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 53 | \n 54 | await page.keyboard.press(\"ArrowLeft\");\n 55 | await page.keyboard.press(\"ArrowRight\");\n 56 | await page.keyboard.press(\"ArrowDown\");\n 57 | await page.keyboard.press(\"ArrowUp\");\n 58 | await page.waitForTimeout(100);\n 59 | \n 60 | expect(errors).toHaveLength(0);\n 61 | });\n 62 | \n 63 | test(\"hard drop with Space increases score\", async ({ page }) => {\n 64 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 65 | \n 66 | await page.keyboard.press(\" \");\n 67 | await page.waitForTimeout(100);\n 68 | \n 69 | const scoreText = await page.locator(\"#score\").textContent();\n 7", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md", - "start": 14, - "end": 134, - "startLoc": { - "line": 14, - "column": 1, - "position": 90 - }, - "endLoc": { - "line": 134, - "column": 2, - "position": 992 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 14, - "end": 134, - "startLoc": { - "line": 14, - "column": 1, - "position": 90 - }, - "endLoc": { - "line": 134, - "column": 3, - "position": 993 - } - } - }, - { - "format": "markdown", - "lines": 69, - "fragment": " ^ Error: expect(received).toBeGreaterThan(expected)\n 72 | });\n 73 | \n 74 | test(\"hold piece with C key works\", async ({ page }) => {\n 75 | const errors: string[] = [];\n 76 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 77 | \n 78 | await page.keyboard.press(\"c\");\n 79 | await page.waitForTimeout(100);\n 80 | \n 81 | expect(errors).toHaveLength(0);\n 82 | });\n 83 | \n 84 | test(\"restart with R key resets score\", async ({ page }) => {\n 85 | await page.keyboard.press(\" \");\n 86 | await page.waitForTimeout(100);\n 87 | \n 88 | const scoreText = await page.locator(\"#score\").textContent();\n 89 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n 90 | expect(score).toBeGreaterThan(0);\n 91 | \n 92 | await page.keyboard.press(\"r\");\n 93 | await page.waitForTimeout(100);\n 94 | \n 95 | await expect(page.locator(\"#score\")).toHaveText(\"0\");\n 96 | await expect(page.locator(\"#level\")).toHaveText(\"0\");\n 97 | await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n 98 | });\n 99 | \n 100 | test(\"rotation keys work without errors\", async ({ page }) => {\n 101 | const errors: string[] = [];\n 102 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 103 | \n 104 | await page.keyboard.press(\"x\");\n 105 | await page.waitForTimeout(50);\n 106 | await page.keyboard.press(\"z\");\n 107 | await page.waitForTimeout(50);\n 108 | await page.keyboard.press(\"ArrowUp\");\n 109 | await page.waitForTimeout(50);\n 110 | \n 111 | expect(errors).toHaveLength(0);\n 112 | });\n 113 | \n 114 | test(\"game over triggers after filling the board\", async ({ page }) => {\n 115 | const errors: string[] = [];\n 116 | page.on(\"pageerror\", (err) => errors.push(err.message));\n 117 | \n 118 | for (let i = 0; i < 50; i++) {\n 119 | await page.keyboard.press(\" \");\n 120 | await page.waitForTimeout(60);\n 121 | }\n 122 | \n 123 | await page.waitForTimeout(200);\n 124 | expect(errors).toHaveLength(0);\n 125 | });\n 126 | \n 127 | test(\"multiple hard drops track scoring correctly\", async ({ page }) => {\n 128 | let prevScore = 0;\n 129 | for (let i = 0; i < 5; i++) {\n 130 | await page.keyboard.press(\" \");\n 131 | await page.waitForTimeout(100);\n 132 | const text = await page.locator(\"#score\").textContent();\n 133 | const current = parseInt(text!.replace(/,/g, \"\"), 10);\n 134 | expect(current).toBeGreaterThanOrEqual(prevScore);\n 135 | prevS", - "tokens": 0, - "firstFile": { - "name": "test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md", - "start": 136, - "end": 204, - "startLoc": { - "line": 136, - "column": 3, - "position": 1003 - }, - "endLoc": { - "line": 204, - "column": 4, - "position": 1743 - } - }, - "secondFile": { - "name": "test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md", - "start": 135, - "end": 204, - "startLoc": { - "line": 135, - "column": 3, - "position": 1000 - }, - "endLoc": { - "line": 204, - "column": 4, - "position": 1743 - } - } - }, - { - "format": "typescript", - "lines": 8, - "fragment": "await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n\n const scoreText = await page.locator(\"#score\").textContent();\n const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n expect(score).toBeGreaterThan(0);\n\n await", - "tokens": 0, - "firstFile": { - "name": "tests/tetris.spec.ts", - "start": 85, - "end": 92, - "startLoc": { - "line": 85, - "column": 5, - "position": 969 - }, - "endLoc": { - "line": 92, - "column": 6, - "position": 1053 - } - }, - "secondFile": { - "name": "tests/tetris.spec.ts", - "start": 66, - "end": 72, - "startLoc": { - "line": 66, - "column": 5, - "position": 755 - }, - "endLoc": { - "line": 72, - "column": 2, - "position": 838 - } - } - }, - { - "format": "typescript", - "lines": 6, - "fragment": "await expect(page.locator(\"#score\")).toHaveText(\"0\");\n await expect(page.locator(\"#level\")).toHaveText(\"0\");\n await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n });\n\n test(\"rotation keys work without errors\"", - "tokens": 0, - "firstFile": { - "name": "tests/tetris.spec.ts", - "start": 95, - "end": 100, - "startLoc": { - "line": 95, - "column": 5, - "position": 1078 - }, - "endLoc": { - "line": 100, - "column": 36, - "position": 1143 - } - }, - "secondFile": { - "name": "tests/tetris.spec.ts", - "start": 28, - "end": 33, - "startLoc": { - "line": 28, - "column": 5, - "position": 321 - }, - "endLoc": { - "line": 33, - "column": 29, - "position": 386 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/tetris.ts @@ -1,634 +0,0 @@ -// ============================================================ -// Tetris – full browser game in a single TypeScript file -// ============================================================ - -// ----- Constants -------------------------------------------- - -const COLS = 10; -const ROWS = 20; -const BLOCK_SIZE = 32; -const PREVIEW_BLOCK = 20; - -const COLORS: Record<string, string> = { - I: "#00f0f0", - O: "#f0f000", - T: "#a000f0", - S: "#00f000", - Z: "#f00000", - J: "#0000f0", - L: "#f0a000", -}; - -const GHOST_ALPHA = 0.25; - -// Shapes stored as [row][col] offsets for each rotation state -// Using the Super Rotation System (SRS) shapes -type Shape = number[][]; - -const SHAPES: Record<string, Shape[]> = { - I: [ - [[0,0],[0,1],[0,2],[0,3]], - [[0,2],[1,2],[2,2],[3,2]], - [[2,0],[2,1],[2,2],[2,3]], - [[0,1],[1,1],[2,1],[3,1]], - ], - O: [ - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - ], - T: [ - [[0,1],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[1,2],[2,1]], - [[0,1],[1,0],[1,1],[2,1]], - ], - S: [ - [[0,1],[0,2],[1,0],[1,1]], - [[0,0],[1,0],[1,1],[2,1]], - [[1,1],[1,2],[2,0],[2,1]], - [[0,0],[1,0],[1,1],[2,1]], - ], - Z: [ - [[0,0],[0,1],[1,1],[1,2]], - [[0,2],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[2,1],[2,2]], - [[0,1],[1,0],[1,1],[2,0]], - ], - J: [ - [[0,0],[1,0],[1,1],[1,2]], - [[0,1],[0,2],[1,1],[2,1]], - [[1,0],[1,1],[1,2],[2,2]], - [[0,1],[1,1],[2,0],[2,1]], - ], - L: [ - [[0,2],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[2,1],[2,2]], - [[1,0],[1,1],[1,2],[2,0]], - [[0,0],[0,1],[1,1],[2,1]], - ], -}; - -// SRS wall‐kick data (non‐I pieces) -const WALL_KICKS: Record<string, [number, number][]> = { - "0>1": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - "1>0": [[0,0],[1,0],[1,-1],[0,2],[1,2]], - "1>2": [[0,0],[1,0],[1,-1],[0,2],[1,2]], - "2>1": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - "2>3": [[0,0],[1,0],[1,1],[0,-2],[1,-2]], - "3>2": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - "3>0": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - "0>3": [[0,0],[1,0],[1,1],[0,-2],[1,-2]], -}; - -// SRS wall‐kick data for I piece -const WALL_KICKS_I: Record<string, [number, number][]> = { - "0>1": [[0,0],[-2,0],[1,0],[-2,-1],[1,2]], - "1>0": [[0,0],[2,0],[-1,0],[2,1],[-1,-2]], - "1>2": [[0,0],[-1,0],[2,0],[-1,2],[2,-1]], - "2>1": [[0,0],[1,0],[-2,0],[1,-2],[-2,1]], - "2>3": [[0,0],[2,0],[-1,0],[2,1],[-1,-2]], - "3>2": [[0,0],[-2,0],[1,0],[-2,-1],[1,2]], - "3>0": [[0,0],[1,0],[-2,0],[1,-2],[-2,1]], - "0>3": [[0,0],[-1,0],[2,0],[-1,2],[2,-1]], -}; - -// Points per lines cleared (original Nintendo scoring × level multiplier) -const LINE_POINTS = [0, 100, 300, 500, 800]; - -// ----- Types ------------------------------------------------ - -interface Piece { - type: string; - rotation: number; - row: number; - col: number; -} - -type Board = (string | null)[][]; - -// ----- Game State ------------------------------------------- - -let board: Board; -let current: Piece; -let nextPiece: Piece; -let heldType: string | null; -let canHold: boolean; -let score: number; -let level: number; -let lines: number; -let gameOver: boolean; -let paused: boolean; -let dropInterval: number; -let lastDrop: number; -let bag: string[]; -let animatingRows: number[]; -let animationStart: number; -const ANIMATION_DURATION = 300; // ms -let lockDelay: number; -let lockTimer: number; -const LOCK_DELAY = 500; // ms before piece locks after landing - -// DAS (Delayed Auto Shift) state -let dasDirection: number = 0; // -1 left, 1 right, 0 none -let dasTimer: number = 0; -let dasActive: boolean = false; -const DAS_DELAY = 170; // ms before auto-repeat starts -const DAS_REPEAT = 50; // ms between repeats - -let softDropping: boolean = false; - -// ----- Canvas setup ----------------------------------------- - -const canvas = document.getElementById("game-canvas") as HTMLCanvasElement; -const ctx = canvas.getContext("2d")!; -canvas.width = COLS * BLOCK_SIZE; -canvas.height = ROWS * BLOCK_SIZE; - -const previewCanvas = document.getElementById("preview-canvas") as HTMLCanvasElement; -const previewCtx = previewCanvas.getContext("2d")!; - -const holdCanvas = document.getElementById("hold-canvas") as HTMLCanvasElement; -const holdCtx = holdCanvas.getContext("2d")!; - -const scoreEl = document.getElementById("score")!; -const levelEl = document.getElementById("level")!; -const linesEl = document.getElementById("lines")!; -const overlayEl = document.getElementById("overlay")!; -const overlayTextEl = document.getElementById("overlay-text")!; - -// ----- Bag randomiser (7‐bag) -------------------------------- - -function fillBag(): void { - const types = ["I", "O", "T", "S", "Z", "J", "L"]; - // Fisher‑Yates shuffle - for (let i = types.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [types[i], types[j]] = [types[j], types[i]]; - } - bag = bag.concat(types); -} - -function nextFromBag(): string { - if (bag.length < 7) fillBag(); - return bag.shift()!; -} - -// ----- Piece helpers ---------------------------------------- - -function createPiece(type: string): Piece { - return { - type, - rotation: 0, - row: type === "I" ? -1 : 0, - col: Math.floor((COLS - (type === "I" ? 4 : type === "O" ? 2 : 3)) / 2), - }; -} - -function getCells(p: Piece): [number, number][] { - return SHAPES[p.type][p.rotation].map(([r, c]) => [p.row + r, p.col + c]); -} - -function isValid(p: Piece): boolean { - return getCells(p).every( - ([r, c]) => c >= 0 && c < COLS && r < ROWS && (r < 0 || board[r][c] === null) - ); -} - -// ----- Board helpers ---------------------------------------- - -function createBoard(): Board { - return Array.from({ length: ROWS }, () => Array(COLS).fill(null)); -} - -function lockPiece(): void { - const cells = getCells(current); - for (const [r, c] of cells) { - if (r < 0) { - endGame(); - return; - } - board[r][c] = current.type; - } - clearLines(); - spawnNext(); -} - -function clearLines(): void { - const fullRows: number[] = []; - for (let r = 0; r < ROWS; r++) { - if (board[r].every((cell) => cell !== null)) { - fullRows.push(r); - } - } - if (fullRows.length === 0) return; - - // Start animation - animatingRows = fullRows; - animationStart = performance.now(); - - // We'll actually remove the rows after the animation completes - setTimeout(() => { - // Remove full rows and add empty rows at top - for (const r of fullRows.sort((a, b) => b - a)) { - board.splice(r, 1); - board.unshift(Array(COLS).fill(null)); - } - animatingRows = []; - - const count = fullRows.length; - score += LINE_POINTS[count] * (level + 1); - lines += count; - const newLevel = Math.floor(lines / 10); - if (newLevel > level) { - level = newLevel; - dropInterval = getDropInterval(level); - } - updateHUD(); - }, ANIMATION_DURATION); -} - -function getDropInterval(lvl: number): number { - // Speeds up as level increases, minimum 50ms - return Math.max(50, 1000 - lvl * 80); -} - -// ----- Spawn / hold ----------------------------------------- - -function spawnNext(): void { - current = nextPiece; - nextPiece = createPiece(nextFromBag()); - canHold = true; - lockTimer = 0; - if (!isValid(current)) { - endGame(); - } -} - -function holdPiece(): void { - if (!canHold) return; - canHold = false; - const type = current.type; - if (heldType) { - current = createPiece(heldType); - } else { - current = nextPiece; - nextPiece = createPiece(nextFromBag()); - } - heldType = type; - lockTimer = 0; -} - -// ----- Movement / rotation ---------------------------------- - -function movePiece(dCol: number, dRow: number): boolean { - const test: Piece = { ...current, row: current.row + dRow, col: current.col + dCol }; - if (isValid(test)) { - current = test; - return true; - } - return false; -} - -function rotatePiece(dir: 1 | -1): boolean { - const oldRot = current.rotation; - const newRot = (oldRot + dir + 4) % 4; - const kicks = - current.type === "I" - ? WALL_KICKS_I[`${oldRot}>${newRot}`] - : WALL_KICKS[`${oldRot}>${newRot}`]; - - for (const [dx, dy] of kicks) { - const test: Piece = { ...current, rotation: newRot, col: current.col + dx, row: current.row - dy }; - if (isValid(test)) { - current = test; - return true; - } - } - return false; -} - -function hardDrop(): void { - let dropped = 0; - while (movePiece(0, 1)) dropped++; - score += dropped * 2; - updateHUD(); - lockPiece(); - lastDrop = performance.now(); -} - -function getGhostRow(): number { - let ghostRow = current.row; - while (true) { - const test: Piece = { ...current, row: ghostRow + 1 }; - if (!isValid(test)) break; - ghostRow++; - } - return ghostRow; -} - -// ----- Drawing ---------------------------------------------- - -function drawBlock( - context: CanvasRenderingContext2D, - x: number, - y: number, - size: number, - color: string, - alpha: number = 1 -): void { - context.globalAlpha = alpha; - context.fillStyle = color; - context.fillRect(x, y, size, size); - - // Highlight (top-left) - context.fillStyle = "rgba(255,255,255,0.3)"; - context.fillRect(x, y, size, 2); - context.fillRect(x, y, 2, size); - - // Shadow (bottom-right) - context.fillStyle = "rgba(0,0,0,0.3)"; - context.fillRect(x, y + size - 2, size, 2); - context.fillRect(x + size - 2, y, 2, size); - - // Grid line - context.strokeStyle = "rgba(0,0,0,0.15)"; - context.strokeRect(x, y, size, size); - - context.globalAlpha = 1; -} - -function drawBoard(): void { - // Background - ctx.fillStyle = "#111"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - ctx.strokeRect(c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE); - } - } - - // Locked cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const cell = board[r][c]; - if (cell) { - // Check if this row is animating - if (animatingRows.includes(r)) { - const elapsed = performance.now() - animationStart; - const progress = Math.min(elapsed / ANIMATION_DURATION, 1); - const alpha = 1 - progress; - drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[cell], alpha); - // Flash effect - ctx.fillStyle = `rgba(255,255,255,${(1 - progress) * 0.5})`; - ctx.fillRect(c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE); - } else { - drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[cell]); - } - } - } - } - - if (gameOver) return; - - // Ghost piece - const ghostRow = getGhostRow(); - const ghostCells = SHAPES[current.type][current.rotation].map( - ([r, c]): [number, number] => [ghostRow + r, current.col + c] - ); - for (const [r, c] of ghostCells) { - if (r >= 0) { - drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[current.type], GHOST_ALPHA); - } - } - - // Current piece - for (const [r, c] of getCells(current)) { - if (r >= 0) { - drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[current.type]); - } - } -} - -function drawPreview( - context: CanvasRenderingContext2D, - cvs: HTMLCanvasElement, - type: string | null -): void { - context.fillStyle = "#1a1a2e"; - context.fillRect(0, 0, cvs.width, cvs.height); - if (!type) return; - const shape = SHAPES[type][0]; - // Compute bounding box - let minR = Infinity, maxR = -Infinity, minC = Infinity, maxC = -Infinity; - for (const [r, c] of shape) { - minR = Math.min(minR, r); - maxR = Math.max(maxR, r); - minC = Math.min(minC, c); - maxC = Math.max(maxC, c); - } - const w = maxC - minC + 1; - const h = maxR - minR + 1; - const offsetX = (cvs.width - w * PREVIEW_BLOCK) / 2; - const offsetY = (cvs.height - h * PREVIEW_BLOCK) / 2; - for (const [r, c] of shape) { - drawBlock( - context, - offsetX + (c - minC) * PREVIEW_BLOCK, - offsetY + (r - minR) * PREVIEW_BLOCK, - PREVIEW_BLOCK, - COLORS[type] - ); - } -} - -function updateHUD(): void { - scoreEl.textContent = score.toLocaleString(); - levelEl.textContent = String(level); - linesEl.textContent = String(lines); -} - -// ----- Game lifecycle --------------------------------------- - -function initGame(): void { - board = createBoard(); - bag = []; - fillBag(); - score = 0; - level = 0; - lines = 0; - gameOver = false; - paused = false; - heldType = null; - canHold = true; - animatingRows = []; - animationStart = 0; - lockTimer = 0; - dropInterval = getDropInterval(0); - lastDrop = performance.now(); - softDropping = false; - dasDirection = 0; - dasTimer = 0; - dasActive = false; - - nextPiece = createPiece(nextFromBag()); - spawnNext(); - updateHUD(); - overlayEl.classList.add("hidden"); -} - -function endGame(): void { - gameOver = true; - overlayTextEl.textContent = "GAME OVER"; - const sub = overlayEl.querySelector(".overlay-sub") as HTMLElement; - sub.textContent = "Press R to restart"; - overlayEl.classList.remove("hidden"); -} - -function togglePause(): void { - if (gameOver) return; - paused = !paused; - if (paused) { - overlayTextEl.textContent = "PAUSED"; - const sub = overlayEl.querySelector(".overlay-sub") as HTMLElement; - sub.textContent = "Press P to resume"; - overlayEl.classList.remove("hidden"); - } else { - overlayEl.classList.add("hidden"); - lastDrop = performance.now(); - } -} - -// ----- Input ------------------------------------------------ - -const keysDown = new Set<string>(); - -document.addEventListener("keydown", (e) => { - if (e.repeat && (e.key === "ArrowUp" || e.key === " " || e.key === "z" || e.key === "x" || e.key === "c")) return; - - if (e.key === "r" || e.key === "R") { - initGame(); - return; - } - if (e.key === "p" || e.key === "P") { - togglePause(); - return; - } - if (gameOver || paused) return; - - switch (e.key) { - case "ArrowLeft": - e.preventDefault(); - movePiece(-1, 0); - dasDirection = -1; - dasTimer = performance.now(); - dasActive = false; - break; - case "ArrowRight": - e.preventDefault(); - movePiece(1, 0); - dasDirection = 1; - dasTimer = performance.now(); - dasActive = false; - break; - case "ArrowDown": - e.preventDefault(); - softDropping = true; - break; - case "ArrowUp": - case "x": - e.preventDefault(); - rotatePiece(1); - break; - case "z": - rotatePiece(-1); - break; - case " ": - e.preventDefault(); - hardDrop(); - break; - case "c": - case "Shift": - holdPiece(); - break; - } - keysDown.add(e.key); -}); - -document.addEventListener("keyup", (e) => { - keysDown.delete(e.key); - if (e.key === "ArrowLeft" || e.key === "ArrowRight") { - // If the other arrow is still held, switch DAS to it - if (e.key === "ArrowLeft" && keysDown.has("ArrowRight")) { - dasDirection = 1; - dasTimer = performance.now(); - dasActive = false; - } else if (e.key === "ArrowRight" && keysDown.has("ArrowLeft")) { - dasDirection = -1; - dasTimer = performance.now(); - dasActive = false; - } else { - dasDirection = 0; - } - } - if (e.key === "ArrowDown") { - softDropping = false; - } -}); - -// ----- Game loop -------------------------------------------- - -function update(now: number): void { - if (gameOver || paused) return; - - // DAS (auto-repeat horizontal movement) - if (dasDirection !== 0) { - const elapsed = now - dasTimer; - if (!dasActive && elapsed >= DAS_DELAY) { - dasActive = true; - dasTimer = now; - movePiece(dasDirection, 0); - } else if (dasActive && elapsed >= DAS_REPEAT) { - dasTimer = now; - movePiece(dasDirection, 0); - } - } - - // Determine effective drop interval - const effectiveInterval = softDropping ? Math.min(dropInterval, 50) : dropInterval; - - if (now - lastDrop >= effectiveInterval) { - if (!movePiece(0, 1)) { - // Piece can't move down — engage lock delay - lockTimer += now - lastDrop; - if (lockTimer >= LOCK_DELAY) { - lockPiece(); - lockTimer = 0; - } - } else { - lockTimer = 0; - if (softDropping) { - score += 1; - updateHUD(); - } - } - lastDrop = now; - } -} - -function gameLoop(now: number): void { - update(now); - drawBoard(); - drawPreview(previewCtx, previewCanvas, nextPiece?.type ?? null); - drawPreview(holdCtx, holdCanvas, heldType); - requestAnimationFrame(gameLoop); -} - -// ----- Start ------------------------------------------------ - -initGame(); -requestAnimationFrame(gameLoop); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/.last-run.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/.last-run.json @@ -1,9 +0,0 @@ -{ - "status": "failed", - "failedTests": [ - "6baa4ec9526ae743938d-8733010251eafbf37722", - "6baa4ec9526ae743938d-edfcf6a16921c67bd82d", - "6baa4ec9526ae743938d-99393cdf5814e1b93bb5", - "6baa4ec9526ae743938d-8543bd81062e0e10bf47" - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md @@ -1,204 +0,0 @@ -# Instructions - -- Following Playwright test failed. -- Explain why, be concise, respect Playwright best practices. -- Provide a snippet of code with the fix, if possible. - -# Test info - -- Name: tests/tetris.spec.ts >> Tetris Game >> hard drop with Space increases score -- Location: tests/tetris.spec.ts:63:7 - -# Error details - -``` -Error: expect(received).toBeGreaterThan(expected) - -Expected: > 0 -Received: 0 -``` - -# Page snapshot - -```yaml -- generic [ref=e2]: - - generic [ref=e3]: - - heading "Hold" [level=3] [ref=e5] - - generic [ref=e7]: - - heading "Score" [level=3] [ref=e8] - - generic [ref=e9]: "0" - - generic [ref=e10]: - - heading "Level" [level=3] [ref=e11] - - generic [ref=e12]: "0" - - generic [ref=e13]: - - heading "Lines" [level=3] [ref=e14] - - generic [ref=e15]: "0" - - generic [ref=e16]: - - generic [ref=e17]: ← - - generic [ref=e18]: → - - text: Move - - generic [ref=e19]: ↓ - - text: Soft drop - - generic [ref=e20]: ↑ - - text: / - - generic [ref=e21]: X - - text: Rotate CW - - generic [ref=e22]: Z - - text: Rotate CCW - - generic [ref=e23]: Space - - text: Hard drop - - generic [ref=e24]: C - - text: / - - generic [ref=e25]: Shift - - text: Hold - - generic [ref=e26]: P - - text: Pause - - generic [ref=e27]: R - - text: Restart - - heading "Next" [level=3] [ref=e32] -``` - -# Test source - -```ts - 1 | import { test, expect } from "@playwright/test"; - 2 | import { join } from "path"; - 3 | - 4 | const htmlPath = join(__dirname, "..", "index.html"); - 5 | - 6 | test.describe("Tetris Game", () => { - 7 | test.beforeEach(async ({ page }) => { - 8 | await page.goto(`file://${htmlPath}`); - 9 | await page.waitForSelector("#game-canvas"); - 10 | await page.waitForTimeout(200); - 11 | }); - 12 | - 13 | test("renders the game canvas", async ({ page }) => { - 14 | const canvas = page.locator("#game-canvas"); - 15 | await expect(canvas).toBeVisible(); - 16 | const box = await canvas.boundingBox(); - 17 | expect(box).not.toBeNull(); - 18 | expect(box!.width).toBe(320); - 19 | expect(box!.height).toBe(640); - 20 | }); - 21 | - 22 | test("renders preview and hold canvases", async ({ page }) => { - 23 | await expect(page.locator("#preview-canvas")).toBeVisible(); - 24 | await expect(page.locator("#hold-canvas")).toBeVisible(); - 25 | }); - 26 | - 27 | test("displays initial score, level, and lines as 0", async ({ page }) => { - 28 | await expect(page.locator("#score")).toHaveText("0"); - 29 | await expect(page.locator("#level")).toHaveText("0"); - 30 | await expect(page.locator("#lines")).toHaveText("0"); - 31 | }); - 32 | - 33 | test("overlay is hidden on start", async ({ page }) => { - 34 | const overlay = page.locator("#overlay"); - 35 | await expect(overlay).toHaveClass(/hidden/); - 36 | }); - 37 | - 38 | test("pause toggles with P key", async ({ page }) => { - 39 | const overlay = page.locator("#overlay"); - 40 | await expect(overlay).toHaveClass(/hidden/); - 41 | - 42 | await page.keyboard.press("p"); - 43 | await expect(overlay).not.toHaveClass(/hidden/); - 44 | await expect(page.locator("#overlay-text")).toHaveText("PAUSED"); - 45 | - 46 | await page.keyboard.press("p"); - 47 | await expect(overlay).toHaveClass(/hidden/); - 48 | }); - 49 | - 50 | test("arrow keys move pieces without errors", async ({ page }) => { - 51 | const errors: string[] = []; - 52 | page.on("pageerror", (err) => errors.push(err.message)); - 53 | - 54 | await page.keyboard.press("ArrowLeft"); - 55 | await page.keyboard.press("ArrowRight"); - 56 | await page.keyboard.press("ArrowDown"); - 57 | await page.keyboard.press("ArrowUp"); - 58 | await page.waitForTimeout(100); - 59 | - 60 | expect(errors).toHaveLength(0); - 61 | }); - 62 | - 63 | test("hard drop with Space increases score", async ({ page }) => { - 64 | await expect(page.locator("#score")).toHaveText("0"); - 65 | - 66 | await page.keyboard.press(" "); - 67 | await page.waitForTimeout(100); - 68 | - 69 | const scoreText = await page.locator("#score").textContent(); - 70 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); -> 71 | expect(score).toBeGreaterThan(0); - | ^ Error: expect(received).toBeGreaterThan(expected) - 72 | }); - 73 | - 74 | test("hold piece with C key works", async ({ page }) => { - 75 | const errors: string[] = []; - 76 | page.on("pageerror", (err) => errors.push(err.message)); - 77 | - 78 | await page.keyboard.press("c"); - 79 | await page.waitForTimeout(100); - 80 | - 81 | expect(errors).toHaveLength(0); - 82 | }); - 83 | - 84 | test("restart with R key resets score", async ({ page }) => { - 85 | await page.keyboard.press(" "); - 86 | await page.waitForTimeout(100); - 87 | - 88 | const scoreText = await page.locator("#score").textContent(); - 89 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 90 | expect(score).toBeGreaterThan(0); - 91 | - 92 | await page.keyboard.press("r"); - 93 | await page.waitForTimeout(100); - 94 | - 95 | await expect(page.locator("#score")).toHaveText("0"); - 96 | await expect(page.locator("#level")).toHaveText("0"); - 97 | await expect(page.locator("#lines")).toHaveText("0"); - 98 | }); - 99 | - 100 | test("rotation keys work without errors", async ({ page }) => { - 101 | const errors: string[] = []; - 102 | page.on("pageerror", (err) => errors.push(err.message)); - 103 | - 104 | await page.keyboard.press("x"); - 105 | await page.waitForTimeout(50); - 106 | await page.keyboard.press("z"); - 107 | await page.waitForTimeout(50); - 108 | await page.keyboard.press("ArrowUp"); - 109 | await page.waitForTimeout(50); - 110 | - 111 | expect(errors).toHaveLength(0); - 112 | }); - 113 | - 114 | test("game over triggers after filling the board", async ({ page }) => { - 115 | const errors: string[] = []; - 116 | page.on("pageerror", (err) => errors.push(err.message)); - 117 | - 118 | for (let i = 0; i < 50; i++) { - 119 | await page.keyboard.press(" "); - 120 | await page.waitForTimeout(60); - 121 | } - 122 | - 123 | await page.waitForTimeout(200); - 124 | expect(errors).toHaveLength(0); - 125 | }); - 126 | - 127 | test("multiple hard drops track scoring correctly", async ({ page }) => { - 128 | let prevScore = 0; - 129 | for (let i = 0; i < 5; i++) { - 130 | await page.keyboard.press(" "); - 131 | await page.waitForTimeout(100); - 132 | const text = await page.locator("#score").textContent(); - 133 | const current = parseInt(text!.replace(/,/g, ""), 10); - 134 | expect(current).toBeGreaterThanOrEqual(prevScore); - 135 | prevScore = current; - 136 | } - 137 | }); - 138 | }); - 139 | -``` -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md @@ -1,213 +0,0 @@ -# Instructions - -- Following Playwright test failed. -- Explain why, be concise, respect Playwright best practices. -- Provide a snippet of code with the fix, if possible. - -# Test info - -- Name: tests/tetris.spec.ts >> Tetris Game >> pause toggles with P key -- Location: tests/tetris.spec.ts:38:7 - -# Error details - -``` -Error: expect(locator).not.toHaveClass(expected) failed - -Locator: locator('#overlay') -Expected pattern: not /hidden/ -Received string: "hidden" -Timeout: 5000ms - -Call log: - - Expect "not toHaveClass" with timeout 5000ms - - waiting for locator('#overlay') - 9 × locator resolved to <div id="overlay" class="hidden">…</div> - - unexpected value "hidden" - -``` - -# Page snapshot - -```yaml -- generic [ref=e2]: - - generic [ref=e3]: - - heading "Hold" [level=3] [ref=e5] - - generic [ref=e7]: - - heading "Score" [level=3] [ref=e8] - - generic [ref=e9]: "0" - - generic [ref=e10]: - - heading "Level" [level=3] [ref=e11] - - generic [ref=e12]: "0" - - generic [ref=e13]: - - heading "Lines" [level=3] [ref=e14] - - generic [ref=e15]: "0" - - generic [ref=e16]: - - generic [ref=e17]: ← - - generic [ref=e18]: → - - text: Move - - generic [ref=e19]: ↓ - - text: Soft drop - - generic [ref=e20]: ↑ - - text: / - - generic [ref=e21]: X - - text: Rotate CW - - generic [ref=e22]: Z - - text: Rotate CCW - - generic [ref=e23]: Space - - text: Hard drop - - generic [ref=e24]: C - - text: / - - generic [ref=e25]: Shift - - text: Hold - - generic [ref=e26]: P - - text: Pause - - generic [ref=e27]: R - - text: Restart - - heading "Next" [level=3] [ref=e32] -``` - -# Test source - -```ts - 1 | import { test, expect } from "@playwright/test"; - 2 | import { join } from "path"; - 3 | - 4 | const htmlPath = join(__dirname, "..", "index.html"); - 5 | - 6 | test.describe("Tetris Game", () => { - 7 | test.beforeEach(async ({ page }) => { - 8 | await page.goto(`file://${htmlPath}`); - 9 | await page.waitForSelector("#game-canvas"); - 10 | await page.waitForTimeout(200); - 11 | }); - 12 | - 13 | test("renders the game canvas", async ({ page }) => { - 14 | const canvas = page.locator("#game-canvas"); - 15 | await expect(canvas).toBeVisible(); - 16 | const box = await canvas.boundingBox(); - 17 | expect(box).not.toBeNull(); - 18 | expect(box!.width).toBe(320); - 19 | expect(box!.height).toBe(640); - 20 | }); - 21 | - 22 | test("renders preview and hold canvases", async ({ page }) => { - 23 | await expect(page.locator("#preview-canvas")).toBeVisible(); - 24 | await expect(page.locator("#hold-canvas")).toBeVisible(); - 25 | }); - 26 | - 27 | test("displays initial score, level, and lines as 0", async ({ page }) => { - 28 | await expect(page.locator("#score")).toHaveText("0"); - 29 | await expect(page.locator("#level")).toHaveText("0"); - 30 | await expect(page.locator("#lines")).toHaveText("0"); - 31 | }); - 32 | - 33 | test("overlay is hidden on start", async ({ page }) => { - 34 | const overlay = page.locator("#overlay"); - 35 | await expect(overlay).toHaveClass(/hidden/); - 36 | }); - 37 | - 38 | test("pause toggles with P key", async ({ page }) => { - 39 | const overlay = page.locator("#overlay"); - 40 | await expect(overlay).toHaveClass(/hidden/); - 41 | - 42 | await page.keyboard.press("p"); -> 43 | await expect(overlay).not.toHaveClass(/hidden/); - | ^ Error: expect(locator).not.toHaveClass(expected) failed - 44 | await expect(page.locator("#overlay-text")).toHaveText("PAUSED"); - 45 | - 46 | await page.keyboard.press("p"); - 47 | await expect(overlay).toHaveClass(/hidden/); - 48 | }); - 49 | - 50 | test("arrow keys move pieces without errors", async ({ page }) => { - 51 | const errors: string[] = []; - 52 | page.on("pageerror", (err) => errors.push(err.message)); - 53 | - 54 | await page.keyboard.press("ArrowLeft"); - 55 | await page.keyboard.press("ArrowRight"); - 56 | await page.keyboard.press("ArrowDown"); - 57 | await page.keyboard.press("ArrowUp"); - 58 | await page.waitForTimeout(100); - 59 | - 60 | expect(errors).toHaveLength(0); - 61 | }); - 62 | - 63 | test("hard drop with Space increases score", async ({ page }) => { - 64 | await expect(page.locator("#score")).toHaveText("0"); - 65 | - 66 | await page.keyboard.press(" "); - 67 | await page.waitForTimeout(100); - 68 | - 69 | const scoreText = await page.locator("#score").textContent(); - 70 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 71 | expect(score).toBeGreaterThan(0); - 72 | }); - 73 | - 74 | test("hold piece with C key works", async ({ page }) => { - 75 | const errors: string[] = []; - 76 | page.on("pageerror", (err) => errors.push(err.message)); - 77 | - 78 | await page.keyboard.press("c"); - 79 | await page.waitForTimeout(100); - 80 | - 81 | expect(errors).toHaveLength(0); - 82 | }); - 83 | - 84 | test("restart with R key resets score", async ({ page }) => { - 85 | await page.keyboard.press(" "); - 86 | await page.waitForTimeout(100); - 87 | - 88 | const scoreText = await page.locator("#score").textContent(); - 89 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 90 | expect(score).toBeGreaterThan(0); - 91 | - 92 | await page.keyboard.press("r"); - 93 | await page.waitForTimeout(100); - 94 | - 95 | await expect(page.locator("#score")).toHaveText("0"); - 96 | await expect(page.locator("#level")).toHaveText("0"); - 97 | await expect(page.locator("#lines")).toHaveText("0"); - 98 | }); - 99 | - 100 | test("rotation keys work without errors", async ({ page }) => { - 101 | const errors: string[] = []; - 102 | page.on("pageerror", (err) => errors.push(err.message)); - 103 | - 104 | await page.keyboard.press("x"); - 105 | await page.waitForTimeout(50); - 106 | await page.keyboard.press("z"); - 107 | await page.waitForTimeout(50); - 108 | await page.keyboard.press("ArrowUp"); - 109 | await page.waitForTimeout(50); - 110 | - 111 | expect(errors).toHaveLength(0); - 112 | }); - 113 | - 114 | test("game over triggers after filling the board", async ({ page }) => { - 115 | const errors: string[] = []; - 116 | page.on("pageerror", (err) => errors.push(err.message)); - 117 | - 118 | for (let i = 0; i < 50; i++) { - 119 | await page.keyboard.press(" "); - 120 | await page.waitForTimeout(60); - 121 | } - 122 | - 123 | await page.waitForTimeout(200); - 124 | expect(errors).toHaveLength(0); - 125 | }); - 126 | - 127 | test("multiple hard drops track scoring correctly", async ({ page }) => { - 128 | let prevScore = 0; - 129 | for (let i = 0; i < 5; i++) { - 130 | await page.keyboard.press(" "); - 131 | await page.waitForTimeout(100); - 132 | const text = await page.locator("#score").textContent(); - 133 | const current = parseInt(text!.replace(/,/g, ""), 10); - 134 | expect(current).toBeGreaterThanOrEqual(prevScore); - 135 | prevScore = current; - 136 | } - 137 | }); - 138 | }); - 139 | -``` -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md @@ -1,183 +0,0 @@ -# Instructions - -- Following Playwright test failed. -- Explain why, be concise, respect Playwright best practices. -- Provide a snippet of code with the fix, if possible. - -# Test info - -- Name: tests/tetris.spec.ts >> Tetris Game >> renders the game canvas -- Location: tests/tetris.spec.ts:13:7 - -# Error details - -``` -Error: expect(received).toBe(expected) // Object.is equality - -Expected: 320 -Received: 300 -``` - -# Page snapshot - -```yaml -- generic [ref=e2]: - - generic [ref=e3]: - - heading "Hold" [level=3] [ref=e5] - - generic [ref=e7]: - - heading "Score" [level=3] [ref=e8] - - generic [ref=e9]: "0" - - generic [ref=e10]: - - heading "Level" [level=3] [ref=e11] - - generic [ref=e12]: "0" - - generic [ref=e13]: - - heading "Lines" [level=3] [ref=e14] - - generic [ref=e15]: "0" - - generic [ref=e16]: - - generic [ref=e17]: ← - - generic [ref=e18]: → - - text: Move - - generic [ref=e19]: ↓ - - text: Soft drop - - generic [ref=e20]: ↑ - - text: / - - generic [ref=e21]: X - - text: Rotate CW - - generic [ref=e22]: Z - - text: Rotate CCW - - generic [ref=e23]: Space - - text: Hard drop - - generic [ref=e24]: C - - text: / - - generic [ref=e25]: Shift - - text: Hold - - generic [ref=e26]: P - - text: Pause - - generic [ref=e27]: R - - text: Restart - - heading "Next" [level=3] [ref=e32] -``` - -# Test source - -```ts - 1 | import { test, expect } from "@playwright/test"; - 2 | import { join } from "path"; - 3 | - 4 | const htmlPath = join(__dirname, "..", "index.html"); - 5 | - 6 | test.describe("Tetris Game", () => { - 7 | test.beforeEach(async ({ page }) => { - 8 | await page.goto(`file://${htmlPath}`); - 9 | await page.waitForSelector("#game-canvas"); - 10 | await page.waitForTimeout(200); - 11 | }); - 12 | - 13 | test("renders the game canvas", async ({ page }) => { - 14 | const canvas = page.locator("#game-canvas"); - 15 | await expect(canvas).toBeVisible(); - 16 | const box = await canvas.boundingBox(); - 17 | expect(box).not.toBeNull(); -> 18 | expect(box!.width).toBe(320); - | ^ Error: expect(received).toBe(expected) // Object.is equality - 19 | expect(box!.height).toBe(640); - 20 | }); - 21 | - 22 | test("renders preview and hold canvases", async ({ page }) => { - 23 | await expect(page.locator("#preview-canvas")).toBeVisible(); - 24 | await expect(page.locator("#hold-canvas")).toBeVisible(); - 25 | }); - 26 | - 27 | test("displays initial score, level, and lines as 0", async ({ page }) => { - 28 | await expect(page.locator("#score")).toHaveText("0"); - 29 | await expect(page.locator("#level")).toHaveText("0"); - 30 | await expect(page.locator("#lines")).toHaveText("0"); - 31 | }); - 32 | - 33 | test("overlay is hidden on start", async ({ page }) => { - 34 | const overlay = page.locator("#overlay"); - 35 | await expect(overlay).toHaveClass(/hidden/); - 36 | }); - 37 | - 38 | test("pause toggles with P key", async ({ page }) => { - 39 | const overlay = page.locator("#overlay"); - 40 | await expect(overlay).toHaveClass(/hidden/); - 41 | - 42 | await page.keyboard.press("p"); - 43 | await expect(overlay).not.toHaveClass(/hidden/); - 44 | await expect(page.locator("#overlay-text")).toHaveText("PAUSED"); - 45 | - 46 | await page.keyboard.press("p"); - 47 | await expect(overlay).toHaveClass(/hidden/); - 48 | }); - 49 | - 50 | test("arrow keys move pieces without errors", async ({ page }) => { - 51 | const errors: string[] = []; - 52 | page.on("pageerror", (err) => errors.push(err.message)); - 53 | - 54 | await page.keyboard.press("ArrowLeft"); - 55 | await page.keyboard.press("ArrowRight"); - 56 | await page.keyboard.press("ArrowDown"); - 57 | await page.keyboard.press("ArrowUp"); - 58 | await page.waitForTimeout(100); - 59 | - 60 | expect(errors).toHaveLength(0); - 61 | }); - 62 | - 63 | test("hard drop with Space increases score", async ({ page }) => { - 64 | await expect(page.locator("#score")).toHaveText("0"); - 65 | - 66 | await page.keyboard.press(" "); - 67 | await page.waitForTimeout(100); - 68 | - 69 | const scoreText = await page.locator("#score").textContent(); - 70 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 71 | expect(score).toBeGreaterThan(0); - 72 | }); - 73 | - 74 | test("hold piece with C key works", async ({ page }) => { - 75 | const errors: string[] = []; - 76 | page.on("pageerror", (err) => errors.push(err.message)); - 77 | - 78 | await page.keyboard.press("c"); - 79 | await page.waitForTimeout(100); - 80 | - 81 | expect(errors).toHaveLength(0); - 82 | }); - 83 | - 84 | test("restart with R key resets score", async ({ page }) => { - 85 | await page.keyboard.press(" "); - 86 | await page.waitForTimeout(100); - 87 | - 88 | const scoreText = await page.locator("#score").textContent(); - 89 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 90 | expect(score).toBeGreaterThan(0); - 91 | - 92 | await page.keyboard.press("r"); - 93 | await page.waitForTimeout(100); - 94 | - 95 | await expect(page.locator("#score")).toHaveText("0"); - 96 | await expect(page.locator("#level")).toHaveText("0"); - 97 | await expect(page.locator("#lines")).toHaveText("0"); - 98 | }); - 99 | - 100 | test("rotation keys work without errors", async ({ page }) => { - 101 | const errors: string[] = []; - 102 | page.on("pageerror", (err) => errors.push(err.message)); - 103 | - 104 | await page.keyboard.press("x"); - 105 | await page.waitForTimeout(50); - 106 | await page.keyboard.press("z"); - 107 | await page.waitForTimeout(50); - 108 | await page.keyboard.press("ArrowUp"); - 109 | await page.waitForTimeout(50); - 110 | - 111 | expect(errors).toHaveLength(0); - 112 | }); - 113 | - 114 | test("game over triggers after filling the board", async ({ page }) => { - 115 | const errors: string[] = []; - 116 | page.on("pageerror", (err) => errors.push(err.message)); - 117 | - 118 | for (let i = 0; i < 50; i++) { -``` -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md @@ -1,204 +0,0 @@ -# Instructions - -- Following Playwright test failed. -- Explain why, be concise, respect Playwright best practices. -- Provide a snippet of code with the fix, if possible. - -# Test info - -- Name: tests/tetris.spec.ts >> Tetris Game >> restart with R key resets score -- Location: tests/tetris.spec.ts:84:7 - -# Error details - -``` -Error: expect(received).toBeGreaterThan(expected) - -Expected: > 0 -Received: 0 -``` - -# Page snapshot - -```yaml -- generic [ref=e2]: - - generic [ref=e3]: - - heading "Hold" [level=3] [ref=e5] - - generic [ref=e7]: - - heading "Score" [level=3] [ref=e8] - - generic [ref=e9]: "0" - - generic [ref=e10]: - - heading "Level" [level=3] [ref=e11] - - generic [ref=e12]: "0" - - generic [ref=e13]: - - heading "Lines" [level=3] [ref=e14] - - generic [ref=e15]: "0" - - generic [ref=e16]: - - generic [ref=e17]: ← - - generic [ref=e18]: → - - text: Move - - generic [ref=e19]: ↓ - - text: Soft drop - - generic [ref=e20]: ↑ - - text: / - - generic [ref=e21]: X - - text: Rotate CW - - generic [ref=e22]: Z - - text: Rotate CCW - - generic [ref=e23]: Space - - text: Hard drop - - generic [ref=e24]: C - - text: / - - generic [ref=e25]: Shift - - text: Hold - - generic [ref=e26]: P - - text: Pause - - generic [ref=e27]: R - - text: Restart - - heading "Next" [level=3] [ref=e32] -``` - -# Test source - -```ts - 1 | import { test, expect } from "@playwright/test"; - 2 | import { join } from "path"; - 3 | - 4 | const htmlPath = join(__dirname, "..", "index.html"); - 5 | - 6 | test.describe("Tetris Game", () => { - 7 | test.beforeEach(async ({ page }) => { - 8 | await page.goto(`file://${htmlPath}`); - 9 | await page.waitForSelector("#game-canvas"); - 10 | await page.waitForTimeout(200); - 11 | }); - 12 | - 13 | test("renders the game canvas", async ({ page }) => { - 14 | const canvas = page.locator("#game-canvas"); - 15 | await expect(canvas).toBeVisible(); - 16 | const box = await canvas.boundingBox(); - 17 | expect(box).not.toBeNull(); - 18 | expect(box!.width).toBe(320); - 19 | expect(box!.height).toBe(640); - 20 | }); - 21 | - 22 | test("renders preview and hold canvases", async ({ page }) => { - 23 | await expect(page.locator("#preview-canvas")).toBeVisible(); - 24 | await expect(page.locator("#hold-canvas")).toBeVisible(); - 25 | }); - 26 | - 27 | test("displays initial score, level, and lines as 0", async ({ page }) => { - 28 | await expect(page.locator("#score")).toHaveText("0"); - 29 | await expect(page.locator("#level")).toHaveText("0"); - 30 | await expect(page.locator("#lines")).toHaveText("0"); - 31 | }); - 32 | - 33 | test("overlay is hidden on start", async ({ page }) => { - 34 | const overlay = page.locator("#overlay"); - 35 | await expect(overlay).toHaveClass(/hidden/); - 36 | }); - 37 | - 38 | test("pause toggles with P key", async ({ page }) => { - 39 | const overlay = page.locator("#overlay"); - 40 | await expect(overlay).toHaveClass(/hidden/); - 41 | - 42 | await page.keyboard.press("p"); - 43 | await expect(overlay).not.toHaveClass(/hidden/); - 44 | await expect(page.locator("#overlay-text")).toHaveText("PAUSED"); - 45 | - 46 | await page.keyboard.press("p"); - 47 | await expect(overlay).toHaveClass(/hidden/); - 48 | }); - 49 | - 50 | test("arrow keys move pieces without errors", async ({ page }) => { - 51 | const errors: string[] = []; - 52 | page.on("pageerror", (err) => errors.push(err.message)); - 53 | - 54 | await page.keyboard.press("ArrowLeft"); - 55 | await page.keyboard.press("ArrowRight"); - 56 | await page.keyboard.press("ArrowDown"); - 57 | await page.keyboard.press("ArrowUp"); - 58 | await page.waitForTimeout(100); - 59 | - 60 | expect(errors).toHaveLength(0); - 61 | }); - 62 | - 63 | test("hard drop with Space increases score", async ({ page }) => { - 64 | await expect(page.locator("#score")).toHaveText("0"); - 65 | - 66 | await page.keyboard.press(" "); - 67 | await page.waitForTimeout(100); - 68 | - 69 | const scoreText = await page.locator("#score").textContent(); - 70 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); - 71 | expect(score).toBeGreaterThan(0); - 72 | }); - 73 | - 74 | test("hold piece with C key works", async ({ page }) => { - 75 | const errors: string[] = []; - 76 | page.on("pageerror", (err) => errors.push(err.message)); - 77 | - 78 | await page.keyboard.press("c"); - 79 | await page.waitForTimeout(100); - 80 | - 81 | expect(errors).toHaveLength(0); - 82 | }); - 83 | - 84 | test("restart with R key resets score", async ({ page }) => { - 85 | await page.keyboard.press(" "); - 86 | await page.waitForTimeout(100); - 87 | - 88 | const scoreText = await page.locator("#score").textContent(); - 89 | const score = parseInt(scoreText!.replace(/,/g, ""), 10); -> 90 | expect(score).toBeGreaterThan(0); - | ^ Error: expect(received).toBeGreaterThan(expected) - 91 | - 92 | await page.keyboard.press("r"); - 93 | await page.waitForTimeout(100); - 94 | - 95 | await expect(page.locator("#score")).toHaveText("0"); - 96 | await expect(page.locator("#level")).toHaveText("0"); - 97 | await expect(page.locator("#lines")).toHaveText("0"); - 98 | }); - 99 | - 100 | test("rotation keys work without errors", async ({ page }) => { - 101 | const errors: string[] = []; - 102 | page.on("pageerror", (err) => errors.push(err.message)); - 103 | - 104 | await page.keyboard.press("x"); - 105 | await page.waitForTimeout(50); - 106 | await page.keyboard.press("z"); - 107 | await page.waitForTimeout(50); - 108 | await page.keyboard.press("ArrowUp"); - 109 | await page.waitForTimeout(50); - 110 | - 111 | expect(errors).toHaveLength(0); - 112 | }); - 113 | - 114 | test("game over triggers after filling the board", async ({ page }) => { - 115 | const errors: string[] = []; - 116 | page.on("pageerror", (err) => errors.push(err.message)); - 117 | - 118 | for (let i = 0; i < 50; i++) { - 119 | await page.keyboard.press(" "); - 120 | await page.waitForTimeout(60); - 121 | } - 122 | - 123 | await page.waitForTimeout(200); - 124 | expect(errors).toHaveLength(0); - 125 | }); - 126 | - 127 | test("multiple hard drops track scoring correctly", async ({ page }) => { - 128 | let prevScore = 0; - 129 | for (let i = 0; i < 5; i++) { - 130 | await page.keyboard.press(" "); - 131 | await page.waitForTimeout(100); - 132 | const text = await page.locator("#score").textContent(); - 133 | const current = parseInt(text!.replace(/,/g, ""), 10); - 134 | expect(current).toBeGreaterThanOrEqual(prevScore); - 135 | prevScore = current; - 136 | } - 137 | }); - 138 | }); - 139 | -``` -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tests/tetris.spec.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tests/tetris.spec.ts @@ -1,138 +0,0 @@ -import { test, expect } from "@playwright/test"; -import { join } from "path"; - -const htmlPath = join(__dirname, "..", "index.html"); - -test.describe("Tetris Game", () => { - test.beforeEach(async ({ page }) => { - await page.goto(`file://${htmlPath}`); - await page.waitForSelector("#game-canvas"); - await page.waitForTimeout(200); - }); - - test("renders the game canvas", async ({ page }) => { - const canvas = page.locator("#game-canvas"); - await expect(canvas).toBeVisible(); - const box = await canvas.boundingBox(); - expect(box).not.toBeNull(); - expect(box!.width).toBe(320); - expect(box!.height).toBe(640); - }); - - test("renders preview and hold canvases", async ({ page }) => { - await expect(page.locator("#preview-canvas")).toBeVisible(); - await expect(page.locator("#hold-canvas")).toBeVisible(); - }); - - test("displays initial score, level, and lines as 0", async ({ page }) => { - await expect(page.locator("#score")).toHaveText("0"); - await expect(page.locator("#level")).toHaveText("0"); - await expect(page.locator("#lines")).toHaveText("0"); - }); - - test("overlay is hidden on start", async ({ page }) => { - const overlay = page.locator("#overlay"); - await expect(overlay).toHaveClass(/hidden/); - }); - - test("pause toggles with P key", async ({ page }) => { - const overlay = page.locator("#overlay"); - await expect(overlay).toHaveClass(/hidden/); - - await page.keyboard.press("p"); - await expect(overlay).not.toHaveClass(/hidden/); - await expect(page.locator("#overlay-text")).toHaveText("PAUSED"); - - await page.keyboard.press("p"); - await expect(overlay).toHaveClass(/hidden/); - }); - - test("arrow keys move pieces without errors", async ({ page }) => { - const errors: string[] = []; - page.on("pageerror", (err) => errors.push(err.message)); - - await page.keyboard.press("ArrowLeft"); - await page.keyboard.press("ArrowRight"); - await page.keyboard.press("ArrowDown"); - await page.keyboard.press("ArrowUp"); - await page.waitForTimeout(100); - - expect(errors).toHaveLength(0); - }); - - test("hard drop with Space increases score", async ({ page }) => { - await expect(page.locator("#score")).toHaveText("0"); - - await page.keyboard.press(" "); - await page.waitForTimeout(100); - - const scoreText = await page.locator("#score").textContent(); - const score = parseInt(scoreText!.replace(/,/g, ""), 10); - expect(score).toBeGreaterThan(0); - }); - - test("hold piece with C key works", async ({ page }) => { - const errors: string[] = []; - page.on("pageerror", (err) => errors.push(err.message)); - - await page.keyboard.press("c"); - await page.waitForTimeout(100); - - expect(errors).toHaveLength(0); - }); - - test("restart with R key resets score", async ({ page }) => { - await page.keyboard.press(" "); - await page.waitForTimeout(100); - - const scoreText = await page.locator("#score").textContent(); - const score = parseInt(scoreText!.replace(/,/g, ""), 10); - expect(score).toBeGreaterThan(0); - - await page.keyboard.press("r"); - await page.waitForTimeout(100); - - await expect(page.locator("#score")).toHaveText("0"); - await expect(page.locator("#level")).toHaveText("0"); - await expect(page.locator("#lines")).toHaveText("0"); - }); - - test("rotation keys work without errors", async ({ page }) => { - const errors: string[] = []; - page.on("pageerror", (err) => errors.push(err.message)); - - await page.keyboard.press("x"); - await page.waitForTimeout(50); - await page.keyboard.press("z"); - await page.waitForTimeout(50); - await page.keyboard.press("ArrowUp"); - await page.waitForTimeout(50); - - expect(errors).toHaveLength(0); - }); - - test("game over triggers after filling the board", async ({ page }) => { - const errors: string[] = []; - page.on("pageerror", (err) => errors.push(err.message)); - - for (let i = 0; i < 50; i++) { - await page.keyboard.press(" "); - await page.waitForTimeout(60); - } - - await page.waitForTimeout(200); - expect(errors).toHaveLength(0); - }); - - test("multiple hard drops track scoring correctly", async ({ page }) => { - let prevScore = 0; - for (let i = 0; i < 5; i++) { - await page.keyboard.press(" "); - await page.waitForTimeout(100); - const text = await page.locator("#score").textContent(); - const current = parseInt(text!.replace(/,/g, ""), 10); - expect(current).toBeGreaterThanOrEqual(prevScore); - prevScore = current; - } - }); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ES2020", - "strict": true, - "outDir": "./dist", - "rootDir": "./src", - "sourceMap": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"] - }, - "include": ["src/**/*.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html @@ -1,48 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - * { margin: 0; padding: 0; box-sizing: border-box; } - body { - background: #0f0f23; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 100vh; - font-family: 'Segoe UI', monospace, sans-serif; - color: #ccc; - } - h1 { - font-size: 2rem; - margin-bottom: 12px; - letter-spacing: 0.3em; - color: #e0e0ff; - text-shadow: 0 0 20px rgba(100,100,255,0.4); - } - #game-canvas { - border: 2px solid #333; - border-radius: 4px; - box-shadow: 0 0 40px rgba(0,0,0,0.6); - } - #controls { - margin-top: 16px; - font-size: 0.85rem; - color: #888; - text-align: center; - max-width: 500px; - line-height: 1.7; - } - #controls strong { color: #aaa; } - </style> -</head> -<body> - <h1>TETRIS</h1> - <canvas id="game-canvas"></canvas> - <div id="controls"></div> - <script src="dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-uihc72su", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-uihc72su", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,22 +0,0 @@ -{ - "name": "loop-bench-uihc72su", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,116 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:44:01.233Z", - "formats": { - "typescript": { - "sources": { - "src/tetris.ts": { - "lines": 715, - "tokens": 8085, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 715, - "tokens": 8085, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 10, - "tokens": 66, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 31, - "tokens": 198, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 47, - "tokens": 326, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 47, - "tokens": 326, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 793, - "tokens": 8609, - "sources": 4, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/src/tetris.ts @@ -1,716 +0,0 @@ -// ============================================================ -// Tetris — A fully playable browser Tetris in TypeScript -// ============================================================ - -// ---- Constants ------------------------------------------------ - -const COLS = 10; -const ROWS = 20; -const BLOCK_SIZE = 30; -const PREVIEW_BLOCK = 20; - -const COLORS: Record<string, string> = { - I: "#00f0f0", - O: "#f0f000", - T: "#a000f0", - S: "#00f000", - Z: "#f00000", - J: "#0000f0", - L: "#f0a000", -}; - -const GHOST_ALPHA = 0.25; - -// Points per number of lines cleared at once (classic BPS scoring) -const LINE_POINTS: Record<number, number> = { - 1: 100, - 2: 300, - 3: 500, - 4: 800, -}; - -// Frames-per-drop at each level (speeds up as level increases) -function getDropInterval(level: number): number { - // Starts at 800ms, floors at 50ms - return Math.max(50, 800 - (level - 1) * 70); -} - -// ---- Piece Definitions (SRS) ----------------------------------- - -type PieceType = "I" | "O" | "T" | "S" | "Z" | "J" | "L"; - -// Each shape defined as 4 rotation states (matrices of coords relative to pivot) -const SHAPES: Record<PieceType, number[][][]> = { - I: [ - [[0,0],[1,0],[2,0],[3,0]], - [[2,-1],[2,0],[2,1],[2,2]], - [[0,1],[1,1],[2,1],[3,1]], - [[1,-1],[1,0],[1,1],[1,2]], - ], - O: [ - [[0,0],[1,0],[0,1],[1,1]], - [[0,0],[1,0],[0,1],[1,1]], - [[0,0],[1,0],[0,1],[1,1]], - [[0,0],[1,0],[0,1],[1,1]], - ], - T: [ - [[0,0],[1,0],[2,0],[1,1]], - [[1,-1],[1,0],[1,1],[0,0]], - [[0,1],[1,1],[2,1],[1,0]], - [[1,-1],[1,0],[1,1],[2,0]], - ], - S: [ - [[1,0],[2,0],[0,1],[1,1]], - [[1,-1],[1,0],[2,0],[2,1]], - [[1,0],[2,0],[0,1],[1,1]], - [[1,-1],[1,0],[2,0],[2,1]], - ], - Z: [ - [[0,0],[1,0],[1,1],[2,1]], - [[2,-1],[2,0],[1,0],[1,1]], - [[0,0],[1,0],[1,1],[2,1]], - [[2,-1],[2,0],[1,0],[1,1]], - ], - J: [ - [[0,0],[1,0],[2,0],[0,1]], - [[1,-1],[1,0],[1,1],[2,1]], - [[2,0],[0,1],[1,1],[2,1]], - [[0,-1],[1,-1],[1,0],[1,1]], - ], - L: [ - [[0,0],[1,0],[2,0],[2,1]], - [[1,-1],[1,0],[1,1],[2,-1]], - [[0,0],[0,1],[1,1],[2,1]], - [[0,1],[1,-1],[1,0],[1,1]], - ], -}; - -// SRS wall kick data (non-I pieces) -const WALL_KICKS: Record<string, [number, number][]> = { - "0>1": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - "1>0": [[0,0],[1,0],[1,1],[0,-2],[1,-2]], - "1>2": [[0,0],[1,0],[1,1],[0,-2],[1,-2]], - "2>1": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - "2>3": [[0,0],[1,0],[1,-1],[0,2],[1,2]], - "3>2": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - "3>0": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - "0>3": [[0,0],[1,0],[1,-1],[0,2],[1,2]], -}; - -// SRS wall kick data for I piece -const I_WALL_KICKS: Record<string, [number, number][]> = { - "0>1": [[0,0],[-2,0],[1,0],[-2,1],[1,-2]], - "1>0": [[0,0],[2,0],[-1,0],[2,-1],[-1,2]], - "1>2": [[0,0],[-1,0],[2,0],[-1,-2],[2,1]], - "2>1": [[0,0],[1,0],[-2,0],[1,2],[-2,-1]], - "2>3": [[0,0],[2,0],[-1,0],[2,-1],[-1,2]], - "3>2": [[0,0],[-2,0],[1,0],[-2,1],[1,-2]], - "3>0": [[0,0],[1,0],[-2,0],[1,2],[-2,-1]], - "0>3": [[0,0],[-1,0],[2,0],[-1,-2],[2,1]], -}; - -// ---- Board / Grid ----------------------------------------------- - -type Cell = string | null; // color string or null - -function createGrid(): Cell[][] { - return Array.from({ length: ROWS }, () => Array(COLS).fill(null)); -} - -// ---- Piece State ------------------------------------------------- - -interface Piece { - type: PieceType; - rotation: number; // 0-3 - x: number; // board column of origin - y: number; // board row of origin -} - -function spawnPiece(type: PieceType): Piece { - return { type, rotation: 0, x: 3, y: 0 }; -} - -function getCells(p: Piece): [number, number][] { - return SHAPES[p.type][p.rotation].map(([dx, dy]) => [p.x + dx, p.y + dy]); -} - -// ---- Collision Detection ----------------------------------------- - -function isValid(grid: Cell[][], p: Piece): boolean { - for (const [cx, cy] of getCells(p)) { - if (cx < 0 || cx >= COLS || cy >= ROWS) return false; - if (cy >= 0 && grid[cy][cx] !== null) return false; - } - return true; -} - -// ---- Random Bag Generator ---------------------------------------- - -function createBag(): PieceType[] { - const bag: PieceType[] = ["I", "O", "T", "S", "Z", "J", "L"]; - // Fisher-Yates shuffle - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - return bag; -} - -// ---- Game State -------------------------------------------------- - -interface GameState { - grid: Cell[][]; - current: Piece; - bag: PieceType[]; - nextPiece: PieceType; - heldPiece: PieceType | null; - canHold: boolean; - score: number; - level: number; - lines: number; - gameOver: boolean; - paused: boolean; - dropTimer: number; - lockTimer: number; - lockDelay: number; // ms before piece locks after landing - lastTime: number; - started: boolean; - flashRows: number[]; - flashTimer: number; -} - -function nextFromBag(bag: PieceType[]): PieceType { - if (bag.length === 0) { - bag.push(...createBag()); - } - return bag.pop()!; -} - -function initGame(): GameState { - const bag = createBag(); - const first = bag.pop()!; - const second = bag.pop()!; - return { - grid: createGrid(), - current: spawnPiece(first), - bag, - nextPiece: second, - heldPiece: null, - canHold: true, - score: 0, - level: 1, - lines: 0, - gameOver: false, - paused: false, - dropTimer: 0, - lockTimer: 0, - lockDelay: 500, - lastTime: 0, - started: false, - flashRows: [], - flashTimer: 0, - }; -} - -// ---- Core Mechanics ----------------------------------------------- - -function tryMove(grid: Cell[][], p: Piece, dx: number, dy: number): Piece | null { - const moved: Piece = { ...p, x: p.x + dx, y: p.y + dy }; - return isValid(grid, moved) ? moved : null; -} - -function tryRotate(grid: Cell[][], p: Piece, dir: 1 | -1): Piece | null { - const newRot = ((p.rotation + dir) % 4 + 4) % 4; - const key = `${p.rotation}>${newRot}`; - const kicks = p.type === "I" ? I_WALL_KICKS[key] : WALL_KICKS[key]; - if (!kicks) return null; - for (const [kx, ky] of kicks) { - const candidate: Piece = { ...p, rotation: newRot, x: p.x + kx, y: p.y - ky }; - if (isValid(grid, candidate)) return candidate; - } - return null; -} - -function ghostY(grid: Cell[][], p: Piece): number { - let ghost = { ...p }; - while (true) { - const next = tryMove(grid, ghost, 0, 1); - if (!next) break; - ghost = next; - } - return ghost.y; -} - -function lockPiece(state: GameState): void { - const color = COLORS[state.current.type]; - for (const [cx, cy] of getCells(state.current)) { - if (cy >= 0 && cy < ROWS && cx >= 0 && cx < COLS) { - state.grid[cy][cx] = color; - } - } - state.canHold = true; - - // Check for cleared lines - const cleared: number[] = []; - for (let r = 0; r < ROWS; r++) { - if (state.grid[r].every(c => c !== null)) { - cleared.push(r); - } - } - - if (cleared.length > 0) { - state.flashRows = cleared; - state.flashTimer = 300; // flash for 300ms - } else { - spawnNext(state); - } -} - -function clearLines(state: GameState): void { - const cleared = state.flashRows; - if (cleared.length === 0) return; - - // Remove cleared rows and add empty ones at top - for (const r of cleared.sort((a, b) => b - a)) { - state.grid.splice(r, 1); - state.grid.unshift(Array(COLS).fill(null)); - } - - const n = cleared.length; - const pts = (LINE_POINTS[n] || n * 200) * state.level; - state.score += pts; - state.lines += n; - state.level = Math.floor(state.lines / 10) + 1; - - state.flashRows = []; - state.flashTimer = 0; -} - -function spawnNext(state: GameState): void { - const next = spawnPiece(state.nextPiece); - state.nextPiece = nextFromBag(state.bag); - state.current = next; - state.dropTimer = 0; - state.lockTimer = 0; - - if (!isValid(state.grid, state.current)) { - state.gameOver = true; - } -} - -function hardDrop(state: GameState): void { - const gy = ghostY(state.grid, state.current); - const dist = gy - state.current.y; - state.score += dist * 2; - state.current.y = gy; - lockPiece(state); -} - -function holdPiece(state: GameState): void { - if (!state.canHold) return; - state.canHold = false; - const curType = state.current.type; - if (state.heldPiece !== null) { - state.current = spawnPiece(state.heldPiece); - state.heldPiece = curType; - } else { - state.heldPiece = curType; - state.current = spawnPiece(state.nextPiece); - state.nextPiece = nextFromBag(state.bag); - } - state.dropTimer = 0; - state.lockTimer = 0; -} - -function isOnGround(grid: Cell[][], p: Piece): boolean { - return tryMove(grid, p, 0, 1) === null; -} - -// ---- Rendering ---------------------------------------------------- - -function drawBlock( - ctx: CanvasRenderingContext2D, - x: number, y: number, - size: number, - color: string, - alpha: number = 1 -): void { - ctx.globalAlpha = alpha; - ctx.fillStyle = color; - ctx.fillRect(x * size, y * size, size, size); - - // Highlight (top-left bevel) - ctx.fillStyle = "rgba(255,255,255,0.3)"; - ctx.fillRect(x * size, y * size, size, 2); - ctx.fillRect(x * size, y * size, 2, size); - - // Shadow (bottom-right bevel) - ctx.fillStyle = "rgba(0,0,0,0.3)"; - ctx.fillRect(x * size, (y + 1) * size - 2, size, 2); - ctx.fillRect((x + 1) * size - 2, y * size, 2, size); - - // Grid outline - ctx.strokeStyle = "rgba(0,0,0,0.15)"; - ctx.lineWidth = 1; - ctx.strokeRect(x * size + 0.5, y * size + 0.5, size - 1, size - 1); - - ctx.globalAlpha = 1; -} - -function drawBoard(ctx: CanvasRenderingContext2D, state: GameState): void { - const { grid, current, flashRows, flashTimer } = state; - const w = COLS * BLOCK_SIZE; - const h = ROWS * BLOCK_SIZE; - - // Background - ctx.fillStyle = "#111"; - ctx.fillRect(0, 0, w, h); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - ctx.lineWidth = 1; - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * BLOCK_SIZE); - ctx.lineTo(w, r * BLOCK_SIZE); - ctx.stroke(); - } - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * BLOCK_SIZE, 0); - ctx.lineTo(c * BLOCK_SIZE, h); - ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (grid[r][c]) { - const flashing = flashRows.includes(r); - if (flashing) { - // Flash white/original alternately - const flashOn = Math.floor(flashTimer / 75) % 2 === 0; - drawBlock(ctx, c, r, BLOCK_SIZE, flashOn ? "#fff" : grid[r][c]!); - } else { - drawBlock(ctx, c, r, BLOCK_SIZE, grid[r][c]!); - } - } - } - } - - if (state.gameOver || state.flashRows.length > 0) return; - - // Ghost piece - const gy = ghostY(grid, current); - const ghostPiece: Piece = { ...current, y: gy }; - const ghostColor = COLORS[current.type]; - for (const [cx, cy] of getCells(ghostPiece)) { - if (cy >= 0) { - drawBlock(ctx, cx, cy, BLOCK_SIZE, ghostColor, GHOST_ALPHA); - } - } - - // Current piece - const color = COLORS[current.type]; - for (const [cx, cy] of getCells(current)) { - if (cy >= 0) { - drawBlock(ctx, cx, cy, BLOCK_SIZE, color); - } - } -} - -function drawPreviewPiece( - ctx: CanvasRenderingContext2D, - type: PieceType, - offsetX: number, - offsetY: number -): void { - const cells = SHAPES[type][0]; - const color = COLORS[type]; - // Center the preview - let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity; - for (const [dx, dy] of cells) { - minX = Math.min(minX, dx); - maxX = Math.max(maxX, dx); - minY = Math.min(minY, dy); - maxY = Math.max(maxY, dy); - } - const pw = (maxX - minX + 1) * PREVIEW_BLOCK; - const ph = (maxY - minY + 1) * PREVIEW_BLOCK; - const cx = offsetX + (4 * PREVIEW_BLOCK - pw) / 2; - const cy = offsetY + (3 * PREVIEW_BLOCK - ph) / 2; - - ctx.save(); - ctx.translate(cx - minX * PREVIEW_BLOCK, cy - minY * PREVIEW_BLOCK); - for (const [dx, dy] of cells) { - drawBlock(ctx, dx, dy, PREVIEW_BLOCK, color); - } - ctx.restore(); -} - -function drawSidebar(ctx: CanvasRenderingContext2D, state: GameState): void { - const x = COLS * BLOCK_SIZE + 20; - - ctx.fillStyle = "#ccc"; - ctx.font = "bold 16px monospace"; - - // Hold - ctx.fillText("HOLD", x, 30); - ctx.strokeStyle = "rgba(255,255,255,0.1)"; - ctx.strokeRect(x, 38, 4 * PREVIEW_BLOCK + 10, 3 * PREVIEW_BLOCK + 10); - if (state.heldPiece) { - drawPreviewPiece(ctx, state.heldPiece, x + 5, 43); - } - - // Next - ctx.fillStyle = "#ccc"; - ctx.fillText("NEXT", x, 130); - ctx.strokeStyle = "rgba(255,255,255,0.1)"; - ctx.strokeRect(x, 138, 4 * PREVIEW_BLOCK + 10, 3 * PREVIEW_BLOCK + 10); - drawPreviewPiece(ctx, state.nextPiece, x + 5, 143); - - // Score - ctx.fillStyle = "#ccc"; - ctx.fillText("SCORE", x, 240); - ctx.fillStyle = "#fff"; - ctx.font = "bold 20px monospace"; - ctx.fillText(state.score.toLocaleString(), x, 265); - - // Level - ctx.fillStyle = "#ccc"; - ctx.font = "bold 16px monospace"; - ctx.fillText("LEVEL", x, 305); - ctx.fillStyle = "#fff"; - ctx.font = "bold 20px monospace"; - ctx.fillText(String(state.level), x, 330); - - // Lines - ctx.fillStyle = "#ccc"; - ctx.font = "bold 16px monospace"; - ctx.fillText("LINES", x, 370); - ctx.fillStyle = "#fff"; - ctx.font = "bold 20px monospace"; - ctx.fillText(String(state.lines), x, 395); -} - -function drawOverlay(ctx: CanvasRenderingContext2D, text: string, sub: string): void { - const w = COLS * BLOCK_SIZE; - const h = ROWS * BLOCK_SIZE; - ctx.fillStyle = "rgba(0,0,0,0.6)"; - ctx.fillRect(0, 0, w, h); - ctx.fillStyle = "#fff"; - ctx.font = "bold 28px monospace"; - ctx.textAlign = "center"; - ctx.fillText(text, w / 2, h / 2 - 10); - ctx.font = "16px monospace"; - ctx.fillStyle = "#aaa"; - ctx.fillText(sub, w / 2, h / 2 + 25); - ctx.textAlign = "left"; -} - -// ---- Main Entry Point --------------------------------------------- - -(function main() { - // Create canvas - const canvas = document.getElementById("game-canvas") as HTMLCanvasElement; - const ctx = canvas.getContext("2d")!; - const totalWidth = COLS * BLOCK_SIZE + 160; - const totalHeight = ROWS * BLOCK_SIZE; - canvas.width = totalWidth; - canvas.height = totalHeight; - - let state = initGame(); - - // ---- Input Handling ------------------------------------------- - - const keysDown: Set<string> = new Set(); - const DAS_DELAY = 170; // initial delay before auto-repeat - const DAS_RATE = 50; // repeat interval - let dasKey: string | null = null; - let dasTimer = 0; - let dasRepeating = false; - - function handleAction(action: string): void { - if (state.gameOver) { - if (action === "Enter") { - state = initGame(); - state.started = true; - } - return; - } - if (!state.started) { - if (action === "Enter") { - state.started = true; - } - return; - } - if (action === "KeyP" || action === "Escape") { - state.paused = !state.paused; - return; - } - if (state.paused) return; - if (state.flashRows.length > 0) return; - - switch (action) { - case "ArrowLeft": { - const moved = tryMove(state.grid, state.current, -1, 0); - if (moved) { state.current = moved; state.lockTimer = 0; } - break; - } - case "ArrowRight": { - const moved = tryMove(state.grid, state.current, 1, 0); - if (moved) { state.current = moved; state.lockTimer = 0; } - break; - } - case "ArrowDown": { - const moved = tryMove(state.grid, state.current, 0, 1); - if (moved) { state.current = moved; state.score += 1; state.dropTimer = 0; } - break; - } - case "ArrowUp": - case "KeyX": { - const rotated = tryRotate(state.grid, state.current, 1); - if (rotated) { state.current = rotated; state.lockTimer = 0; } - break; - } - case "KeyZ": { - const rotated = tryRotate(state.grid, state.current, -1); - if (rotated) { state.current = rotated; state.lockTimer = 0; } - break; - } - case "Space": { - hardDrop(state); - break; - } - case "KeyC": - case "ShiftLeft": - case "ShiftRight": { - holdPiece(state); - break; - } - } - } - - document.addEventListener("keydown", (e) => { - if (["ArrowLeft","ArrowRight","ArrowDown","ArrowUp","Space"].includes(e.code)) { - e.preventDefault(); - } - - if (!keysDown.has(e.code)) { - keysDown.add(e.code); - handleAction(e.code); - - // Start DAS for left/right/down - if (["ArrowLeft", "ArrowRight", "ArrowDown"].includes(e.code)) { - dasKey = e.code; - dasTimer = 0; - dasRepeating = false; - } - } - }); - - document.addEventListener("keyup", (e) => { - keysDown.delete(e.code); - if (e.code === dasKey) { - dasKey = null; - dasTimer = 0; - dasRepeating = false; - } - }); - - // ---- Game Loop -------------------------------------------------- - - function update(dt: number): void { - if (!state.started || state.paused || state.gameOver) return; - - // Handle line clear flash - if (state.flashRows.length > 0) { - state.flashTimer -= dt; - if (state.flashTimer <= 0) { - clearLines(state); - spawnNext(state); - } - return; - } - - // DAS (Delayed Auto Shift) - if (dasKey && keysDown.has(dasKey)) { - dasTimer += dt; - if (!dasRepeating && dasTimer >= DAS_DELAY) { - dasRepeating = true; - dasTimer = 0; - handleAction(dasKey); - } else if (dasRepeating && dasTimer >= DAS_RATE) { - dasTimer = 0; - handleAction(dasKey); - } - } - - // Gravity - state.dropTimer += dt; - const interval = getDropInterval(state.level); - if (state.dropTimer >= interval) { - state.dropTimer -= interval; - const moved = tryMove(state.grid, state.current, 0, 1); - if (moved) { - state.current = moved; - state.lockTimer = 0; - } - } - - // Lock delay - if (isOnGround(state.grid, state.current)) { - state.lockTimer += dt; - if (state.lockTimer >= state.lockDelay) { - lockPiece(state); - } - } else { - state.lockTimer = 0; - } - } - - function render(): void { - ctx.clearRect(0, 0, canvas.width, canvas.height); - - // Dark background for entire canvas - ctx.fillStyle = "#1a1a2e"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - drawBoard(ctx, state); - drawSidebar(ctx, state); - - if (!state.started) { - drawOverlay(ctx, "TETRIS", "Press ENTER to start"); - } else if (state.gameOver) { - drawOverlay(ctx, "GAME OVER", `Score: ${state.score.toLocaleString()} — ENTER to restart`); - } else if (state.paused) { - drawOverlay(ctx, "PAUSED", "Press P or ESC to resume"); - } - } - - function gameLoop(timestamp: number): void { - const dt = state.lastTime ? timestamp - state.lastTime : 0; - state.lastTime = timestamp; - - update(Math.min(dt, 100)); // cap dt to avoid spiral of death - render(); - requestAnimationFrame(gameLoop); - } - - requestAnimationFrame(gameLoop); - - // ---- Controls legend (injected into DOM) ------------------------- - const controls = document.getElementById("controls"); - if (controls) { - controls.innerHTML = ` - <strong>Controls:</strong> - ← → Move | - ↑ / X Rotate CW | - Z Rotate CCW | - ↓ Soft Drop | - Space Hard Drop | - C / Shift Hold | - P / Esc Pause - `; - } -})(); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "none", - "strict": true, - "outFile": "dist/tetris.js", - "sourceMap": true, - "lib": ["ES2020", "DOM"] - }, - "include": ["src/**/*.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/index.html @@ -1,152 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - * { - margin: 0; - padding: 0; - box-sizing: border-box; - } - - body { - background: #0a0a0a; - color: #eee; - font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - overflow: hidden; - } - - #game-wrapper { - display: flex; - gap: 24px; - align-items: flex-start; - } - - #game-container { - position: relative; - border: 2px solid #444; - border-radius: 4px; - background: #111; - } - - #game-canvas { - display: block; - } - - #message { - position: absolute; - inset: 0; - display: flex; - justify-content: center; - align-items: center; - background: rgba(0, 0, 0, 0.8); - color: #fff; - font-size: 20px; - font-weight: bold; - text-align: center; - white-space: pre-line; - line-height: 1.6; - z-index: 10; - border-radius: 4px; - } - - #sidebar { - display: flex; - flex-direction: column; - gap: 20px; - min-width: 140px; - } - - .panel { - background: #1a1a1a; - border: 1px solid #333; - border-radius: 6px; - padding: 14px; - } - - .panel h3 { - font-size: 11px; - text-transform: uppercase; - letter-spacing: 2px; - color: #888; - margin-bottom: 8px; - } - - .panel .value { - font-size: 24px; - font-weight: bold; - color: #fff; - font-variant-numeric: tabular-nums; - } - - #preview-panel { - display: flex; - flex-direction: column; - align-items: center; - } - - #preview-canvas { - display: block; - } - - #controls { - font-size: 11px; - color: #666; - line-height: 1.8; - } - - #controls kbd { - background: #222; - border: 1px solid #444; - border-radius: 3px; - padding: 1px 5px; - font-family: inherit; - font-size: 10px; - color: #aaa; - } - </style> -</head> -<body> - <div id="game-wrapper"> - <div id="game-container"> - <canvas id="game-canvas"></canvas> - <div id="message"></div> - </div> - <div id="sidebar"> - <div class="panel" id="preview-panel"> - <h3>Next</h3> - <canvas id="preview-canvas"></canvas> - </div> - <div class="panel"> - <h3>Score</h3> - <div class="value" id="score">0</div> - </div> - <div class="panel"> - <h3>Lines</h3> - <div class="value" id="lines">0</div> - </div> - <div class="panel"> - <h3>Level</h3> - <div class="value" id="level">1</div> - </div> - <div class="panel" id="controls"> - <h3>Controls</h3> - <kbd>←</kbd> <kbd>→</kbd> Move<br /> - <kbd>↑</kbd> / <kbd>X</kbd> Rotate CW<br /> - <kbd>Z</kbd> Rotate CCW<br /> - <kbd>↓</kbd> Soft drop<br /> - <kbd>Space</kbd> Hard drop<br /> - <kbd>P</kbd> Pause<br /> - <kbd>Enter</kbd> Start - </div> - </div> - </div> - <script type="module" src="./dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-kx4unxjg", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-kx4unxjg", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,24 +0,0 @@ -{ - "name": "loop-bench-kx4unxjg", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "tsc", - "serve": "npx serve .", - "test": "npx playwright test" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,361 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:44:12.403Z", - "formats": { - "typescript": { - "sources": { - "src/tetris.ts": { - "lines": 708, - "tokens": 7698, - "sources": 1, - "clones": 6, - "duplicatedLines": 32, - "duplicatedTokens": 732, - "percentage": 4.52, - "percentageTokens": 9.51, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 708, - "tokens": 7698, - "sources": 1, - "clones": 3, - "duplicatedLines": 16, - "duplicatedTokens": 366, - "percentage": 2.26, - "percentageTokens": 4.75, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "dist/tetris.js": { - "lines": 581, - "tokens": 7068, - "sources": 1, - "clones": 6, - "duplicatedLines": 32, - "duplicatedTokens": 714, - "percentage": 5.51, - "percentageTokens": 10.1, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 581, - "tokens": 7068, - "sources": 1, - "clones": 3, - "duplicatedLines": 16, - "duplicatedTokens": 357, - "percentage": 2.75, - "percentageTokens": 5.05, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 14, - "tokens": 97, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 23, - "tokens": 146, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 37, - "tokens": 243, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 151, - "tokens": 995, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 151, - "tokens": 995, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1477, - "tokens": 16004, - "sources": 5, - "clones": 6, - "duplicatedLines": 32, - "duplicatedTokens": 723, - "percentage": 2.17, - "percentageTokens": 4.52, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "typescript", - "lines": 6, - "fragment": "(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[n", - "tokens": 0, - "firstFile": { - "name": "src/tetris.ts", - "start": 232, - "end": 237, - "startLoc": { - "line": 232, - "column": 10, - "position": 2957 - }, - "endLoc": { - "line": 237, - "column": 2, - "position": 3077 - } - }, - "secondFile": { - "name": "src/tetris.ts", - "start": 221, - "end": 226, - "startLoc": { - "line": 221, - "column": 9, - "position": 2792 - }, - "endLoc": { - "line": 226, - "column": 2, - "position": 2912 - } - } - }, - { - "format": "typescript", - "lines": 6, - "fragment": ", pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = ghostY", - "tokens": 0, - "firstFile": { - "name": "src/tetris.ts", - "start": 509, - "end": 514, - "startLoc": { - "line": 509, - "column": 6, - "position": 5857 - }, - "endLoc": { - "line": 514, - "column": 7, - "position": 5967 - } - }, - "secondFile": { - "name": "src/tetris.ts", - "start": 317, - "end": 322, - "startLoc": { - "line": 317, - "column": 6, - "position": 3904 - }, - "endLoc": { - "line": 322, - "column": 4, - "position": 4014 - } - } - }, - { - "format": "typescript", - "lines": 7, - "fragment": "const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0)", - "tokens": 0, - "firstFile": { - "name": "src/tetris.ts", - "start": 534, - "end": 540, - "startLoc": { - "line": 534, - "column": 7, - "position": 6118 - }, - "endLoc": { - "line": 540, - "column": 2, - "position": 6254 - } - }, - "secondFile": { - "name": "src/tetris.ts", - "start": 317, - "end": 323, - "startLoc": { - "line": 317, - "column": 5, - "position": 3896 - }, - "endLoc": { - "line": 323, - "column": 3, - "position": 4033 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": "(shape) {\n const n = shape.length;\n const rotated = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[n", - "tokens": 0, - "firstFile": { - "name": "dist/tetris.js", - "start": 181, - "end": 186, - "startLoc": { - "line": 181, - "column": 10, - "position": 2578 - }, - "endLoc": { - "line": 186, - "column": 2, - "position": 2689 - } - }, - "secondFile": { - "name": "dist/tetris.js", - "start": 171, - "end": 176, - "startLoc": { - "line": 171, - "column": 9, - "position": 2425 - }, - "endLoc": { - "line": 176, - "column": 2, - "position": 2536 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": ", pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = ghostY", - "tokens": 0, - "firstFile": { - "name": "dist/tetris.js", - "start": 406, - "end": 411, - "startLoc": { - "line": 406, - "column": 6, - "position": 5308 - }, - "endLoc": { - "line": 411, - "column": 7, - "position": 5418 - } - }, - "secondFile": { - "name": "dist/tetris.js", - "start": 255, - "end": 260, - "startLoc": { - "line": 255, - "column": 6, - "position": 3465 - }, - "endLoc": { - "line": 260, - "column": 4, - "position": 3575 - } - } - }, - { - "format": "javascript", - "lines": 7, - "fragment": "const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0)", - "tokens": 0, - "firstFile": { - "name": "dist/tetris.js", - "start": 425, - "end": 431, - "startLoc": { - "line": 425, - "column": 13, - "position": 5561 - }, - "endLoc": { - "line": 431, - "column": 2, - "position": 5697 - } - }, - "secondFile": { - "name": "dist/tetris.js", - "start": 255, - "end": 261, - "startLoc": { - "line": 255, - "column": 9, - "position": 3457 - }, - "endLoc": { - "line": 261, - "column": 3, - "position": 3594 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/src/tetris.ts @@ -1,709 +0,0 @@ -// ─── Types ─────────────────────────────────────────────────────────────────── - -type Cell = string | null; -type Grid = Cell[][]; -type Shape = number[][]; - -interface Position { - x: number; - y: number; -} - -interface Piece { - shape: Shape; - color: string; - pos: Position; -} - -// ─── Constants ─────────────────────────────────────────────────────────────── - -const COLS = 10; -const ROWS = 20; -const BLOCK_SIZE = 30; -const PREVIEW_BLOCK_SIZE = 20; - -const COLORS: Record<string, string> = { - I: "#00f0f0", - O: "#f0f000", - T: "#a000f0", - S: "#00f000", - Z: "#f00000", - J: "#0000f0", - L: "#f0a000", -}; - -const SHAPES: Record<string, Shape> = { - I: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - O: [ - [1, 1], - [1, 1], - ], - T: [ - [0, 1, 0], - [1, 1, 1], - [0, 0, 0], - ], - S: [ - [0, 1, 1], - [1, 1, 0], - [0, 0, 0], - ], - Z: [ - [1, 1, 0], - [0, 1, 1], - [0, 0, 0], - ], - J: [ - [1, 0, 0], - [1, 1, 1], - [0, 0, 0], - ], - L: [ - [0, 0, 1], - [1, 1, 1], - [0, 0, 0], - ], -}; - -// SRS wall kick data for J, L, S, T, Z pieces -const WALL_KICKS: Record<string, [number, number][]> = { - "0>1": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], - "1>0": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], - "1>2": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], - "2>1": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], - "2>3": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], - "3>2": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], - "3>0": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], - "0>3": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], -}; - -// SRS wall kick data for I piece -const WALL_KICKS_I: Record<string, [number, number][]> = { - "0>1": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], - "1>0": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], - "1>2": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], - "2>1": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], - "2>3": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], - "3>2": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], - "3>0": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], - "0>3": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], -}; - -const POINTS = [0, 100, 300, 500, 800]; -const LINES_PER_LEVEL = 10; -const BASE_DROP_INTERVAL = 1000; -const MIN_DROP_INTERVAL = 50; -const SOFT_DROP_INTERVAL = 50; -const LOCK_DELAY = 500; - -const PIECE_NAMES = Object.keys(SHAPES); - -// ─── Game State ────────────────────────────────────────────────────────────── - -class TetrisGame { - private grid: Grid; - private currentPiece: Piece | null = null; - private currentPieceType: string = ""; - private currentRotation: number = 0; - private nextPieceType: string = ""; - private score: number = 0; - private lines: number = 0; - private level: number = 1; - private gameOver: boolean = false; - private paused: boolean = false; - private started: boolean = false; - - private lastDropTime: number = 0; - private dropInterval: number = BASE_DROP_INTERVAL; - private softDropping: boolean = false; - private lockTimer: number | null = null; - private lockStartTime: number = 0; - - private animatingRows: number[] = []; - private animationStart: number = 0; - private readonly ANIMATION_DURATION = 300; - - private bag: string[] = []; - - private canvas: HTMLCanvasElement; - private ctx: CanvasRenderingContext2D; - private previewCanvas: HTMLCanvasElement; - private previewCtx: CanvasRenderingContext2D; - private scoreEl: HTMLElement; - private linesEl: HTMLElement; - private levelEl: HTMLElement; - private messageEl: HTMLElement; - - constructor() { - this.canvas = document.getElementById("game-canvas") as HTMLCanvasElement; - this.ctx = this.canvas.getContext("2d")!; - this.previewCanvas = document.getElementById("preview-canvas") as HTMLCanvasElement; - this.previewCtx = this.previewCanvas.getContext("2d")!; - this.scoreEl = document.getElementById("score")!; - this.linesEl = document.getElementById("lines")!; - this.levelEl = document.getElementById("level")!; - this.messageEl = document.getElementById("message")!; - - this.canvas.width = COLS * BLOCK_SIZE; - this.canvas.height = ROWS * BLOCK_SIZE; - this.previewCanvas.width = 4 * PREVIEW_BLOCK_SIZE + 20; - this.previewCanvas.height = 4 * PREVIEW_BLOCK_SIZE + 20; - - this.grid = this.createGrid(); - - this.setupInput(); - this.showMessage("Press ENTER to start"); - this.draw(); - } - - // ─── Grid Helpers ──────────────────────────────────────────────────────── - - private createGrid(): Grid { - return Array.from({ length: ROWS }, () => Array(COLS).fill(null)); - } - - // ─── Bag Randomizer (7-bag) ────────────────────────────────────────────── - - private fillBag(): void { - const bag = [...PIECE_NAMES]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - this.bag = bag; - } - - private getNextPieceType(): string { - if (this.bag.length === 0) this.fillBag(); - return this.bag.pop()!; - } - - // ─── Piece Mechanics ───────────────────────────────────────────────────── - - private spawnPiece(): void { - const type = this.nextPieceType || this.getNextPieceType(); - this.nextPieceType = this.getNextPieceType(); - - const shape = SHAPES[type].map((row) => [...row]); - const pieceWidth = shape[0].length; - const x = Math.floor((COLS - pieceWidth) / 2); - const y = 0; - - this.currentPiece = { shape, color: COLORS[type], pos: { x, y } }; - this.currentPieceType = type; - this.currentRotation = 0; - this.lockTimer = null; - - if (!this.isValidPosition(shape, x, y)) { - this.endGame(); - } - } - - private isValidPosition(shape: Shape, px: number, py: number): boolean { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const x = px + c; - const y = py + r; - if (x < 0 || x >= COLS || y >= ROWS) return false; - if (y >= 0 && this.grid[y][x] !== null) return false; - } - } - } - return true; - } - - private rotateCW(shape: Shape): Shape { - const n = shape.length; - const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0)); - for (let r = 0; r < n; r++) { - for (let c = 0; c < n; c++) { - rotated[c][n - 1 - r] = shape[r][c]; - } - } - return rotated; - } - - private rotateCCW(shape: Shape): Shape { - const n = shape.length; - const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0)); - for (let r = 0; r < n; r++) { - for (let c = 0; c < n; c++) { - rotated[n - 1 - c][r] = shape[r][c]; - } - } - return rotated; - } - - private tryRotation(clockwise: boolean): boolean { - if (!this.currentPiece) return false; - - const newShape = clockwise - ? this.rotateCW(this.currentPiece.shape) - : this.rotateCCW(this.currentPiece.shape); - - const oldRot = this.currentRotation; - const newRot = clockwise - ? (this.currentRotation + 1) % 4 - : (this.currentRotation + 3) % 4; - - const kickKey = `${oldRot}>${newRot}`; - const kicks = this.currentPieceType === "I" ? WALL_KICKS_I : WALL_KICKS; - const tests = kicks[kickKey] || [[0, 0]]; - - for (const [dx, dy] of tests) { - const nx = this.currentPiece.pos.x + dx; - const ny = this.currentPiece.pos.y - dy; // SRS uses y-up, our grid is y-down - if (this.isValidPosition(newShape, nx, ny)) { - this.currentPiece.shape = newShape; - this.currentPiece.pos.x = nx; - this.currentPiece.pos.y = ny; - this.currentRotation = newRot; - this.resetLockTimerOnAction(); - return true; - } - } - return false; - } - - private movePiece(dx: number, dy: number): boolean { - if (!this.currentPiece) return false; - const nx = this.currentPiece.pos.x + dx; - const ny = this.currentPiece.pos.y + dy; - if (this.isValidPosition(this.currentPiece.shape, nx, ny)) { - this.currentPiece.pos.x = nx; - this.currentPiece.pos.y = ny; - if (dx !== 0) this.resetLockTimerOnAction(); - return true; - } - return false; - } - - private hardDrop(): void { - if (!this.currentPiece) return; - let dropDistance = 0; - while ( - this.isValidPosition( - this.currentPiece.shape, - this.currentPiece.pos.x, - this.currentPiece.pos.y + 1 - ) - ) { - this.currentPiece.pos.y++; - dropDistance++; - } - this.score += dropDistance * 2; - this.lockPiece(); - } - - private getGhostY(): number { - if (!this.currentPiece) return 0; - let gy = this.currentPiece.pos.y; - while ( - this.isValidPosition(this.currentPiece.shape, this.currentPiece.pos.x, gy + 1) - ) { - gy++; - } - return gy; - } - - private lockPiece(): void { - if (!this.currentPiece) return; - const { shape, color, pos } = this.currentPiece; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const x = pos.x + c; - const y = pos.y + r; - if (y >= 0 && y < ROWS && x >= 0 && x < COLS) { - this.grid[y][x] = color; - } - } - } - } - this.currentPiece = null; - this.lockTimer = null; - this.clearLines(); - } - - private resetLockTimerOnAction(): void { - if (this.lockTimer !== null) { - this.lockStartTime = performance.now(); - } - } - - // ─── Line Clearing ────────────────────────────────────────────────────── - - private clearLines(): void { - const fullRows: number[] = []; - for (let r = 0; r < ROWS; r++) { - if (this.grid[r].every((cell) => cell !== null)) { - fullRows.push(r); - } - } - - if (fullRows.length > 0) { - this.animatingRows = fullRows; - this.animationStart = performance.now(); - } else { - this.spawnPiece(); - } - } - - private finishClearLines(): void { - const fullRows = this.animatingRows; - const cleared = fullRows.length; - - // Remove full rows from bottom to top - for (const row of fullRows.sort((a, b) => b - a)) { - this.grid.splice(row, 1); - this.grid.unshift(Array(COLS).fill(null)); - } - - this.lines += cleared; - this.score += POINTS[cleared] * this.level; - this.level = Math.floor(this.lines / LINES_PER_LEVEL) + 1; - this.dropInterval = Math.max( - MIN_DROP_INTERVAL, - BASE_DROP_INTERVAL - (this.level - 1) * 75 - ); - - this.animatingRows = []; - this.updateUI(); - this.spawnPiece(); - } - - // ─── Gravity / Tick ────────────────────────────────────────────────────── - - private tick(now: number): void { - if (this.gameOver || this.paused || !this.started) return; - - // Handle line-clear animation - if (this.animatingRows.length > 0) { - if (now - this.animationStart >= this.ANIMATION_DURATION) { - this.finishClearLines(); - } - return; - } - - if (!this.currentPiece) return; - - const interval = this.softDropping ? SOFT_DROP_INTERVAL : this.dropInterval; - - if (now - this.lastDropTime >= interval) { - const moved = this.movePiece(0, 1); - if (moved) { - if (this.softDropping) this.score += 1; - this.lastDropTime = now; - // If piece can still move down, cancel lock timer - if ( - this.isValidPosition( - this.currentPiece.shape, - this.currentPiece.pos.x, - this.currentPiece.pos.y + 1 - ) - ) { - this.lockTimer = null; - } - } else { - // Piece can't move down — start lock delay - if (this.lockTimer === null) { - this.lockTimer = 1; - this.lockStartTime = now; - } - } - if (moved) this.lastDropTime = now; - } - - // Lock delay check - if (this.lockTimer !== null && now - this.lockStartTime >= LOCK_DELAY) { - // Double-check piece is still grounded - if ( - !this.isValidPosition( - this.currentPiece.shape, - this.currentPiece.pos.x, - this.currentPiece.pos.y + 1 - ) - ) { - this.lockPiece(); - } else { - this.lockTimer = null; - } - } - } - - // ─── Drawing ───────────────────────────────────────────────────────────── - - private drawBlock( - ctx: CanvasRenderingContext2D, - x: number, - y: number, - color: string, - size: number, - alpha: number = 1 - ): void { - ctx.globalAlpha = alpha; - ctx.fillStyle = color; - ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2); - - // Highlight - ctx.fillStyle = "rgba(255,255,255,0.3)"; - ctx.fillRect(x * size + 1, y * size + 1, size - 2, 3); - ctx.fillRect(x * size + 1, y * size + 1, 3, size - 2); - - // Shadow - ctx.fillStyle = "rgba(0,0,0,0.3)"; - ctx.fillRect(x * size + 1, y * size + size - 4, size - 2, 3); - ctx.fillRect(x * size + size - 4, y * size + 1, 3, size - 2); - - ctx.globalAlpha = 1; - } - - private draw(): void { - const ctx = this.ctx; - const bs = BLOCK_SIZE; - - // Background - ctx.fillStyle = "#111"; - ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - - // Grid lines - ctx.strokeStyle = "#222"; - ctx.lineWidth = 0.5; - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * bs); - ctx.lineTo(COLS * bs, r * bs); - ctx.stroke(); - } - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * bs, 0); - ctx.lineTo(c * bs, ROWS * bs); - ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (this.grid[r][c]) { - let alpha = 1; - if (this.animatingRows.includes(r)) { - const progress = - (performance.now() - this.animationStart) / this.ANIMATION_DURATION; - alpha = 1 - progress; - } - this.drawBlock(ctx, c, r, this.grid[r][c]!, bs, alpha); - } - } - } - - // Ghost piece - if (this.currentPiece && !this.gameOver) { - const ghostY = this.getGhostY(); - const { shape, pos } = this.currentPiece; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const x = pos.x + c; - const y = ghostY + r; - if (y >= 0) { - ctx.strokeStyle = this.currentPiece.color; - ctx.lineWidth = 1.5; - ctx.globalAlpha = 0.35; - ctx.strokeRect( - x * bs + 2, - y * bs + 2, - bs - 4, - bs - 4 - ); - ctx.globalAlpha = 1; - } - } - } - } - } - - // Current piece - if (this.currentPiece && !this.gameOver) { - const { shape, color, pos } = this.currentPiece; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const x = pos.x + c; - const y = pos.y + r; - if (y >= 0) { - this.drawBlock(ctx, x, y, color, bs); - } - } - } - } - } - - // Preview piece - this.drawPreview(); - } - - private drawPreview(): void { - const ctx = this.previewCtx; - const bs = PREVIEW_BLOCK_SIZE; - ctx.fillStyle = "#111"; - ctx.fillRect(0, 0, this.previewCanvas.width, this.previewCanvas.height); - - if (!this.nextPieceType) return; - const shape = SHAPES[this.nextPieceType]; - const color = COLORS[this.nextPieceType]; - - // Center the piece in the preview - const pieceW = shape[0].length; - const pieceH = shape.length; - const offsetX = (this.previewCanvas.width - pieceW * bs) / 2 / bs; - const offsetY = (this.previewCanvas.height - pieceH * bs) / 2 / bs; - - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - this.drawBlock(ctx, offsetX + c, offsetY + r, color, bs); - } - } - } - } - - // ─── UI Updates ────────────────────────────────────────────────────────── - - private updateUI(): void { - this.scoreEl.textContent = this.score.toLocaleString(); - this.linesEl.textContent = this.lines.toString(); - this.levelEl.textContent = this.level.toString(); - } - - private showMessage(msg: string): void { - this.messageEl.textContent = msg; - this.messageEl.style.display = "flex"; - } - - private hideMessage(): void { - this.messageEl.style.display = "none"; - } - - // ─── Game Flow ─────────────────────────────────────────────────────────── - - startGame(): void { - this.grid = this.createGrid(); - this.score = 0; - this.lines = 0; - this.level = 1; - this.dropInterval = BASE_DROP_INTERVAL; - this.gameOver = false; - this.paused = false; - this.started = true; - this.bag = []; - this.animatingRows = []; - this.nextPieceType = ""; - this.currentPiece = null; - this.softDropping = false; - - this.updateUI(); - this.hideMessage(); - this.spawnPiece(); - this.lastDropTime = performance.now(); - } - - private endGame(): void { - this.gameOver = true; - this.started = false; - this.showMessage(`Game Over! Score: ${this.score.toLocaleString()}\nPress ENTER to restart`); - } - - private togglePause(): void { - if (!this.started || this.gameOver) return; - this.paused = !this.paused; - if (this.paused) { - this.showMessage("Paused\nPress P to resume"); - } else { - this.hideMessage(); - this.lastDropTime = performance.now(); - } - } - - // ─── Input ─────────────────────────────────────────────────────────────── - - private setupInput(): void { - document.addEventListener("keydown", (e: KeyboardEvent) => { - if (e.key === "Enter") { - if (!this.started || this.gameOver) { - this.startGame(); - } - return; - } - - if (e.key === "p" || e.key === "P") { - this.togglePause(); - return; - } - - if (this.gameOver || this.paused || !this.started || !this.currentPiece) return; - if (this.animatingRows.length > 0) return; - - switch (e.key) { - case "ArrowLeft": - e.preventDefault(); - this.movePiece(-1, 0); - break; - case "ArrowRight": - e.preventDefault(); - this.movePiece(1, 0); - break; - case "ArrowDown": - e.preventDefault(); - this.softDropping = true; - break; - case "ArrowUp": - e.preventDefault(); - this.tryRotation(true); - break; - case "z": - case "Z": - this.tryRotation(false); - break; - case "x": - case "X": - this.tryRotation(true); - break; - case " ": - e.preventDefault(); - this.hardDrop(); - break; - } - }); - - document.addEventListener("keyup", (e: KeyboardEvent) => { - if (e.key === "ArrowDown") { - this.softDropping = false; - } - }); - } - - // ─── Main Loop ─────────────────────────────────────────────────────────── - - run(): void { - const loop = (now: number): void => { - this.tick(now); - this.draw(); - requestAnimationFrame(loop); - }; - requestAnimationFrame(loop); - } -} - -// ─── Bootstrap ─────────────────────────────────────────────────────────────── - -window.addEventListener("DOMContentLoaded", () => { - const game = new TetrisGame(); - game.run(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ES2020", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "outDir": "./dist", - "rootDir": "./src", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "sourceMap": true - }, - "include": ["src/**/*.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html @@ -1,626 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - /* ── Reset & base ───────────────────────────────────────── */ - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0a0a1a; - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - font-family: "Segoe UI", system-ui, sans-serif; - color: #e0e0f0; - overflow: hidden; - } - - /* ── Outer wrapper ─────────────────────────────────────── */ - #app { - display: flex; - gap: 20px; - align-items: flex-start; - user-select: none; - } - - /* ── Board area ────────────────────────────────────────── */ - #board-wrap { - position: relative; - flex-shrink: 0; - } - - #board { - display: block; - border-radius: 4px; - box-shadow: - 0 0 0 2px rgba(255,255,255,0.08), - 0 8px 40px rgba(0,0,0,0.7), - 0 0 60px rgba(80,60,180,0.25); - } - - /* ── Game-over overlay ─────────────────────────────────── */ - #game-over { - display: none; - position: absolute; - inset: 0; - border-radius: 4px; - background: rgba(8, 8, 24, 0.88); - backdrop-filter: blur(4px); - flex-direction: column; - align-items: center; - justify-content: center; - gap: 16px; - z-index: 10; - } - - #game-over h2 { - font-size: 2.4rem; - font-weight: 800; - letter-spacing: 0.06em; - color: #ff5370; - text-shadow: 0 0 20px rgba(255,83,112,0.6); - text-transform: uppercase; - } - - #game-over .go-score-label { - font-size: 0.9rem; - color: #8888bb; - text-transform: uppercase; - letter-spacing: 0.12em; - } - - #game-over .go-score-val { - font-size: 2rem; - font-weight: 700; - color: #fdd835; - } - - #restart-btn { - margin-top: 8px; - padding: 10px 32px; - font-size: 1rem; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - border: 2px solid #7c6af7; - background: transparent; - color: #c5beff; - border-radius: 6px; - cursor: pointer; - transition: background 0.15s, color 0.15s, box-shadow 0.15s; - } - - #restart-btn:hover { - background: #7c6af7; - color: #fff; - box-shadow: 0 0 18px rgba(124,106,247,0.5); - } - - #game-over .go-hint { - font-size: 0.78rem; - color: #5555aa; - letter-spacing: 0.06em; - } - - /* ── Side panel ────────────────────────────────────────── */ - #side { - display: flex; - flex-direction: column; - gap: 18px; - width: 150px; - } - - .panel-box { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 8px; - padding: 14px 16px; - } - - .panel-label { - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.16em; - text-transform: uppercase; - color: #6666aa; - margin-bottom: 8px; - } - - /* ── Next piece ────────────────────────────────────────── */ - #next-canvas { - display: block; - border-radius: 4px; - background: #12122a; - } - - /* ── Stats ─────────────────────────────────────────────── */ - .stat-value { - font-size: 1.65rem; - font-weight: 800; - letter-spacing: 0.04em; - color: #e8e8ff; - line-height: 1; - font-variant-numeric: tabular-nums; - } - - .stat-value.accent { color: #fdd835; } - - /* ── Controls reference ─────────────────────────────────── */ - .controls-grid { - display: grid; - grid-template-columns: auto 1fr; - gap: 5px 10px; - align-items: center; - } - - .key { - display: inline-block; - background: rgba(255,255,255,0.09); - border: 1px solid rgba(255,255,255,0.16); - border-bottom-width: 3px; - border-radius: 4px; - padding: 1px 6px; - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.04em; - color: #aaaacc; - font-family: monospace; - text-align: center; - white-space: nowrap; - } - - .ctrl-desc { - font-size: 0.7rem; - color: #6666aa; - line-height: 1.3; - } - - /* ── Title ──────────────────────────────────────────────── */ - #title { - text-align: center; - font-size: 1.4rem; - font-weight: 900; - letter-spacing: 0.22em; - text-transform: uppercase; - background: linear-gradient(135deg, #7c6af7 0%, #00e5ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - padding-bottom: 2px; - } - </style> -</head> -<body> - <div id="app"> - - <!-- ── Board ── --> - <div id="board-wrap"> - <canvas id="board" width="300" height="600"></canvas> - - <!-- Game-over overlay (sits on top of the board) --> - <div id="game-over"> - <h2>Game Over</h2> - <div> - <div class="go-score-label">Final Score</div> - <div class="go-score-val" id="final-score">0</div> - </div> - <button id="restart-btn">Play Again</button> - <div class="go-hint">or press R / Enter</div> - </div> - </div> - - <!-- ── Side panel ── --> - <div id="side"> - - <div id="title">Tetris</div> - - <!-- Next piece --> - <div class="panel-box"> - <div class="panel-label">Next</div> - <canvas id="next-canvas" width="120" height="120"></canvas> - </div> - - <!-- Score --> - <div class="panel-box"> - <div class="panel-label">Score</div> - <div class="stat-value accent" id="score-val">0</div> - </div> - - <!-- Level --> - <div class="panel-box"> - <div class="panel-label">Level</div> - <div class="stat-value" id="level-val">1</div> - </div> - - <!-- Lines --> - <div class="panel-box"> - <div class="panel-label">Lines</div> - <div class="stat-value" id="lines-val">0</div> - </div> - - <!-- Controls reference --> - <div class="panel-box"> - <div class="panel-label">Controls</div> - <div class="controls-grid"> - <span class="key">← →</span> <span class="ctrl-desc">Move</span> - <span class="key">↑</span> <span class="ctrl-desc">Rotate CW</span> - <span class="key">Z</span> <span class="ctrl-desc">Rotate CCW</span> - <span class="key">↓</span> <span class="ctrl-desc">Soft drop</span> - <span class="key">Space</span><span class="ctrl-desc">Hard drop</span> - </div> - </div> - - </div><!-- /side --> - </div><!-- /app --> - - <script> -"use strict"; -// ============================================================ -// Tetris – fully self-contained TypeScript implementation -// ============================================================ -// ── Constants ──────────────────────────────────────────────── -const COLS = 10; -const ROWS = 20; -const CELL = 30; // px per cell -const COLORS = { - I: "#00e5ff", - O: "#fdd835", - T: "#ab47bc", - S: "#66bb6a", - Z: "#ef5350", - J: "#42a5f5", - L: "#ffa726", -}; -// Highlight / shadow tints for 3-D cell effect -const LIGHT = "rgba(255,255,255,0.28)"; -const DARK = "rgba(0,0,0,0.32)"; -// All rotation states per piece type -// Each rotation is a 2-D array of 0/1 -const SHAPES = { - I: [ - [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]], - [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]], - [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]], - ], - O: [[[1,1],[1,1]]], - T: [ - [[0,1,0],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,1],[0,1,0]], - [[0,1,0],[1,1,0],[0,1,0]], - ], - S: [ - [[0,1,1],[1,1,0],[0,0,0]], - [[0,1,0],[0,1,1],[0,0,1]], - [[0,0,0],[0,1,1],[1,1,0]], - [[1,0,0],[1,1,0],[0,1,0]], - ], - Z: [ - [[1,1,0],[0,1,1],[0,0,0]], - [[0,0,1],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,0],[0,1,1]], - [[0,1,0],[1,1,0],[1,0,0]], - ], - J: [ - [[1,0,0],[1,1,1],[0,0,0]], - [[0,1,1],[0,1,0],[0,1,0]], - [[0,0,0],[1,1,1],[0,0,1]], - [[0,1,0],[0,1,0],[1,1,0]], - ], - L: [ - [[0,0,1],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,0],[0,1,1]], - [[0,0,0],[1,1,1],[1,0,0]], - [[1,1,0],[0,1,0],[0,1,0]], - ], -}; -const LINE_POINTS = [0, 100, 300, 500, 800]; -const WALL_KICKS = [0, -1, 1, -2, 2]; - -function dropInterval(level) { - return Math.max(50, 800 - (level - 1) * 72); -} - -class Bag { - constructor() { this.pool = []; } - refill() { - this.pool = ["I","O","T","S","Z","J","L"].slice(); - for (let i = this.pool.length - 1; i > 0; i--) { - const j = (Math.random() * (i + 1)) | 0; - [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]]; - } - } - draw() { if (this.pool.length === 0) this.refill(); return this.pool.pop(); } -} - -class TetrisGame { - constructor() { - this.score = 0; this.level = 1; this.lines = 0; this.over = false; - this.raf = 0; this.lastTs = 0; this.dropAcc = 0; - this.das = { left: false, right: false, charge: 0 }; - this.DAS_DELAY = 170; - this.DAS_REPEAT = 50; - - this.boardCanvas = document.getElementById("board"); - this.boardCtx = this.boardCanvas.getContext("2d"); - this.nextCanvas = document.getElementById("next-canvas"); - this.nextCtx = this.nextCanvas.getContext("2d"); - this.scoreEl = document.getElementById("score-val"); - this.levelEl = document.getElementById("level-val"); - this.linesEl = document.getElementById("lines-val"); - this.gameOverOverlay = document.getElementById("game-over"); - this.finalScoreEl = document.getElementById("final-score"); - - document.addEventListener("keydown", this.onKeyDown.bind(this)); - document.addEventListener("keyup", this.onKeyUp.bind(this)); - document.getElementById("restart-btn").addEventListener("click", () => this.restart()); - - this.init(); - this.loop(0); - } - - init() { - this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null)); - this.bag = new Bag(); - this.score = 0; this.level = 1; this.lines = 0; - this.over = false; this.dropAcc = 0; this.lastTs = 0; - this.nextType = this.bag.draw(); - this.current = this.spawnPiece(); - this.gameOverOverlay.style.display = "none"; - this.updateHUD(); - } - - spawnPiece() { - const type = this.nextType; - this.nextType = this.bag.draw(); - const shape = SHAPES[type][0]; - const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2); - return { type, shape, rotIdx: 0, x, y: 0 }; - } - - valid(shape, x, y) { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const bx = x + c, by = y + r; - if (bx < 0 || bx >= COLS || by >= ROWS) return false; - if (by >= 0 && this.board[by][bx] !== null) return false; - } - } - return true; - } - - tryMove(dx, dy) { - if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) { - this.current.x += dx; this.current.y += dy; return true; - } - return false; - } - - rotate(cw) { - const rots = SHAPES[this.current.type]; - if (rots.length === 1) return; - const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length; - const nextShape = rots[nextIdx]; - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y)) { - this.current.shape = nextShape; this.current.rotIdx = nextIdx; - this.current.x += kick; return; - } - } - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) { - this.current.shape = nextShape; this.current.rotIdx = nextIdx; - this.current.x += kick; this.current.y -= 1; return; - } - } - } - - hardDrop() { while (this.tryMove(0, 1)) {} this.lock(); } - - lock() { - const { shape, x, y, type } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const by = y + r; - if (by < 0) { this.endGame(); return; } - this.board[by][x + c] = type; - } - } - this.clearLines(); - this.current = this.spawnPiece(); - if (!this.valid(this.current.shape, this.current.x, this.current.y)) this.endGame(); - } - - clearLines() { - let cleared = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (this.board[r].every(c => c !== null)) { - this.board.splice(r, 1); - this.board.unshift(new Array(COLS).fill(null)); - cleared++; r++; - } - } - if (cleared > 0) { - this.score += LINE_POINTS[cleared] * this.level; - this.lines += cleared; - this.level = Math.floor(this.lines / 10) + 1; - this.updateHUD(); - } - } - - endGame() { - this.over = true; - cancelAnimationFrame(this.raf); - this.finalScoreEl.textContent = this.score.toLocaleString(); - this.gameOverOverlay.style.display = "flex"; - } - - restart() { cancelAnimationFrame(this.raf); this.init(); this.loop(0); } - - onKeyDown(e) { - if (this.over) { - if (e.code === "Enter" || e.code === "KeyR") this.restart(); - return; - } - switch (e.code) { - case "ArrowLeft": - e.preventDefault(); - if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; } - break; - case "ArrowRight": - e.preventDefault(); - if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; } - break; - case "ArrowDown": - e.preventDefault(); - if (!this.tryMove(0, 1)) this.lock(); - this.dropAcc = 0; - break; - case "ArrowUp": e.preventDefault(); this.rotate(true); break; - case "KeyZ": e.preventDefault(); this.rotate(false); break; - case "Space": e.preventDefault(); this.hardDrop(); break; - } - } - - onKeyUp(e) { - if (e.code === "ArrowLeft") this.das.left = false; - if (e.code === "ArrowRight") this.das.right = false; - } - - loop(ts) { - if (this.over) return; - const dt = this.lastTs === 0 ? 0 : ts - this.lastTs; - this.lastTs = ts; - - // DAS - if (this.das.left || this.das.right) { - this.das.charge += dt; - if (this.das.charge >= this.DAS_DELAY) { - const surplus = this.das.charge - this.DAS_DELAY; - const reps = Math.floor(surplus / this.DAS_REPEAT); - if (reps > 0) { - for (let i = 0; i < reps; i++) this.tryMove(this.das.left ? -1 : 1, 0); - this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT); - } - } - } - - // Gravity - this.dropAcc += dt; - const interval = dropInterval(this.level); - while (this.dropAcc >= interval) { - this.dropAcc -= interval; - if (!this.tryMove(0, 1)) { this.lock(); break; } - } - - this.render(); - this.raf = requestAnimationFrame(this.loop.bind(this)); - } - - updateHUD() { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - - ghostY() { - let gy = this.current.y; - while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++; - return gy; - } - - render() { - const ctx = this.boardCtx; - const W = COLS * CELL, H = ROWS * CELL; - - // Background - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, W, H); - - // Subtle grid lines - ctx.strokeStyle = "rgba(255,255,255,0.05)"; - ctx.lineWidth = 1; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) - for (let c = 0; c < COLS; c++) - if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1); - - // Ghost - const gy = this.ghostY(); - if (gy !== this.current.y) - this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2); - - // Active piece - this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1); - - // Board border - ctx.strokeStyle = "rgba(255,255,255,0.15)"; - ctx.lineWidth = 2; - ctx.strokeRect(0, 0, W, H); - - this.renderNext(); - } - - drawShape(ctx, shape, ox, oy, color, alpha) { - for (let r = 0; r < shape.length; r++) - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const br = oy + r; if (br < 0) continue; - this.drawCell(ctx, ox + c, br, color, alpha); - } - } - - drawCell(ctx, col, row, color, alpha) { - const x = col * CELL, y = row * CELL, pad = 1; - ctx.globalAlpha = alpha; - ctx.fillStyle = color; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2); - if (alpha > 0.4) { - ctx.fillStyle = LIGHT; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5); // top - ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2); // left - ctx.fillStyle = DARK; - ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5); // bottom - ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2); // right - } - ctx.globalAlpha = 1; - } - - renderNext() { - const ctx = this.nextCtx; - const size = 4 * CELL; - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, size, size); - const shape = SHAPES[this.nextType][0]; - const color = COLORS[this.nextType]; - const offC = Math.floor((4 - shape[0].length) / 2); - const offR = Math.floor((4 - shape.length) / 2); - for (let r = 0; r < shape.length; r++) - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - this.drawCell(ctx, offC + c, offR + r, color, 1); - } - ctx.strokeStyle = "rgba(255,255,255,0.12)"; - ctx.lineWidth = 1; - ctx.strokeRect(0, 0, size, size); - } -} - -document.addEventListener("DOMContentLoaded", () => { new TetrisGame(); }); - </script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-e5qs71mg", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-e5qs71mg", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,22 +0,0 @@ -{ - "name": "loop-bench-e5qs71mg", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,301 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:45:09.232Z", - "formats": { - "typescript": { - "sources": { - "tetris/src/tetris.ts": { - "lines": 527, - "tokens": 6036, - "sources": 1, - "clones": 2, - "duplicatedLines": 10, - "duplicatedTokens": 160, - "percentage": 1.9, - "percentageTokens": 2.65, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 527, - "tokens": 6036, - "sources": 1, - "clones": 1, - "duplicatedLines": 5, - "duplicatedTokens": 80, - "percentage": 0.95, - "percentageTokens": 1.33, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "tetris/dist/tetris.js": { - "lines": 442, - "tokens": 5694, - "sources": 1, - "clones": 4, - "duplicatedLines": 20, - "duplicatedTokens": 328, - "percentage": 4.52, - "percentageTokens": 5.76, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 442, - "tokens": 5694, - "sources": 1, - "clones": 2, - "duplicatedLines": 10, - "duplicatedTokens": 164, - "percentage": 2.26, - "percentageTokens": 2.88, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tetris/tsconfig.json": { - "lines": 15, - "tokens": 104, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 36, - "tokens": 236, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "tetris/tetris.html": { - "lines": 625, - "tokens": 4754, - "sources": 1, - "clones": 1, - "duplicatedLines": 625, - "duplicatedTokens": 4754, - "percentage": 100, - "percentageTokens": 100, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "index.html": { - "lines": 625, - "tokens": 4754, - "sources": 1, - "clones": 1, - "duplicatedLines": 625, - "duplicatedTokens": 4754, - "percentage": 100, - "percentageTokens": 100, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 1250, - "tokens": 9508, - "sources": 2, - "clones": 1, - "duplicatedLines": 625, - "duplicatedTokens": 4754, - "percentage": 50, - "percentageTokens": 50, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 2255, - "tokens": 21474, - "sources": 6, - "clones": 4, - "duplicatedLines": 640, - "duplicatedTokens": 4998, - "percentage": 28.38, - "percentageTokens": 23.27, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "typescript", - "lines": 6, - "fragment": ";\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n this", - "tokens": 0, - "firstFile": { - "name": "tetris/src/tetris.ts", - "start": 509, - "end": 514, - "startLoc": { - "line": 509, - "column": 2, - "position": 5850 - }, - "endLoc": { - "line": 514, - "column": 5, - "position": 5930 - } - }, - "secondFile": { - "name": "tetris/src/tetris.ts", - "start": 258, - "end": 204, - "startLoc": { - "line": 258, - "column": 8, - "position": 3042 - }, - "endLoc": { - "line": 204, - "column": 6, - "position": 2431 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": ") {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const br", - "tokens": 0, - "firstFile": { - "name": "tetris/dist/tetris.js", - "start": 387, - "end": 392, - "startLoc": { - "line": 387, - "column": 6, - "position": 4888 - }, - "endLoc": { - "line": 392, - "column": 3, - "position": 4972 - } - }, - "secondFile": { - "name": "tetris/dist/tetris.js", - "start": 144, - "end": 149, - "startLoc": { - "line": 144, - "column": 2, - "position": 2179 - }, - "endLoc": { - "line": 149, - "column": 3, - "position": 2263 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": ";\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n this", - "tokens": 0, - "firstFile": { - "name": "tetris/dist/tetris.js", - "start": 427, - "end": 432, - "startLoc": { - "line": 427, - "column": 2, - "position": 5511 - }, - "endLoc": { - "line": 432, - "column": 5, - "position": 5591 - } - }, - "secondFile": { - "name": "tetris/dist/tetris.js", - "start": 198, - "end": 149, - "startLoc": { - "line": 198, - "column": 8, - "position": 2839 - }, - "endLoc": { - "line": 149, - "column": 6, - "position": 2261 - } - } - }, - { - "format": "markup", - "lines": 626, - "fragment": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n /* ── Reset & base ───────────────────────────────────────── */\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0a0a1a;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n font-family: \"Segoe UI\", system-ui, sans-serif;\n color: #e0e0f0;\n overflow: hidden;\n }\n\n /* ── Outer wrapper ─────────────────────────────────────── */\n #app {\n display: flex;\n gap: 20px;\n align-items: flex-start;\n user-select: none;\n }\n\n /* ── Board area ────────────────────────────────────────── */\n #board-wrap {\n position: relative;\n flex-shrink: 0;\n }\n\n #board {\n display: block;\n border-radius: 4px;\n box-shadow:\n 0 0 0 2px rgba(255,255,255,0.08),\n 0 8px 40px rgba(0,0,0,0.7),\n 0 0 60px rgba(80,60,180,0.25);\n }\n\n /* ── Game-over overlay ─────────────────────────────────── */\n #game-over {\n display: none;\n position: absolute;\n inset: 0;\n border-radius: 4px;\n background: rgba(8, 8, 24, 0.88);\n backdrop-filter: blur(4px);\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n z-index: 10;\n }\n\n #game-over h2 {\n font-size: 2.4rem;\n font-weight: 800;\n letter-spacing: 0.06em;\n color: #ff5370;\n text-shadow: 0 0 20px rgba(255,83,112,0.6);\n text-transform: uppercase;\n }\n\n #game-over .go-score-label {\n font-size: 0.9rem;\n color: #8888bb;\n text-transform: uppercase;\n letter-spacing: 0.12em;\n }\n\n #game-over .go-score-val {\n font-size: 2rem;\n font-weight: 700;\n color: #fdd835;\n }\n\n #restart-btn {\n margin-top: 8px;\n padding: 10px 32px;\n font-size: 1rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n border: 2px solid #7c6af7;\n background: transparent;\n color: #c5beff;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, box-shadow 0.15s;\n }\n\n #restart-btn:hover {\n background: #7c6af7;\n color: #fff;\n box-shadow: 0 0 18px rgba(124,106,247,0.5);\n }\n\n #game-over .go-hint {\n font-size: 0.78rem;\n color: #5555aa;\n letter-spacing: 0.06em;\n }\n\n /* ── Side panel ────────────────────────────────────────── */\n #side {\n display: flex;\n flex-direction: column;\n gap: 18px;\n width: 150px;\n }\n\n .panel-box {\n background: rgba(255,255,255,0.04);\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 8px;\n padding: 14px 16px;\n }\n\n .panel-label {\n font-size: 0.68rem;\n font-weight: 700;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: #6666aa;\n margin-bottom: 8px;\n }\n\n /* ── Next piece ────────────────────────────────────────── */\n #next-canvas {\n display: block;\n border-radius: 4px;\n background: #12122a;\n }\n\n /* ── Stats ─────────────────────────────────────────────── */\n .stat-value {\n font-size: 1.65rem;\n font-weight: 800;\n letter-spacing: 0.04em;\n color: #e8e8ff;\n line-height: 1;\n font-variant-numeric: tabular-nums;\n }\n\n .stat-value.accent { color: #fdd835; }\n\n /* ── Controls reference ─────────────────────────────────── */\n .controls-grid {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 5px 10px;\n align-items: center;\n }\n\n .key {\n display: inline-block;\n background: rgba(255,255,255,0.09);\n border: 1px solid rgba(255,255,255,0.16);\n border-bottom-width: 3px;\n border-radius: 4px;\n padding: 1px 6px;\n font-size: 0.68rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n color: #aaaacc;\n font-family: monospace;\n text-align: center;\n white-space: nowrap;\n }\n\n .ctrl-desc {\n font-size: 0.7rem;\n color: #6666aa;\n line-height: 1.3;\n }\n\n /* ── Title ──────────────────────────────────────────────── */\n #title {\n text-align: center;\n font-size: 1.4rem;\n font-weight: 900;\n letter-spacing: 0.22em;\n text-transform: uppercase;\n background: linear-gradient(135deg, #7c6af7 0%, #00e5ff 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n padding-bottom: 2px;\n }\n </style>\n</head>\n<body>\n <div id=\"app\">\n\n <!-- ── Board ── -->\n <div id=\"board-wrap\">\n <canvas id=\"board\" width=\"300\" height=\"600\"></canvas>\n\n <!-- Game-over overlay (sits on top of the board) -->\n <div id=\"game-over\">\n <h2>Game Over</h2>\n <div>\n <div class=\"go-score-label\">Final Score</div>\n <div class=\"go-score-val\" id=\"final-score\">0</div>\n </div>\n <button id=\"restart-btn\">Play Again</button>\n <div class=\"go-hint\">or press R / Enter</div>\n </div>\n </div>\n\n <!-- ── Side panel ── -->\n <div id=\"side\">\n\n <div id=\"title\">Tetris</div>\n\n <!-- Next piece -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Next</div>\n <canvas id=\"next-canvas\" width=\"120\" height=\"120\"></canvas>\n </div>\n\n <!-- Score -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Score</div>\n <div class=\"stat-value accent\" id=\"score-val\">0</div>\n </div>\n\n <!-- Level -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Level</div>\n <div class=\"stat-value\" id=\"level-val\">1</div>\n </div>\n\n <!-- Lines -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Lines</div>\n <div class=\"stat-value\" id=\"lines-val\">0</div>\n </div>\n\n <!-- Controls reference -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Controls</div>\n <div class=\"controls-grid\">\n <span class=\"key\">← →</span> <span class=\"ctrl-desc\">Move</span>\n <span class=\"key\">↑</span> <span class=\"ctrl-desc\">Rotate CW</span>\n <span class=\"key\">Z</span> <span class=\"ctrl-desc\">Rotate CCW</span>\n <span class=\"key\">↓</span> <span class=\"ctrl-desc\">Soft drop</span>\n <span class=\"key\">Space</span><span class=\"ctrl-desc\">Hard drop</span>\n </div>\n </div>\n\n </div><!-- /side -->\n </div><!-- /app -->\n\n <script>\n\"use strict\";\n// ============================================================\n// Tetris – fully self-contained TypeScript implementation\n// ============================================================\n// ── Constants ────────────────────────────────────────────────\nconst COLS = 10;\nconst ROWS = 20;\nconst CELL = 30; // px per cell\nconst COLORS = {\n I: \"#00e5ff\",\n O: \"#fdd835\",\n T: \"#ab47bc\",\n S: \"#66bb6a\",\n Z: \"#ef5350\",\n J: \"#42a5f5\",\n L: \"#ffa726\",\n};\n// Highlight / shadow tints for 3-D cell effect\nconst LIGHT = \"rgba(255,255,255,0.28)\";\nconst DARK = \"rgba(0,0,0,0.32)\";\n// All rotation states per piece type\n// Each rotation is a 2-D array of 0/1\nconst SHAPES = {\n I: [\n [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]],\n [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]],\n [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]],\n ],\n O: [[[1,1],[1,1]]],\n T: [\n [[0,1,0],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,1],[0,1,0]],\n [[0,1,0],[1,1,0],[0,1,0]],\n ],\n S: [\n [[0,1,1],[1,1,0],[0,0,0]],\n [[0,1,0],[0,1,1],[0,0,1]],\n [[0,0,0],[0,1,1],[1,1,0]],\n [[1,0,0],[1,1,0],[0,1,0]],\n ],\n Z: [\n [[1,1,0],[0,1,1],[0,0,0]],\n [[0,0,1],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,0],[0,1,1]],\n [[0,1,0],[1,1,0],[1,0,0]],\n ],\n J: [\n [[1,0,0],[1,1,1],[0,0,0]],\n [[0,1,1],[0,1,0],[0,1,0]],\n [[0,0,0],[1,1,1],[0,0,1]],\n [[0,1,0],[0,1,0],[1,1,0]],\n ],\n L: [\n [[0,0,1],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,0],[0,1,1]],\n [[0,0,0],[1,1,1],[1,0,0]],\n [[1,1,0],[0,1,0],[0,1,0]],\n ],\n};\nconst LINE_POINTS = [0, 100, 300, 500, 800];\nconst WALL_KICKS = [0, -1, 1, -2, 2];\n\nfunction dropInterval(level) {\n return Math.max(50, 800 - (level - 1) * 72);\n}\n\nclass Bag {\n constructor() { this.pool = []; }\n refill() {\n this.pool = [\"I\",\"O\",\"T\",\"S\",\"Z\",\"J\",\"L\"].slice();\n for (let i = this.pool.length - 1; i > 0; i--) {\n const j = (Math.random() * (i + 1)) | 0;\n [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]];\n }\n }\n draw() { if (this.pool.length === 0) this.refill(); return this.pool.pop(); }\n}\n\nclass TetrisGame {\n constructor() {\n this.score = 0; this.level = 1; this.lines = 0; this.over = false;\n this.raf = 0; this.lastTs = 0; this.dropAcc = 0;\n this.das = { left: false, right: false, charge: 0 };\n this.DAS_DELAY = 170;\n this.DAS_REPEAT = 50;\n\n this.boardCanvas = document.getElementById(\"board\");\n this.boardCtx = this.boardCanvas.getContext(\"2d\");\n this.nextCanvas = document.getElementById(\"next-canvas\");\n this.nextCtx = this.nextCanvas.getContext(\"2d\");\n this.scoreEl = document.getElementById(\"score-val\");\n this.levelEl = document.getElementById(\"level-val\");\n this.linesEl = document.getElementById(\"lines-val\");\n this.gameOverOverlay = document.getElementById(\"game-over\");\n this.finalScoreEl = document.getElementById(\"final-score\");\n\n document.addEventListener(\"keydown\", this.onKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n document.getElementById(\"restart-btn\").addEventListener(\"click\", () => this.restart());\n\n this.init();\n this.loop(0);\n }\n\n init() {\n this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null));\n this.bag = new Bag();\n this.score = 0; this.level = 1; this.lines = 0;\n this.over = false; this.dropAcc = 0; this.lastTs = 0;\n this.nextType = this.bag.draw();\n this.current = this.spawnPiece();\n this.gameOverOverlay.style.display = \"none\";\n this.updateHUD();\n }\n\n spawnPiece() {\n const type = this.nextType;\n this.nextType = this.bag.draw();\n const shape = SHAPES[type][0];\n const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2);\n return { type, shape, rotIdx: 0, x, y: 0 };\n }\n\n valid(shape, x, y) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const bx = x + c, by = y + r;\n if (bx < 0 || bx >= COLS || by >= ROWS) return false;\n if (by >= 0 && this.board[by][bx] !== null) return false;\n }\n }\n return true;\n }\n\n tryMove(dx, dy) {\n if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) {\n this.current.x += dx; this.current.y += dy; return true;\n }\n return false;\n }\n\n rotate(cw) {\n const rots = SHAPES[this.current.type];\n if (rots.length === 1) return;\n const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length;\n const nextShape = rots[nextIdx];\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y)) {\n this.current.shape = nextShape; this.current.rotIdx = nextIdx;\n this.current.x += kick; return;\n }\n }\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) {\n this.current.shape = nextShape; this.current.rotIdx = nextIdx;\n this.current.x += kick; this.current.y -= 1; return;\n }\n }\n }\n\n hardDrop() { while (this.tryMove(0, 1)) {} this.lock(); }\n\n lock() {\n const { shape, x, y, type } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const by = y + r;\n if (by < 0) { this.endGame(); return; }\n this.board[by][x + c] = type;\n }\n }\n this.clearLines();\n this.current = this.spawnPiece();\n if (!this.valid(this.current.shape, this.current.x, this.current.y)) this.endGame();\n }\n\n clearLines() {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every(c => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array(COLS).fill(null));\n cleared++; r++;\n }\n }\n if (cleared > 0) {\n this.score += LINE_POINTS[cleared] * this.level;\n this.lines += cleared;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateHUD();\n }\n }\n\n endGame() {\n this.over = true;\n cancelAnimationFrame(this.raf);\n this.finalScoreEl.textContent = this.score.toLocaleString();\n this.gameOverOverlay.style.display = \"flex\";\n }\n\n restart() { cancelAnimationFrame(this.raf); this.init(); this.loop(0); }\n\n onKeyDown(e) {\n if (this.over) {\n if (e.code === \"Enter\" || e.code === \"KeyR\") this.restart();\n return;\n }\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; }\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!this.tryMove(0, 1)) this.lock();\n this.dropAcc = 0;\n break;\n case \"ArrowUp\": e.preventDefault(); this.rotate(true); break;\n case \"KeyZ\": e.preventDefault(); this.rotate(false); break;\n case \"Space\": e.preventDefault(); this.hardDrop(); break;\n }\n }\n\n onKeyUp(e) {\n if (e.code === \"ArrowLeft\") this.das.left = false;\n if (e.code === \"ArrowRight\") this.das.right = false;\n }\n\n loop(ts) {\n if (this.over) return;\n const dt = this.lastTs === 0 ? 0 : ts - this.lastTs;\n this.lastTs = ts;\n\n // DAS\n if (this.das.left || this.das.right) {\n this.das.charge += dt;\n if (this.das.charge >= this.DAS_DELAY) {\n const surplus = this.das.charge - this.DAS_DELAY;\n const reps = Math.floor(surplus / this.DAS_REPEAT);\n if (reps > 0) {\n for (let i = 0; i < reps; i++) this.tryMove(this.das.left ? -1 : 1, 0);\n this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT);\n }\n }\n }\n\n // Gravity\n this.dropAcc += dt;\n const interval = dropInterval(this.level);\n while (this.dropAcc >= interval) {\n this.dropAcc -= interval;\n if (!this.tryMove(0, 1)) { this.lock(); break; }\n }\n\n this.render();\n this.raf = requestAnimationFrame(this.loop.bind(this));\n }\n\n updateHUD() {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n ghostY() {\n let gy = this.current.y;\n while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++;\n return gy;\n }\n\n render() {\n const ctx = this.boardCtx;\n const W = COLS * CELL, H = ROWS * CELL;\n\n // Background\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, W, H);\n\n // Subtle grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.05)\";\n ctx.lineWidth = 1;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++)\n for (let c = 0; c < COLS; c++)\n if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1);\n\n // Ghost\n const gy = this.ghostY();\n if (gy !== this.current.y)\n this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2);\n\n // Active piece\n this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1);\n\n // Board border\n ctx.strokeStyle = \"rgba(255,255,255,0.15)\";\n ctx.lineWidth = 2;\n ctx.strokeRect(0, 0, W, H);\n\n this.renderNext();\n }\n\n drawShape(ctx, shape, ox, oy, color, alpha) {\n for (let r = 0; r < shape.length; r++)\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const br = oy + r; if (br < 0) continue;\n this.drawCell(ctx, ox + c, br, color, alpha);\n }\n }\n\n drawCell(ctx, col, row, color, alpha) {\n const x = col * CELL, y = row * CELL, pad = 1;\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2);\n if (alpha > 0.4) {\n ctx.fillStyle = LIGHT;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5); // top\n ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2); // left\n ctx.fillStyle = DARK;\n ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5); // bottom\n ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2); // right\n }\n ctx.globalAlpha = 1;\n }\n\n renderNext() {\n const ctx = this.nextCtx;\n const size = 4 * CELL;\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, size, size);\n const shape = SHAPES[this.nextType][0];\n const color = COLORS[this.nextType];\n const offC = Math.floor((4 - shape[0].length) / 2);\n const offR = Math.floor((4 - shape.length) / 2);\n for (let r = 0; r < shape.length; r++)\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n this.drawCell(ctx, offC + c, offR + r, color, 1);\n }\n ctx.strokeStyle = \"rgba(255,255,255,0.12)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, size, size);\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => { new TetrisGame(); });\n </script>\n</body>\n</html>", - "tokens": 0, - "firstFile": { - "name": "index.html", - "start": 1, - "end": 626, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 626, - "column": 2, - "position": 4754 - } - }, - "secondFile": { - "name": "tetris/tetris.html", - "start": 1, - "end": 626, - "startLoc": { - "line": 1, - "column": 1, - "position": 0 - }, - "endLoc": { - "line": 626, - "column": 2, - "position": 4754 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/src/tetris.ts @@ -1,528 +0,0 @@ -// ============================================================ -// Tetris – fully self-contained TypeScript implementation -// ============================================================ - -// ── Types ──────────────────────────────────────────────────── - -type TetrominoType = "I" | "O" | "T" | "S" | "Z" | "J" | "L"; -type Cell = TetrominoType | null; -type Board = Cell[][]; - -interface Piece { - type: TetrominoType; - shape: number[][]; - rotIdx: number; - x: number; - y: number; -} - -// ── Constants ──────────────────────────────────────────────── - -const COLS = 10; -const ROWS = 20; -const CELL = 30; // px per cell - -const COLORS: Record<TetrominoType, string> = { - I: "#00e5ff", - O: "#fdd835", - T: "#ab47bc", - S: "#66bb6a", - Z: "#ef5350", - J: "#42a5f5", - L: "#ffa726", -}; - -// Highlight / shadow tints for 3-D cell effect -const LIGHT = "rgba(255,255,255,0.28)"; -const DARK = "rgba(0,0,0,0.32)"; - -// All rotation states per piece type -// Each rotation is a 2-D array of 0/1 -const SHAPES: Record<TetrominoType, number[][][]> = { - I: [ - [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]], - [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]], - [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]], - ], - O: [ - [[1,1],[1,1]], - ], - T: [ - [[0,1,0],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,1],[0,1,0]], - [[0,1,0],[1,1,0],[0,1,0]], - ], - S: [ - [[0,1,1],[1,1,0],[0,0,0]], - [[0,1,0],[0,1,1],[0,0,1]], - [[0,0,0],[0,1,1],[1,1,0]], - [[1,0,0],[1,1,0],[0,1,0]], - ], - Z: [ - [[1,1,0],[0,1,1],[0,0,0]], - [[0,0,1],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,0],[0,1,1]], - [[0,1,0],[1,1,0],[1,0,0]], - ], - J: [ - [[1,0,0],[1,1,1],[0,0,0]], - [[0,1,1],[0,1,0],[0,1,0]], - [[0,0,0],[1,1,1],[0,0,1]], - [[0,1,0],[0,1,0],[1,1,0]], - ], - L: [ - [[0,0,1],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,0],[0,1,1]], - [[0,0,0],[1,1,1],[1,0,0]], - [[1,1,0],[0,1,0],[0,1,0]], - ], -}; - -// Base points for 1-4 line clears -const LINE_POINTS = [0, 100, 300, 500, 800]; - -// Wall-kick X-offsets to try when rotation would be blocked -const WALL_KICKS = [0, -1, 1, -2, 2]; - -// ── Drop speed ─────────────────────────────────────────────── - -function dropInterval(level: number): number { - // Starts at 800 ms, decreases per level, minimum 50 ms - return Math.max(50, 800 - (level - 1) * 72); -} - -// ── 7-bag random system ────────────────────────────────────── - -class Bag { - private pool: TetrominoType[] = []; - - private refill(): void { - this.pool = (["I","O","T","S","Z","J","L"] as TetrominoType[]).slice(); - for (let i = this.pool.length - 1; i > 0; i--) { - const j = (Math.random() * (i + 1)) | 0; - [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]]; - } - } - - draw(): TetrominoType { - if (this.pool.length === 0) this.refill(); - return this.pool.pop()!; - } -} - -// ── Main game class ────────────────────────────────────────── - -class TetrisGame { - // Canvases - private readonly boardCanvas: HTMLCanvasElement; - private readonly boardCtx: CanvasRenderingContext2D; - private readonly nextCanvas: HTMLCanvasElement; - private readonly nextCtx: CanvasRenderingContext2D; - - // UI labels - private readonly scoreEl: HTMLElement; - private readonly levelEl: HTMLElement; - private readonly linesEl: HTMLElement; - private readonly gameOverOverlay: HTMLElement; - private readonly finalScoreEl: HTMLElement; - - // Game state - private board!: Board; - private current!: Piece; - private nextType!: TetrominoType; - private bag!: Bag; - - private score = 0; - private level = 1; - private lines = 0; - private over = false; - - // Timing - private raf = 0; - private lastTs = 0; - private dropAcc = 0; - - // DAS (Delayed Auto Shift) state - private das: { left: boolean; right: boolean; charge: number } = { left: false, right: false, charge: 0 }; - private readonly DAS_DELAY = 170; // ms before repeat - private readonly DAS_REPEAT = 50; // ms between repeats - - constructor() { - this.boardCanvas = document.getElementById("board") as HTMLCanvasElement; - this.boardCtx = this.boardCanvas.getContext("2d")!; - this.nextCanvas = document.getElementById("next-canvas") as HTMLCanvasElement; - this.nextCtx = this.nextCanvas.getContext("2d")!; - this.scoreEl = document.getElementById("score-val")!; - this.levelEl = document.getElementById("level-val")!; - this.linesEl = document.getElementById("lines-val")!; - this.gameOverOverlay = document.getElementById("game-over")!; - this.finalScoreEl = document.getElementById("final-score")!; - - document.addEventListener("keydown", this.onKeyDown.bind(this)); - document.addEventListener("keyup", this.onKeyUp.bind(this)); - document.getElementById("restart-btn")!.addEventListener("click", () => this.restart()); - - this.init(); - this.loop(0); - } - - // ── Initialisation ───────────────────────────────────────── - - private init(): void { - this.board = Array.from({ length: ROWS }, () => new Array<Cell>(COLS).fill(null)); - this.bag = new Bag(); - this.score = 0; - this.level = 1; - this.lines = 0; - this.over = false; - this.dropAcc = 0; - this.lastTs = 0; - - this.nextType = this.bag.draw(); - this.current = this.spawnPiece(); - - this.gameOverOverlay.style.display = "none"; - this.updateHUD(); - } - - private spawnPiece(): Piece { - const type = this.nextType; - this.nextType = this.bag.draw(); - const shape = SHAPES[type][0]; - const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2); - return { type, shape, rotIdx: 0, x, y: 0 }; - } - - // ── Validity check ───────────────────────────────────────── - - private valid(shape: number[][], x: number, y: number): boolean { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const bx = x + c, by = y + r; - if (bx < 0 || bx >= COLS || by >= ROWS) return false; - if (by >= 0 && this.board[by][bx] !== null) return false; - } - } - return true; - } - - // ── Movement ─────────────────────────────────────────────── - - private tryMove(dx: number, dy: number): boolean { - if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) { - this.current.x += dx; - this.current.y += dy; - return true; - } - return false; - } - - private rotate(cw: boolean): void { - const rots = SHAPES[this.current.type]; - if (rots.length === 1) return; // O piece – no rotation - - const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length; - const nextShape = rots[nextIdx]; - - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y)) { - this.current.shape = nextShape; - this.current.rotIdx = nextIdx; - this.current.x += kick; - return; - } - } - // Also try kicking up for floor kicks - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) { - this.current.shape = nextShape; - this.current.rotIdx = nextIdx; - this.current.x += kick; - this.current.y -= 1; - return; - } - } - } - - private hardDrop(): void { - while (this.tryMove(0, 1)) {} - this.lock(); - } - - // ── Locking / line clearing ──────────────────────────────── - - private lock(): void { - const { shape, x, y, type } = this.current; - - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const by = y + r; - if (by < 0) { - this.endGame(); - return; - } - this.board[by][x + c] = type; - } - } - - this.clearLines(); - this.current = this.spawnPiece(); - - if (!this.valid(this.current.shape, this.current.x, this.current.y)) { - this.endGame(); - } - } - - private clearLines(): void { - let cleared = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (this.board[r].every(c => c !== null)) { - this.board.splice(r, 1); - this.board.unshift(new Array<Cell>(COLS).fill(null)); - cleared++; - r++; // re-examine same index after shift - } - } - if (cleared > 0) { - this.score += LINE_POINTS[cleared] * this.level; - this.lines += cleared; - this.level = Math.floor(this.lines / 10) + 1; - this.updateHUD(); - } - } - - // ── Game over ────────────────────────────────────────────── - - private endGame(): void { - this.over = true; - cancelAnimationFrame(this.raf); - this.finalScoreEl.textContent = this.score.toLocaleString(); - this.gameOverOverlay.style.display = "flex"; - } - - public restart(): void { - cancelAnimationFrame(this.raf); - this.init(); - this.loop(0); - } - - // ── Input ────────────────────────────────────────────────── - - private onKeyDown(e: KeyboardEvent): void { - if (this.over) { - if (e.code === "Enter" || e.code === "KeyR") this.restart(); - return; - } - - switch (e.code) { - case "ArrowLeft": - e.preventDefault(); - if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; } - break; - case "ArrowRight": - e.preventDefault(); - if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; } - break; - case "ArrowDown": - e.preventDefault(); - if (!this.tryMove(0, 1)) this.lock(); - this.dropAcc = 0; - break; - case "ArrowUp": - e.preventDefault(); - this.rotate(true); - break; - case "KeyZ": - e.preventDefault(); - this.rotate(false); - break; - case "Space": - e.preventDefault(); - this.hardDrop(); - break; - } - } - - private onKeyUp(e: KeyboardEvent): void { - if (e.code === "ArrowLeft") this.das.left = false; - if (e.code === "ArrowRight") this.das.right = false; - } - - // ── Game loop ────────────────────────────────────────────── - - private loop(ts: number): void { - if (this.over) return; - - const dt = this.lastTs === 0 ? 0 : ts - this.lastTs; - this.lastTs = ts; - - // DAS handling - if (this.das.left || this.das.right) { - this.das.charge += dt; - const threshold = this.das.charge < this.DAS_DELAY ? Infinity : this.DAS_REPEAT; - if (this.das.charge >= this.DAS_DELAY) { - const surplus = this.das.charge - this.DAS_DELAY; - const reps = Math.floor(surplus / this.DAS_REPEAT); - if (reps > 0) { - for (let i = 0; i < reps; i++) { - this.tryMove(this.das.left ? -1 : 1, 0); - } - this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT); - } - } - void threshold; // suppress unused warning - } - - // Gravity - this.dropAcc += dt; - const interval = dropInterval(this.level); - while (this.dropAcc >= interval) { - this.dropAcc -= interval; - if (!this.tryMove(0, 1)) { - this.lock(); - break; - } - } - - this.render(); - this.raf = requestAnimationFrame(this.loop.bind(this)); - } - - // ── HUD ──────────────────────────────────────────────────── - - private updateHUD(): void { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - - // ── Ghost piece ──────────────────────────────────────────── - - private ghostY(): number { - let gy = this.current.y; - while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++; - return gy; - } - - // ── Rendering ────────────────────────────────────────────── - - private render(): void { - const ctx = this.boardCtx; - const W = COLS * CELL, H = ROWS * CELL; - - // Background - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, W, H); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.05)"; - ctx.lineWidth = 1; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]!], 1); - } - } - - // Ghost piece - const gy = this.ghostY(); - if (gy !== this.current.y) { - this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2); - } - - // Current piece - this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1); - - // Border - ctx.strokeStyle = "rgba(255,255,255,0.15)"; - ctx.lineWidth = 2; - ctx.strokeRect(0, 0, W, H); - - // Next-piece preview - this.renderNext(); - } - - private drawShape( - ctx: CanvasRenderingContext2D, - shape: number[][], - ox: number, oy: number, - color: string, alpha: number - ): void { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const br = oy + r; - if (br < 0) continue; - this.drawCell(ctx, ox + c, br, color, alpha); - } - } - } - - private drawCell( - ctx: CanvasRenderingContext2D, - col: number, row: number, - color: string, alpha: number - ): void { - const x = col * CELL, y = row * CELL; - const pad = 1; - - ctx.globalAlpha = alpha; - ctx.fillStyle = color; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2); - - if (alpha > 0.4) { - // Top highlight - ctx.fillStyle = LIGHT; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5); - // Left highlight - ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2); - // Bottom shadow - ctx.fillStyle = DARK; - ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5); - // Right shadow - ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2); - } - - ctx.globalAlpha = 1; - } - - private renderNext(): void { - const ctx = this.nextCtx; - const size = 4 * CELL; - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, size, size); - - const shape = SHAPES[this.nextType][0]; - const color = COLORS[this.nextType]; - const offC = Math.floor((4 - shape[0].length) / 2); - const offR = Math.floor((4 - shape.length) / 2); - - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - this.drawCell(ctx, offC + c, offR + r, color, 1); - } - } - - ctx.strokeStyle = "rgba(255,255,255,0.12)"; - ctx.lineWidth = 1; - ctx.strokeRect(0, 0, size, size); - } -} - -// ── Bootstrap ───────────────────────────────────────────────── - -document.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/tetris.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/tetris.html @@ -1,626 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - /* ── Reset & base ───────────────────────────────────────── */ - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0a0a1a; - display: flex; - align-items: center; - justify-content: center; - min-height: 100vh; - font-family: "Segoe UI", system-ui, sans-serif; - color: #e0e0f0; - overflow: hidden; - } - - /* ── Outer wrapper ─────────────────────────────────────── */ - #app { - display: flex; - gap: 20px; - align-items: flex-start; - user-select: none; - } - - /* ── Board area ────────────────────────────────────────── */ - #board-wrap { - position: relative; - flex-shrink: 0; - } - - #board { - display: block; - border-radius: 4px; - box-shadow: - 0 0 0 2px rgba(255,255,255,0.08), - 0 8px 40px rgba(0,0,0,0.7), - 0 0 60px rgba(80,60,180,0.25); - } - - /* ── Game-over overlay ─────────────────────────────────── */ - #game-over { - display: none; - position: absolute; - inset: 0; - border-radius: 4px; - background: rgba(8, 8, 24, 0.88); - backdrop-filter: blur(4px); - flex-direction: column; - align-items: center; - justify-content: center; - gap: 16px; - z-index: 10; - } - - #game-over h2 { - font-size: 2.4rem; - font-weight: 800; - letter-spacing: 0.06em; - color: #ff5370; - text-shadow: 0 0 20px rgba(255,83,112,0.6); - text-transform: uppercase; - } - - #game-over .go-score-label { - font-size: 0.9rem; - color: #8888bb; - text-transform: uppercase; - letter-spacing: 0.12em; - } - - #game-over .go-score-val { - font-size: 2rem; - font-weight: 700; - color: #fdd835; - } - - #restart-btn { - margin-top: 8px; - padding: 10px 32px; - font-size: 1rem; - font-weight: 700; - letter-spacing: 0.08em; - text-transform: uppercase; - border: 2px solid #7c6af7; - background: transparent; - color: #c5beff; - border-radius: 6px; - cursor: pointer; - transition: background 0.15s, color 0.15s, box-shadow 0.15s; - } - - #restart-btn:hover { - background: #7c6af7; - color: #fff; - box-shadow: 0 0 18px rgba(124,106,247,0.5); - } - - #game-over .go-hint { - font-size: 0.78rem; - color: #5555aa; - letter-spacing: 0.06em; - } - - /* ── Side panel ────────────────────────────────────────── */ - #side { - display: flex; - flex-direction: column; - gap: 18px; - width: 150px; - } - - .panel-box { - background: rgba(255,255,255,0.04); - border: 1px solid rgba(255,255,255,0.08); - border-radius: 8px; - padding: 14px 16px; - } - - .panel-label { - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.16em; - text-transform: uppercase; - color: #6666aa; - margin-bottom: 8px; - } - - /* ── Next piece ────────────────────────────────────────── */ - #next-canvas { - display: block; - border-radius: 4px; - background: #12122a; - } - - /* ── Stats ─────────────────────────────────────────────── */ - .stat-value { - font-size: 1.65rem; - font-weight: 800; - letter-spacing: 0.04em; - color: #e8e8ff; - line-height: 1; - font-variant-numeric: tabular-nums; - } - - .stat-value.accent { color: #fdd835; } - - /* ── Controls reference ─────────────────────────────────── */ - .controls-grid { - display: grid; - grid-template-columns: auto 1fr; - gap: 5px 10px; - align-items: center; - } - - .key { - display: inline-block; - background: rgba(255,255,255,0.09); - border: 1px solid rgba(255,255,255,0.16); - border-bottom-width: 3px; - border-radius: 4px; - padding: 1px 6px; - font-size: 0.68rem; - font-weight: 700; - letter-spacing: 0.04em; - color: #aaaacc; - font-family: monospace; - text-align: center; - white-space: nowrap; - } - - .ctrl-desc { - font-size: 0.7rem; - color: #6666aa; - line-height: 1.3; - } - - /* ── Title ──────────────────────────────────────────────── */ - #title { - text-align: center; - font-size: 1.4rem; - font-weight: 900; - letter-spacing: 0.22em; - text-transform: uppercase; - background: linear-gradient(135deg, #7c6af7 0%, #00e5ff 100%); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - padding-bottom: 2px; - } - </style> -</head> -<body> - <div id="app"> - - <!-- ── Board ── --> - <div id="board-wrap"> - <canvas id="board" width="300" height="600"></canvas> - - <!-- Game-over overlay (sits on top of the board) --> - <div id="game-over"> - <h2>Game Over</h2> - <div> - <div class="go-score-label">Final Score</div> - <div class="go-score-val" id="final-score">0</div> - </div> - <button id="restart-btn">Play Again</button> - <div class="go-hint">or press R / Enter</div> - </div> - </div> - - <!-- ── Side panel ── --> - <div id="side"> - - <div id="title">Tetris</div> - - <!-- Next piece --> - <div class="panel-box"> - <div class="panel-label">Next</div> - <canvas id="next-canvas" width="120" height="120"></canvas> - </div> - - <!-- Score --> - <div class="panel-box"> - <div class="panel-label">Score</div> - <div class="stat-value accent" id="score-val">0</div> - </div> - - <!-- Level --> - <div class="panel-box"> - <div class="panel-label">Level</div> - <div class="stat-value" id="level-val">1</div> - </div> - - <!-- Lines --> - <div class="panel-box"> - <div class="panel-label">Lines</div> - <div class="stat-value" id="lines-val">0</div> - </div> - - <!-- Controls reference --> - <div class="panel-box"> - <div class="panel-label">Controls</div> - <div class="controls-grid"> - <span class="key">← →</span> <span class="ctrl-desc">Move</span> - <span class="key">↑</span> <span class="ctrl-desc">Rotate CW</span> - <span class="key">Z</span> <span class="ctrl-desc">Rotate CCW</span> - <span class="key">↓</span> <span class="ctrl-desc">Soft drop</span> - <span class="key">Space</span><span class="ctrl-desc">Hard drop</span> - </div> - </div> - - </div><!-- /side --> - </div><!-- /app --> - - <script> -"use strict"; -// ============================================================ -// Tetris – fully self-contained TypeScript implementation -// ============================================================ -// ── Constants ──────────────────────────────────────────────── -const COLS = 10; -const ROWS = 20; -const CELL = 30; // px per cell -const COLORS = { - I: "#00e5ff", - O: "#fdd835", - T: "#ab47bc", - S: "#66bb6a", - Z: "#ef5350", - J: "#42a5f5", - L: "#ffa726", -}; -// Highlight / shadow tints for 3-D cell effect -const LIGHT = "rgba(255,255,255,0.28)"; -const DARK = "rgba(0,0,0,0.32)"; -// All rotation states per piece type -// Each rotation is a 2-D array of 0/1 -const SHAPES = { - I: [ - [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]], - [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]], - [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]], - ], - O: [[[1,1],[1,1]]], - T: [ - [[0,1,0],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,1],[0,1,0]], - [[0,1,0],[1,1,0],[0,1,0]], - ], - S: [ - [[0,1,1],[1,1,0],[0,0,0]], - [[0,1,0],[0,1,1],[0,0,1]], - [[0,0,0],[0,1,1],[1,1,0]], - [[1,0,0],[1,1,0],[0,1,0]], - ], - Z: [ - [[1,1,0],[0,1,1],[0,0,0]], - [[0,0,1],[0,1,1],[0,1,0]], - [[0,0,0],[1,1,0],[0,1,1]], - [[0,1,0],[1,1,0],[1,0,0]], - ], - J: [ - [[1,0,0],[1,1,1],[0,0,0]], - [[0,1,1],[0,1,0],[0,1,0]], - [[0,0,0],[1,1,1],[0,0,1]], - [[0,1,0],[0,1,0],[1,1,0]], - ], - L: [ - [[0,0,1],[1,1,1],[0,0,0]], - [[0,1,0],[0,1,0],[0,1,1]], - [[0,0,0],[1,1,1],[1,0,0]], - [[1,1,0],[0,1,0],[0,1,0]], - ], -}; -const LINE_POINTS = [0, 100, 300, 500, 800]; -const WALL_KICKS = [0, -1, 1, -2, 2]; - -function dropInterval(level) { - return Math.max(50, 800 - (level - 1) * 72); -} - -class Bag { - constructor() { this.pool = []; } - refill() { - this.pool = ["I","O","T","S","Z","J","L"].slice(); - for (let i = this.pool.length - 1; i > 0; i--) { - const j = (Math.random() * (i + 1)) | 0; - [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]]; - } - } - draw() { if (this.pool.length === 0) this.refill(); return this.pool.pop(); } -} - -class TetrisGame { - constructor() { - this.score = 0; this.level = 1; this.lines = 0; this.over = false; - this.raf = 0; this.lastTs = 0; this.dropAcc = 0; - this.das = { left: false, right: false, charge: 0 }; - this.DAS_DELAY = 170; - this.DAS_REPEAT = 50; - - this.boardCanvas = document.getElementById("board"); - this.boardCtx = this.boardCanvas.getContext("2d"); - this.nextCanvas = document.getElementById("next-canvas"); - this.nextCtx = this.nextCanvas.getContext("2d"); - this.scoreEl = document.getElementById("score-val"); - this.levelEl = document.getElementById("level-val"); - this.linesEl = document.getElementById("lines-val"); - this.gameOverOverlay = document.getElementById("game-over"); - this.finalScoreEl = document.getElementById("final-score"); - - document.addEventListener("keydown", this.onKeyDown.bind(this)); - document.addEventListener("keyup", this.onKeyUp.bind(this)); - document.getElementById("restart-btn").addEventListener("click", () => this.restart()); - - this.init(); - this.loop(0); - } - - init() { - this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null)); - this.bag = new Bag(); - this.score = 0; this.level = 1; this.lines = 0; - this.over = false; this.dropAcc = 0; this.lastTs = 0; - this.nextType = this.bag.draw(); - this.current = this.spawnPiece(); - this.gameOverOverlay.style.display = "none"; - this.updateHUD(); - } - - spawnPiece() { - const type = this.nextType; - this.nextType = this.bag.draw(); - const shape = SHAPES[type][0]; - const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2); - return { type, shape, rotIdx: 0, x, y: 0 }; - } - - valid(shape, x, y) { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const bx = x + c, by = y + r; - if (bx < 0 || bx >= COLS || by >= ROWS) return false; - if (by >= 0 && this.board[by][bx] !== null) return false; - } - } - return true; - } - - tryMove(dx, dy) { - if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) { - this.current.x += dx; this.current.y += dy; return true; - } - return false; - } - - rotate(cw) { - const rots = SHAPES[this.current.type]; - if (rots.length === 1) return; - const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length; - const nextShape = rots[nextIdx]; - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y)) { - this.current.shape = nextShape; this.current.rotIdx = nextIdx; - this.current.x += kick; return; - } - } - for (const kick of WALL_KICKS) { - if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) { - this.current.shape = nextShape; this.current.rotIdx = nextIdx; - this.current.x += kick; this.current.y -= 1; return; - } - } - } - - hardDrop() { while (this.tryMove(0, 1)) {} this.lock(); } - - lock() { - const { shape, x, y, type } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const by = y + r; - if (by < 0) { this.endGame(); return; } - this.board[by][x + c] = type; - } - } - this.clearLines(); - this.current = this.spawnPiece(); - if (!this.valid(this.current.shape, this.current.x, this.current.y)) this.endGame(); - } - - clearLines() { - let cleared = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (this.board[r].every(c => c !== null)) { - this.board.splice(r, 1); - this.board.unshift(new Array(COLS).fill(null)); - cleared++; r++; - } - } - if (cleared > 0) { - this.score += LINE_POINTS[cleared] * this.level; - this.lines += cleared; - this.level = Math.floor(this.lines / 10) + 1; - this.updateHUD(); - } - } - - endGame() { - this.over = true; - cancelAnimationFrame(this.raf); - this.finalScoreEl.textContent = this.score.toLocaleString(); - this.gameOverOverlay.style.display = "flex"; - } - - restart() { cancelAnimationFrame(this.raf); this.init(); this.loop(0); } - - onKeyDown(e) { - if (this.over) { - if (e.code === "Enter" || e.code === "KeyR") this.restart(); - return; - } - switch (e.code) { - case "ArrowLeft": - e.preventDefault(); - if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; } - break; - case "ArrowRight": - e.preventDefault(); - if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; } - break; - case "ArrowDown": - e.preventDefault(); - if (!this.tryMove(0, 1)) this.lock(); - this.dropAcc = 0; - break; - case "ArrowUp": e.preventDefault(); this.rotate(true); break; - case "KeyZ": e.preventDefault(); this.rotate(false); break; - case "Space": e.preventDefault(); this.hardDrop(); break; - } - } - - onKeyUp(e) { - if (e.code === "ArrowLeft") this.das.left = false; - if (e.code === "ArrowRight") this.das.right = false; - } - - loop(ts) { - if (this.over) return; - const dt = this.lastTs === 0 ? 0 : ts - this.lastTs; - this.lastTs = ts; - - // DAS - if (this.das.left || this.das.right) { - this.das.charge += dt; - if (this.das.charge >= this.DAS_DELAY) { - const surplus = this.das.charge - this.DAS_DELAY; - const reps = Math.floor(surplus / this.DAS_REPEAT); - if (reps > 0) { - for (let i = 0; i < reps; i++) this.tryMove(this.das.left ? -1 : 1, 0); - this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT); - } - } - } - - // Gravity - this.dropAcc += dt; - const interval = dropInterval(this.level); - while (this.dropAcc >= interval) { - this.dropAcc -= interval; - if (!this.tryMove(0, 1)) { this.lock(); break; } - } - - this.render(); - this.raf = requestAnimationFrame(this.loop.bind(this)); - } - - updateHUD() { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - - ghostY() { - let gy = this.current.y; - while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++; - return gy; - } - - render() { - const ctx = this.boardCtx; - const W = COLS * CELL, H = ROWS * CELL; - - // Background - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, W, H); - - // Subtle grid lines - ctx.strokeStyle = "rgba(255,255,255,0.05)"; - ctx.lineWidth = 1; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) - for (let c = 0; c < COLS; c++) - if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1); - - // Ghost - const gy = this.ghostY(); - if (gy !== this.current.y) - this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2); - - // Active piece - this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1); - - // Board border - ctx.strokeStyle = "rgba(255,255,255,0.15)"; - ctx.lineWidth = 2; - ctx.strokeRect(0, 0, W, H); - - this.renderNext(); - } - - drawShape(ctx, shape, ox, oy, color, alpha) { - for (let r = 0; r < shape.length; r++) - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const br = oy + r; if (br < 0) continue; - this.drawCell(ctx, ox + c, br, color, alpha); - } - } - - drawCell(ctx, col, row, color, alpha) { - const x = col * CELL, y = row * CELL, pad = 1; - ctx.globalAlpha = alpha; - ctx.fillStyle = color; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2); - if (alpha > 0.4) { - ctx.fillStyle = LIGHT; - ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5); // top - ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2); // left - ctx.fillStyle = DARK; - ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5); // bottom - ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2); // right - } - ctx.globalAlpha = 1; - } - - renderNext() { - const ctx = this.nextCtx; - const size = 4 * CELL; - ctx.fillStyle = "#12122a"; - ctx.fillRect(0, 0, size, size); - const shape = SHAPES[this.nextType][0]; - const color = COLORS[this.nextType]; - const offC = Math.floor((4 - shape[0].length) / 2); - const offR = Math.floor((4 - shape.length) / 2); - for (let r = 0; r < shape.length; r++) - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - this.drawCell(ctx, offC + c, offR + r, color, 1); - } - ctx.strokeStyle = "rgba(255,255,255,0.12)"; - ctx.lineWidth = 1; - ctx.strokeRect(0, 0, size, size); - } -} - -document.addEventListener("DOMContentLoaded", () => { new TetrisGame(); }); - </script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tetris/tsconfig.json @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "None", - "lib": ["ES2017", "DOM"], - "strict": true, - "noEmit": false, - "outFile": "dist/tetris.js", - "removeComments": false, - "declaration": false, - "sourceMap": false, - "types": [] - }, - "include": ["src/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-4l5hn4ys", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-4l5hn4ys", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-4l5hn4ys", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,297 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:45:34.543Z", - "formats": { - "json": { - "sources": { - "tsconfig.json": { - "lines": 13, - "tokens": 88, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 33, - "tokens": 213, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "typescript": { - "sources": { - "tetris.ts": { - "lines": 629, - "tokens": 6247, - "sources": 1, - "clones": 4, - "duplicatedLines": 32, - "duplicatedTokens": 498, - "percentage": 5.09, - "percentageTokens": 7.97, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 629, - "tokens": 6247, - "sources": 1, - "clones": 2, - "duplicatedLines": 16, - "duplicatedTokens": 249, - "percentage": 2.54, - "percentageTokens": 3.99, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "tetris-compiled.js": { - "lines": 503, - "tokens": 5560, - "sources": 1, - "clones": 6, - "duplicatedLines": 40, - "duplicatedTokens": 622, - "percentage": 7.95, - "percentageTokens": 11.19, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 503, - "tokens": 5560, - "sources": 1, - "clones": 3, - "duplicatedLines": 20, - "duplicatedTokens": 311, - "percentage": 3.98, - "percentageTokens": 5.59, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1165, - "tokens": 12020, - "sources": 4, - "clones": 5, - "duplicatedLines": 36, - "duplicatedTokens": 560, - "percentage": 3.09, - "percentageTokens": 4.66, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "typescript", - "lines": 7, - "fragment": "(m: number[][]): number[][] {\n const rows = m.length;\n const cols = m[0].length;\n const out: number[][] = Array.from({ length: cols }, () => new Array(rows).fill(0));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n out[cols", - "tokens": 0, - "firstFile": { - "name": "tetris.ts", - "start": 97, - "end": 103, - "startLoc": { - "line": 97, - "column": 10, - "position": 788 - }, - "endLoc": { - "line": 103, - "column": 5, - "position": 937 - } - }, - "secondFile": { - "name": "tetris.ts", - "start": 85, - "end": 91, - "startLoc": { - "line": 85, - "column": 9, - "position": 596 - }, - "endLoc": { - "line": 91, - "column": 2, - "position": 745 - } - } - }, - { - "format": "typescript", - "lines": 11, - "fragment": "(this.current.shape);\n for (const kick of KICK_OFFSETS) {\n if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) {\n this.current.shape = rotated;\n this.current.x += kick;\n return;\n }\n }\n }\n\n private hardDrop", - "tokens": 0, - "firstFile": { - "name": "tetris.ts", - "start": 405, - "end": 415, - "startLoc": { - "line": 405, - "column": 10, - "position": 4007 - }, - "endLoc": { - "line": 415, - "column": 9, - "position": 4107 - } - }, - "secondFile": { - "name": "tetris.ts", - "start": 393, - "end": 403, - "startLoc": { - "line": 393, - "column": 9, - "position": 3872 - }, - "endLoc": { - "line": 403, - "column": 13, - "position": 3972 - } - } - }, - { - "format": "javascript", - "lines": 7, - "fragment": "(m) {\n const rows = m.length;\n const cols = m[0].length;\n const out = Array.from({ length: cols }, () => new Array(rows).fill(0));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n out[cols", - "tokens": 0, - "firstFile": { - "name": "tetris-compiled.js", - "start": 83, - "end": 89, - "startLoc": { - "line": 83, - "column": 10, - "position": 692 - }, - "endLoc": { - "line": 89, - "column": 5, - "position": 820 - } - }, - "secondFile": { - "name": "tetris-compiled.js", - "start": 72, - "end": 78, - "startLoc": { - "line": 72, - "column": 9, - "position": 522 - }, - "endLoc": { - "line": 78, - "column": 2, - "position": 650 - } - } - }, - { - "format": "javascript", - "lines": 10, - "fragment": "(this.current.shape);\n for (const kick of KICK_OFFSETS) {\n if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) {\n this.current.shape = rotated;\n this.current.x += kick;\n return;\n }\n }\n }\n hardDrop", - "tokens": 0, - "firstFile": { - "name": "tetris-compiled.js", - "start": 310, - "end": 319, - "startLoc": { - "line": 310, - "column": 10, - "position": 3399 - }, - "endLoc": { - "line": 319, - "column": 9, - "position": 3496 - } - }, - "secondFile": { - "name": "tetris-compiled.js", - "start": 298, - "end": 307, - "startLoc": { - "line": 298, - "column": 9, - "position": 3269 - }, - "endLoc": { - "line": 307, - "column": 13, - "position": 3366 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": ";\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const row = y", - "tokens": 0, - "firstFile": { - "name": "tetris-compiled.js", - "start": 455, - "end": 460, - "startLoc": { - "line": 455, - "column": 2, - "position": 4958 - }, - "endLoc": { - "line": 460, - "column": 2, - "position": 5044 - } - }, - "secondFile": { - "name": "tetris-compiled.js", - "start": 436, - "end": 441, - "startLoc": { - "line": 436, - "column": 8, - "position": 4665 - }, - "endLoc": { - "line": 441, - "column": 3, - "position": 4751 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris-compiled.js b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris-compiled.js @@ -1,504 +0,0 @@ -"use strict"; -// ============================================================================= -// TETRIS – single-file TypeScript implementation -// ============================================================================= -// --------------------------------------------------------------------------- -// Constants -// --------------------------------------------------------------------------- -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell on the main board -/** Points for clearing n lines simultaneously (index = line count) */ -const LINE_POINTS = [0, 100, 300, 500, 800]; -/** Drop interval in ms for a given level (never below 80 ms) */ -function dropInterval(level) { - return Math.max(80, 800 - (level - 1) * 72); -} -/** ARGB hex colours for each piece */ -const PIECE_COLOR = { - I: "#00f0f0", - O: "#f0f000", - T: "#a000f0", - S: "#00e000", - Z: "#f00000", - J: "#0000f0", - L: "#f0a000", -}; -/** - * Base shape for each piece as a binary 2-D matrix. - * Row 0 is the top of the piece; the shapes are chosen so that - * standard clockwise SRS rotations look correct. - */ -const BASE_SHAPE = { - I: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - O: [ - [1, 1], - [1, 1], - ], - T: [ - [0, 1, 0], - [1, 1, 1], - [0, 0, 0], - ], - S: [ - [0, 1, 1], - [1, 1, 0], - [0, 0, 0], - ], - Z: [ - [1, 1, 0], - [0, 1, 1], - [0, 0, 0], - ], - J: [ - [1, 0, 0], - [1, 1, 1], - [0, 0, 0], - ], - L: [ - [0, 0, 1], - [1, 1, 1], - [0, 0, 0], - ], -}; -// --------------------------------------------------------------------------- -// Matrix rotation utilities -// --------------------------------------------------------------------------- -function rotateCW(m) { - const rows = m.length; - const cols = m[0].length; - const out = Array.from({ length: cols }, () => new Array(rows).fill(0)); - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - out[c][rows - 1 - r] = m[r][c]; - } - } - return out; -} -function rotateCCW(m) { - const rows = m.length; - const cols = m[0].length; - const out = Array.from({ length: cols }, () => new Array(rows).fill(0)); - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - out[cols - 1 - c][r] = m[r][c]; - } - } - return out; -} -// --------------------------------------------------------------------------- -// 7-bag random piece generator -// --------------------------------------------------------------------------- -class PieceBag { - constructor() { - this.bag = []; - } - draw() { - if (this.bag.length === 0) - this.refill(); - return this.bag.pop(); - } - refill() { - this.bag = ["I", "O", "T", "S", "Z", "J", "L"]; - for (let i = this.bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [this.bag[i], this.bag[j]] = [this.bag[j], this.bag[i]]; - } - } -} -function spawnPiece(id) { - const shape = BASE_SHAPE[id].map((r) => [...r]); - const x = Math.floor((COLS - shape[0].length) / 2); - const y = id === "I" ? -1 : 0; - return { id, shape, x, y }; -} -function emptyBoard() { - return Array.from({ length: ROWS }, () => new Array(COLS).fill(null)); -} -// --------------------------------------------------------------------------- -// Collision / validity -// --------------------------------------------------------------------------- -function isValid(board, shape, px, py) { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) - continue; - const col = px + c; - const row = py + r; - if (col < 0 || col >= COLS) - return false; - if (row >= ROWS) - return false; - if (row >= 0 && board[row][col] !== null) - return false; - } - } - return true; -} -// --------------------------------------------------------------------------- -// Ghost piece (drop preview) -// --------------------------------------------------------------------------- -function ghostY(board, piece) { - let gy = piece.y; - while (isValid(board, piece.shape, piece.x, gy + 1)) - gy++; - return gy; -} -// --------------------------------------------------------------------------- -// Wall-kick offsets to try when rotating -// --------------------------------------------------------------------------- -const KICK_OFFSETS = [0, -1, 1, -2, 2]; -// --------------------------------------------------------------------------- -// Drawing helpers -// --------------------------------------------------------------------------- -function drawBlock(ctx, col, row, color, size = BLOCK) { - const x = col * size; - const y = row * size; - // Base fill - ctx.fillStyle = color; - ctx.fillRect(x + 1, y + 1, size - 2, size - 2); - // Top / left highlight - ctx.fillStyle = "rgba(255,255,255,0.28)"; - ctx.fillRect(x + 1, y + 1, size - 2, 4); - ctx.fillRect(x + 1, y + 1, 4, size - 2); - // Bottom / right shadow - ctx.fillStyle = "rgba(0,0,0,0.35)"; - ctx.fillRect(x + 1, y + size - 5, size - 2, 4); - ctx.fillRect(x + size - 5, y + 1, 4, size - 2); -} -function drawBlockAt(ctx, px, // pixel x -py, // pixel y -color, size) { - ctx.fillStyle = color; - ctx.fillRect(px + 1, py + 1, size - 2, size - 2); - ctx.fillStyle = "rgba(255,255,255,0.28)"; - ctx.fillRect(px + 1, py + 1, size - 2, 4); - ctx.fillRect(px + 1, py + 1, 4, size - 2); - ctx.fillStyle = "rgba(0,0,0,0.35)"; - ctx.fillRect(px + 1, py + size - 5, size - 2, 4); - ctx.fillRect(px + size - 4, py + 1, 4, size - 2); -} -// --------------------------------------------------------------------------- -// TetrisGame – orchestrates everything -// --------------------------------------------------------------------------- -class TetrisGame { - constructor() { - // ---- Timing ---- - this.lastTimestamp = 0; - this.dropAccum = 0; - // ---- Soft drop state ---- - this.softDropping = false; - this.boardCanvas = document.getElementById("board"); - this.boardCtx = this.boardCanvas.getContext("2d"); - this.previewCanvas = document.getElementById("preview"); - this.previewCtx = this.previewCanvas.getContext("2d"); - this.scoreEl = document.getElementById("score"); - this.levelEl = document.getElementById("level"); - this.linesEl = document.getElementById("lines"); - this.overlayEl = document.getElementById("overlay"); - this.overlayTitleEl = document.getElementById("overlay-title"); - this.overlayScoreEl = document.getElementById("overlay-score"); - this.restartBtn = document.getElementById("restart-btn"); - this.restartBtn.addEventListener("click", () => this.restart()); - document.addEventListener("keydown", (e) => this.handleKey(e)); - document.addEventListener("keyup", (e) => { - if (e.key === "ArrowDown") - this.softDropping = false; - }); - this.initState(); - requestAnimationFrame((t) => this.loop(t)); - } - // ---- Initialise / reset ---- - initState() { - this.board = emptyBoard(); - this.bag = new PieceBag(); - this.nextId = this.bag.draw(); - this.score = 0; - this.level = 1; - this.lines = 0; - this.dead = false; - this.paused = false; - this.dropAccum = 0; - this.interval = dropInterval(1); - this.softDropping = false; - this.spawnNext(); - this.updateHUD(); - } - restart() { - this.overlayEl.style.display = "none"; - this.initState(); - } - // ---- Piece management ---- - spawnNext() { - this.current = spawnPiece(this.nextId); - this.nextId = this.bag.draw(); - if (!isValid(this.board, this.current.shape, this.current.x, this.current.y)) { - this.dead = true; - this.showGameOver(); - } - } - lockCurrent() { - const { id, shape, x, y } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const row = y + r; - if (row >= 0) - this.board[row][x + c] = id; - } - } - } - this.clearLines(); - this.spawnNext(); - } - // ---- Line clearing ---- - clearLines() { - let cleared = 0; - for (let r = ROWS - 1; r >= 0;) { - if (this.board[r].every((c) => c !== null)) { - this.board.splice(r, 1); - this.board.unshift(new Array(COLS).fill(null)); - cleared++; - // same row index now contains the row that was above – check it again - } - else { - r--; - } - } - if (cleared > 0) { - this.lines += cleared; - this.score += LINE_POINTS[Math.min(cleared, 4)] * this.level; - const newLevel = Math.floor(this.lines / 10) + 1; - if (newLevel !== this.level) { - this.level = newLevel; - this.interval = dropInterval(this.level); - } - this.updateHUD(); - } - } - // ---- Movement & rotation ---- - tryMove(dx, dy) { - const nx = this.current.x + dx; - const ny = this.current.y + dy; - if (isValid(this.board, this.current.shape, nx, ny)) { - this.current.x = nx; - this.current.y = ny; - return true; - } - return false; - } - tryRotateCW() { - if (this.current.id === "O") - return; - const rotated = rotateCW(this.current.shape); - for (const kick of KICK_OFFSETS) { - if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) { - this.current.shape = rotated; - this.current.x += kick; - return; - } - } - } - tryRotateCCW() { - if (this.current.id === "O") - return; - const rotated = rotateCCW(this.current.shape); - for (const kick of KICK_OFFSETS) { - if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) { - this.current.shape = rotated; - this.current.x += kick; - return; - } - } - } - hardDrop() { - while (this.tryMove(0, 1)) { /* keep going */ } - this.lockCurrent(); - this.dropAccum = 0; - } - // ---- Input ---- - handleKey(e) { - if (this.dead) { - if (e.key === "Enter" || e.key === " " || e.key === "r" || e.key === "R") { - this.restart(); - } - return; - } - if (e.key === "p" || e.key === "P") { - this.paused = !this.paused; - return; - } - if (this.paused) - return; - switch (e.key) { - case "ArrowLeft": - this.tryMove(-1, 0); - e.preventDefault(); - break; - case "ArrowRight": - this.tryMove(1, 0); - e.preventDefault(); - break; - case "ArrowDown": - this.softDropping = true; - this.tryMove(0, 1); - this.dropAccum = 0; - e.preventDefault(); - break; - case "ArrowUp": - this.tryRotateCW(); - e.preventDefault(); - break; - case "z": - case "Z": - this.tryRotateCCW(); - break; - case " ": - this.hardDrop(); - e.preventDefault(); - break; - } - } - // ---- HUD ---- - updateHUD() { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - showGameOver() { - this.overlayTitleEl.textContent = "GAME OVER"; - this.overlayScoreEl.textContent = `Final Score: ${this.score.toLocaleString()}`; - this.overlayEl.style.display = "flex"; - } - // ---- Game loop ---- - loop(timestamp) { - const delta = timestamp - this.lastTimestamp; - this.lastTimestamp = timestamp; - if (!this.dead && !this.paused) { - const effectiveInterval = this.softDropping - ? Math.min(50, this.interval / 8) - : this.interval; - this.dropAccum += delta; - if (this.dropAccum >= effectiveInterval) { - this.dropAccum = 0; - if (!this.tryMove(0, 1)) { - this.lockCurrent(); - } - } - } - this.render(); - requestAnimationFrame((t) => this.loop(t)); - } - // ---- Rendering ---- - render() { - this.renderBoard(); - this.renderPreview(); - } - renderBoard() { - const ctx = this.boardCtx; - const W = COLS * BLOCK; - const H = ROWS * BLOCK; - // Background - ctx.fillStyle = "#16213e"; - ctx.fillRect(0, 0, W, H); - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - ctx.lineWidth = 0.5; - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * BLOCK); - ctx.lineTo(W, r * BLOCK); - ctx.stroke(); - } - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * BLOCK, 0); - ctx.lineTo(c * BLOCK, H); - ctx.stroke(); - } - // Placed blocks - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const cell = this.board[r][c]; - if (cell) - drawBlock(ctx, c, r, PIECE_COLOR[cell]); - } - } - if (!this.dead) { - // Ghost piece - const gy = ghostY(this.board, this.current); - if (gy !== this.current.y) { - const { shape, x } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) - continue; - const row = gy + r; - const col = x + c; - if (row >= 0 && row < ROWS) { - ctx.fillStyle = "rgba(255,255,255,0.13)"; - ctx.fillRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2); - ctx.strokeStyle = "rgba(255,255,255,0.25)"; - ctx.lineWidth = 1; - ctx.strokeRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2); - } - } - } - } - // Active piece - const { id, shape, x, y } = this.current; - const color = PIECE_COLOR[id]; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) - continue; - const row = y + r; - const col = x + c; - if (row >= 0) - drawBlock(ctx, col, row, color); - } - } - } - // Pause overlay - if (this.paused && !this.dead) { - ctx.fillStyle = "rgba(0,0,0,0.55)"; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = "#ffffff"; - ctx.font = "bold 28px 'Segoe UI', sans-serif"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillText("PAUSED", W / 2, H / 2); - } - } - renderPreview() { - const ctx = this.previewCtx; - const canvas = this.previewCanvas; - const W = canvas.width; - const H = canvas.height; - ctx.fillStyle = "#16213e"; - ctx.fillRect(0, 0, W, H); - const shape = BASE_SHAPE[this.nextId]; - const bsize = 24; - const offsetX = Math.floor((W - shape[0].length * bsize) / 2); - const offsetY = Math.floor((H - shape.length * bsize) / 2); - const color = PIECE_COLOR[this.nextId]; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - drawBlockAt(ctx, offsetX + c * bsize, offsetY + r * bsize, color, bsize); - } - } - } - } -} -// --------------------------------------------------------------------------- -// Bootstrap -// --------------------------------------------------------------------------- -window.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris.ts @@ -1,630 +0,0 @@ -// ============================================================================= -// TETRIS – single-file TypeScript implementation -// ============================================================================= - -// --------------------------------------------------------------------------- -// Constants -// --------------------------------------------------------------------------- - -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell on the main board - -/** Points for clearing n lines simultaneously (index = line count) */ -const LINE_POINTS = [0, 100, 300, 500, 800]; - -/** Drop interval in ms for a given level (never below 80 ms) */ -function dropInterval(level: number): number { - return Math.max(80, 800 - (level - 1) * 72); -} - -// --------------------------------------------------------------------------- -// Piece definitions -// --------------------------------------------------------------------------- - -type PieceId = "I" | "O" | "T" | "S" | "Z" | "J" | "L"; - -/** ARGB hex colours for each piece */ -const PIECE_COLOR: Record<PieceId, string> = { - I: "#00f0f0", - O: "#f0f000", - T: "#a000f0", - S: "#00e000", - Z: "#f00000", - J: "#0000f0", - L: "#f0a000", -}; - -/** - * Base shape for each piece as a binary 2-D matrix. - * Row 0 is the top of the piece; the shapes are chosen so that - * standard clockwise SRS rotations look correct. - */ -const BASE_SHAPE: Record<PieceId, number[][]> = { - I: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - O: [ - [1, 1], - [1, 1], - ], - T: [ - [0, 1, 0], - [1, 1, 1], - [0, 0, 0], - ], - S: [ - [0, 1, 1], - [1, 1, 0], - [0, 0, 0], - ], - Z: [ - [1, 1, 0], - [0, 1, 1], - [0, 0, 0], - ], - J: [ - [1, 0, 0], - [1, 1, 1], - [0, 0, 0], - ], - L: [ - [0, 0, 1], - [1, 1, 1], - [0, 0, 0], - ], -}; - -// --------------------------------------------------------------------------- -// Matrix rotation utilities -// --------------------------------------------------------------------------- - -function rotateCW(m: number[][]): number[][] { - const rows = m.length; - const cols = m[0].length; - const out: number[][] = Array.from({ length: cols }, () => new Array(rows).fill(0)); - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - out[c][rows - 1 - r] = m[r][c]; - } - } - return out; -} - -function rotateCCW(m: number[][]): number[][] { - const rows = m.length; - const cols = m[0].length; - const out: number[][] = Array.from({ length: cols }, () => new Array(rows).fill(0)); - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - out[cols - 1 - c][r] = m[r][c]; - } - } - return out; -} - -// --------------------------------------------------------------------------- -// 7-bag random piece generator -// --------------------------------------------------------------------------- - -class PieceBag { - private bag: PieceId[] = []; - - draw(): PieceId { - if (this.bag.length === 0) this.refill(); - return this.bag.pop()!; - } - - private refill(): void { - this.bag = ["I", "O", "T", "S", "Z", "J", "L"] as PieceId[]; - for (let i = this.bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [this.bag[i], this.bag[j]] = [this.bag[j], this.bag[i]]; - } - } -} - -// --------------------------------------------------------------------------- -// Active piece -// --------------------------------------------------------------------------- - -interface Piece { - id: PieceId; - shape: number[][]; - x: number; // column of left edge - y: number; // row of top edge (can be negative while entering) -} - -function spawnPiece(id: PieceId): Piece { - const shape = BASE_SHAPE[id].map((r) => [...r]); - const x = Math.floor((COLS - shape[0].length) / 2); - const y = id === "I" ? -1 : 0; - return { id, shape, x, y }; -} - -// --------------------------------------------------------------------------- -// Board -// --------------------------------------------------------------------------- - -type Cell = PieceId | null; -type Board = Cell[][]; - -function emptyBoard(): Board { - return Array.from({ length: ROWS }, () => new Array<Cell>(COLS).fill(null)); -} - -// --------------------------------------------------------------------------- -// Collision / validity -// --------------------------------------------------------------------------- - -function isValid( - board: Board, - shape: number[][], - px: number, - py: number -): boolean { - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const col = px + c; - const row = py + r; - if (col < 0 || col >= COLS) return false; - if (row >= ROWS) return false; - if (row >= 0 && board[row][col] !== null) return false; - } - } - return true; -} - -// --------------------------------------------------------------------------- -// Ghost piece (drop preview) -// --------------------------------------------------------------------------- - -function ghostY(board: Board, piece: Piece): number { - let gy = piece.y; - while (isValid(board, piece.shape, piece.x, gy + 1)) gy++; - return gy; -} - -// --------------------------------------------------------------------------- -// Wall-kick offsets to try when rotating -// --------------------------------------------------------------------------- - -const KICK_OFFSETS = [0, -1, 1, -2, 2]; - -// --------------------------------------------------------------------------- -// Drawing helpers -// --------------------------------------------------------------------------- - -function drawBlock( - ctx: CanvasRenderingContext2D, - col: number, - row: number, - color: string, - size: number = BLOCK -): void { - const x = col * size; - const y = row * size; - - // Base fill - ctx.fillStyle = color; - ctx.fillRect(x + 1, y + 1, size - 2, size - 2); - - // Top / left highlight - ctx.fillStyle = "rgba(255,255,255,0.28)"; - ctx.fillRect(x + 1, y + 1, size - 2, 4); - ctx.fillRect(x + 1, y + 1, 4, size - 2); - - // Bottom / right shadow - ctx.fillStyle = "rgba(0,0,0,0.35)"; - ctx.fillRect(x + 1, y + size - 5, size - 2, 4); - ctx.fillRect(x + size - 5, y + 1, 4, size - 2); -} - -function drawBlockAt( - ctx: CanvasRenderingContext2D, - px: number, // pixel x - py: number, // pixel y - color: string, - size: number -): void { - ctx.fillStyle = color; - ctx.fillRect(px + 1, py + 1, size - 2, size - 2); - ctx.fillStyle = "rgba(255,255,255,0.28)"; - ctx.fillRect(px + 1, py + 1, size - 2, 4); - ctx.fillRect(px + 1, py + 1, 4, size - 2); - ctx.fillStyle = "rgba(0,0,0,0.35)"; - ctx.fillRect(px + 1, py + size - 5, size - 2, 4); - ctx.fillRect(px + size - 4, py + 1, 4, size - 2); -} - -// --------------------------------------------------------------------------- -// TetrisGame – orchestrates everything -// --------------------------------------------------------------------------- - -class TetrisGame { - // ---- DOM refs ---- - private boardCanvas: HTMLCanvasElement; - private boardCtx: CanvasRenderingContext2D; - private previewCanvas: HTMLCanvasElement; - private previewCtx: CanvasRenderingContext2D; - private scoreEl: HTMLElement; - private levelEl: HTMLElement; - private linesEl: HTMLElement; - private overlayEl: HTMLElement; - private overlayTitleEl: HTMLElement; - private overlayScoreEl: HTMLElement; - private restartBtn: HTMLElement; - - // ---- Game state ---- - private board!: Board; - private current!: Piece; - private nextId!: PieceId; - private bag!: PieceBag; - private score!: number; - private level!: number; - private lines!: number; - private dead!: boolean; - private paused!: boolean; - - // ---- Timing ---- - private lastTimestamp = 0; - private dropAccum = 0; - private interval!: number; - - // ---- Soft drop state ---- - private softDropping = false; - - constructor() { - this.boardCanvas = document.getElementById("board") as HTMLCanvasElement; - this.boardCtx = this.boardCanvas.getContext("2d")!; - this.previewCanvas = document.getElementById("preview") as HTMLCanvasElement; - this.previewCtx = this.previewCanvas.getContext("2d")!; - this.scoreEl = document.getElementById("score")!; - this.levelEl = document.getElementById("level")!; - this.linesEl = document.getElementById("lines")!; - this.overlayEl = document.getElementById("overlay")!; - this.overlayTitleEl = document.getElementById("overlay-title")!; - this.overlayScoreEl = document.getElementById("overlay-score")!; - this.restartBtn = document.getElementById("restart-btn")!; - - this.restartBtn.addEventListener("click", () => this.restart()); - document.addEventListener("keydown", (e) => this.handleKey(e)); - document.addEventListener("keyup", (e) => { - if (e.key === "ArrowDown") this.softDropping = false; - }); - - this.initState(); - requestAnimationFrame((t) => this.loop(t)); - } - - // ---- Initialise / reset ---- - - private initState(): void { - this.board = emptyBoard(); - this.bag = new PieceBag(); - this.nextId = this.bag.draw(); - this.score = 0; - this.level = 1; - this.lines = 0; - this.dead = false; - this.paused = false; - this.dropAccum = 0; - this.interval = dropInterval(1); - this.softDropping = false; - this.spawnNext(); - this.updateHUD(); - } - - private restart(): void { - this.overlayEl.style.display = "none"; - this.initState(); - } - - // ---- Piece management ---- - - private spawnNext(): void { - this.current = spawnPiece(this.nextId); - this.nextId = this.bag.draw(); - if (!isValid(this.board, this.current.shape, this.current.x, this.current.y)) { - this.dead = true; - this.showGameOver(); - } - } - - private lockCurrent(): void { - const { id, shape, x, y } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - const row = y + r; - if (row >= 0) this.board[row][x + c] = id; - } - } - } - this.clearLines(); - this.spawnNext(); - } - - // ---- Line clearing ---- - - private clearLines(): void { - let cleared = 0; - for (let r = ROWS - 1; r >= 0; ) { - if (this.board[r].every((c) => c !== null)) { - this.board.splice(r, 1); - this.board.unshift(new Array<Cell>(COLS).fill(null)); - cleared++; - // same row index now contains the row that was above – check it again - } else { - r--; - } - } - if (cleared > 0) { - this.lines += cleared; - this.score += LINE_POINTS[Math.min(cleared, 4)] * this.level; - const newLevel = Math.floor(this.lines / 10) + 1; - if (newLevel !== this.level) { - this.level = newLevel; - this.interval = dropInterval(this.level); - } - this.updateHUD(); - } - } - - // ---- Movement & rotation ---- - - private tryMove(dx: number, dy: number): boolean { - const nx = this.current.x + dx; - const ny = this.current.y + dy; - if (isValid(this.board, this.current.shape, nx, ny)) { - this.current.x = nx; - this.current.y = ny; - return true; - } - return false; - } - - private tryRotateCW(): void { - if (this.current.id === "O") return; - const rotated = rotateCW(this.current.shape); - for (const kick of KICK_OFFSETS) { - if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) { - this.current.shape = rotated; - this.current.x += kick; - return; - } - } - } - - private tryRotateCCW(): void { - if (this.current.id === "O") return; - const rotated = rotateCCW(this.current.shape); - for (const kick of KICK_OFFSETS) { - if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) { - this.current.shape = rotated; - this.current.x += kick; - return; - } - } - } - - private hardDrop(): void { - while (this.tryMove(0, 1)) { /* keep going */ } - this.lockCurrent(); - this.dropAccum = 0; - } - - // ---- Input ---- - - private handleKey(e: KeyboardEvent): void { - if (this.dead) { - if (e.key === "Enter" || e.key === " " || e.key === "r" || e.key === "R") { - this.restart(); - } - return; - } - - if (e.key === "p" || e.key === "P") { - this.paused = !this.paused; - return; - } - - if (this.paused) return; - - switch (e.key) { - case "ArrowLeft": - this.tryMove(-1, 0); - e.preventDefault(); - break; - case "ArrowRight": - this.tryMove(1, 0); - e.preventDefault(); - break; - case "ArrowDown": - this.softDropping = true; - this.tryMove(0, 1); - this.dropAccum = 0; - e.preventDefault(); - break; - case "ArrowUp": - this.tryRotateCW(); - e.preventDefault(); - break; - case "z": - case "Z": - this.tryRotateCCW(); - break; - case " ": - this.hardDrop(); - e.preventDefault(); - break; - } - } - - // ---- HUD ---- - - private updateHUD(): void { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - - private showGameOver(): void { - this.overlayTitleEl.textContent = "GAME OVER"; - this.overlayScoreEl.textContent = `Final Score: ${this.score.toLocaleString()}`; - this.overlayEl.style.display = "flex"; - } - - // ---- Game loop ---- - - private loop(timestamp: number): void { - const delta = timestamp - this.lastTimestamp; - this.lastTimestamp = timestamp; - - if (!this.dead && !this.paused) { - const effectiveInterval = - this.softDropping - ? Math.min(50, this.interval / 8) - : this.interval; - - this.dropAccum += delta; - if (this.dropAccum >= effectiveInterval) { - this.dropAccum = 0; - if (!this.tryMove(0, 1)) { - this.lockCurrent(); - } - } - } - - this.render(); - requestAnimationFrame((t) => this.loop(t)); - } - - // ---- Rendering ---- - - private render(): void { - this.renderBoard(); - this.renderPreview(); - } - - private renderBoard(): void { - const ctx = this.boardCtx; - const W = COLS * BLOCK; - const H = ROWS * BLOCK; - - // Background - ctx.fillStyle = "#16213e"; - ctx.fillRect(0, 0, W, H); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - ctx.lineWidth = 0.5; - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * BLOCK); - ctx.lineTo(W, r * BLOCK); - ctx.stroke(); - } - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * BLOCK, 0); - ctx.lineTo(c * BLOCK, H); - ctx.stroke(); - } - - // Placed blocks - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const cell = this.board[r][c]; - if (cell) drawBlock(ctx, c, r, PIECE_COLOR[cell]); - } - } - - if (!this.dead) { - // Ghost piece - const gy = ghostY(this.board, this.current); - if (gy !== this.current.y) { - const { shape, x } = this.current; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const row = gy + r; - const col = x + c; - if (row >= 0 && row < ROWS) { - ctx.fillStyle = "rgba(255,255,255,0.13)"; - ctx.fillRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2); - ctx.strokeStyle = "rgba(255,255,255,0.25)"; - ctx.lineWidth = 1; - ctx.strokeRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2); - } - } - } - } - - // Active piece - const { id, shape, x, y } = this.current; - const color = PIECE_COLOR[id]; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const row = y + r; - const col = x + c; - if (row >= 0) drawBlock(ctx, col, row, color); - } - } - } - - // Pause overlay - if (this.paused && !this.dead) { - ctx.fillStyle = "rgba(0,0,0,0.55)"; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = "#ffffff"; - ctx.font = "bold 28px 'Segoe UI', sans-serif"; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillText("PAUSED", W / 2, H / 2); - } - } - - private renderPreview(): void { - const ctx = this.previewCtx; - const canvas = this.previewCanvas; - const W = canvas.width; - const H = canvas.height; - - ctx.fillStyle = "#16213e"; - ctx.fillRect(0, 0, W, H); - - const shape = BASE_SHAPE[this.nextId]; - const bsize = 24; - const offsetX = Math.floor((W - shape[0].length * bsize) / 2); - const offsetY = Math.floor((H - shape.length * bsize) / 2); - const color = PIECE_COLOR[this.nextId]; - - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - drawBlockAt( - ctx, - offsetX + c * bsize, - offsetY + r * bsize, - color, - bsize - ); - } - } - } - } -} - -// --------------------------------------------------------------------------- -// Bootstrap -// --------------------------------------------------------------------------- - -window.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json @@ -1,14 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "None", - "lib": ["ES2017", "DOM"], - "strict": true, - "outFile": "tetris-compiled.js", - "removeComments": false, - "noEmitOnError": true, - "skipLibCheck": true, - "types": [] - }, - "include": ["tetris.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-ybuwdjed", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-ybuwdjed", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-ybuwdjed", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,60 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:46:35.828Z", - "formats": { - "json": { - "sources": { - "tsconfig.json": { - "lines": 10, - "tokens": 61, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 30, - "tokens": 186, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 30, - "tokens": 186, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "none", - "strict": true, - "outFile": "tetris.js", - "removeComments": false, - "noEmitOnError": true - }, - "include": ["tetris.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html @@ -1,74 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <link rel="stylesheet" href="style.css" /> -</head> -<body> - - <h1 class="game-title">Tetris</h1> - - <div class="game-wrapper"> - - <!-- Main board --> - <canvas id="game-canvas" width="300" height="600"></canvas> - - <!-- Sidebar --> - <div class="sidebar"> - - <!-- Next piece --> - <div class="next-panel"> - <div class="panel-label">Next</div> - <canvas id="next-canvas" width="120" height="100"></canvas> - </div> - - <!-- Score --> - <div class="panel"> - <div class="panel-label">Score</div> - <div class="panel-value" id="score">0</div> - </div> - - <!-- Level --> - <div class="panel"> - <div class="panel-label">Level</div> - <div class="panel-value" id="level">1</div> - </div> - - <!-- Lines --> - <div class="panel"> - <div class="panel-label">Lines</div> - <div class="panel-value" id="lines">0</div> - </div> - - <!-- Controls reference --> - <div class="controls-panel"> - <div class="panel-label">Controls</div> - <div class="control-row"><span class="key">← →</span><span class="action">Move</span></div> - <div class="control-row"><span class="key">↑</span><span class="action">Rotate CW</span></div> - <div class="control-row"><span class="key">Z</span><span class="action">Rotate CCW</span></div> - <div class="control-row"><span class="key">↓</span><span class="action">Soft drop</span></div> - <div class="control-row"><span class="key">Space</span><span class="action">Hard drop</span></div> - <div class="control-row"><span class="key">P</span><span class="action">Pause</span></div> - </div> - - <!-- Action buttons --> - <button class="btn" id="btn-new-game">New Game</button> - - </div> - </div> - - <!-- Overlay (start / pause / game-over) --> - <div class="overlay" id="overlay"> - <div class="overlay-box"> - <h2 id="overlay-title">TETRIS</h2> - <p class="sub" id="overlay-sub">Use arrow keys to play</p> - <p class="final-score hidden" id="overlay-score"></p> - <button class="btn" id="overlay-btn">Start Game</button> - </div> - </div> - - <script src="dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-rcr2cfzb", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-rcr2cfzb", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,24 +0,0 @@ -{ - "name": "loop-bench-rcr2cfzb", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "tsc", - "watch": "tsc --watch", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,281 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:46:48.986Z", - "formats": { - "typescript": { - "sources": { - "src/tetris.ts": { - "lines": 663, - "tokens": 6679, - "sources": 1, - "clones": 2, - "duplicatedLines": 10, - "duplicatedTokens": 232, - "percentage": 1.51, - "percentageTokens": 3.47, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 663, - "tokens": 6679, - "sources": 1, - "clones": 1, - "duplicatedLines": 5, - "duplicatedTokens": 116, - "percentage": 0.75, - "percentageTokens": 1.74, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "dist/tetris.js": { - "lines": 585, - "tokens": 6089, - "sources": 1, - "clones": 4, - "duplicatedLines": 20, - "duplicatedTokens": 446, - "percentage": 3.42, - "percentageTokens": 7.32, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 585, - "tokens": 6089, - "sources": 1, - "clones": 2, - "duplicatedLines": 10, - "duplicatedTokens": 223, - "percentage": 1.71, - "percentageTokens": 3.66, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 14, - "tokens": 94, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 23, - "tokens": 146, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 37, - "tokens": 240, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "css": { - "sources": { - "style.css": { - "lines": 235, - "tokens": 1370, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 235, - "tokens": 1370, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 73, - "tokens": 856, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 73, - "tokens": 856, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1593, - "tokens": 15234, - "sources": 6, - "clones": 3, - "duplicatedLines": 15, - "duplicatedTokens": 339, - "percentage": 0.94, - "percentageTokens": 2.23, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "typescript", - "lines": 6, - "fragment": "(m: Shape): Shape {\n const N = m.length;\n const r: Shape = Array.from({ length: N }, () => Array(N).fill(0));\n for (let y = 0; y < N; y++)\n for (let x = 0; x < N; x++)\n r[N", - "tokens": 0, - "firstFile": { - "name": "src/tetris.ts", - "start": 118, - "end": 123, - "startLoc": { - "line": 118, - "column": 10, - "position": 835 - }, - "endLoc": { - "line": 123, - "column": 2, - "position": 951 - } - }, - "secondFile": { - "name": "src/tetris.ts", - "start": 108, - "end": 113, - "startLoc": { - "line": 108, - "column": 9, - "position": 680 - }, - "endLoc": { - "line": 113, - "column": 2, - "position": 796 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": "(m) {\n const N = m.length;\n const r = Array.from({ length: N }, () => Array(N).fill(0));\n for (let y = 0; y < N; y++)\n for (let x = 0; x < N; x++)\n r[N", - "tokens": 0, - "firstFile": { - "name": "dist/tetris.js", - "start": 95, - "end": 100, - "startLoc": { - "line": 95, - "column": 10, - "position": 757 - }, - "endLoc": { - "line": 100, - "column": 2, - "position": 864 - } - }, - "secondFile": { - "name": "dist/tetris.js", - "start": 86, - "end": 91, - "startLoc": { - "line": 86, - "column": 9, - "position": 612 - }, - "endLoc": { - "line": 91, - "column": 2, - "position": 719 - } - } - }, - { - "format": "javascript", - "lines": 6, - "fragment": "const colour = COLOURS[this.piece.typeIdx + 1];\n for (let r = 0; r < this.piece.shape.length; r++) {\n for (let c = 0; c < this.piece.shape[r].length; c++) {\n if (!this.piece.shape[r][c])\n continue;\n const br = this", - "tokens": 0, - "firstFile": { - "name": "dist/tetris.js", - "start": 545, - "end": 550, - "startLoc": { - "line": 545, - "column": 13, - "position": 5558 - }, - "endLoc": { - "line": 550, - "column": 5, - "position": 5674 - } - }, - "secondFile": { - "name": "dist/tetris.js", - "start": 522, - "end": 527, - "startLoc": { - "line": 522, - "column": 13, - "position": 5239 - }, - "endLoc": { - "line": 527, - "column": 3, - "position": 5355 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/tetris.ts @@ -1,664 +0,0 @@ -// ─── Constants ──────────────────────────────────────────────────────────────── - -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell on the main board -const NEXT_BLOCK = 22; // px per cell in the next-piece preview - -/** Scores for 1-4 simultaneous line clears (multiplied by level). */ -const LINE_SCORES = [0, 100, 300, 500, 800] as const; - -/** How many cleared lines are needed to advance one level. */ -const LINES_PER_LEVEL = 10; - -// ─── Piece definitions ──────────────────────────────────────────────────────── - -/** - * Each piece is stored as a numeric matrix where the value equals the colour - * index (1-7). All pieces use a square bounding box so we can do in-place - * 90-degree rotation with a single transpose+reverse. - */ - -type Shape = number[][]; - -interface PieceDef { - shape: Shape; - colour: string; -} - -const PIECE_DEFS: PieceDef[] = [ - // 1 – I (4×4 bounding box) - { - colour: "#00f0f0", - shape: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - }, - // 2 – O (2×2) - { - colour: "#f0f000", - shape: [ - [2, 2], - [2, 2], - ], - }, - // 3 – T (3×3) - { - colour: "#a000f0", - shape: [ - [0, 3, 0], - [3, 3, 3], - [0, 0, 0], - ], - }, - // 4 – S (3×3) - { - colour: "#00c000", - shape: [ - [0, 4, 4], - [4, 4, 0], - [0, 0, 0], - ], - }, - // 5 – Z (3×3) - { - colour: "#f00000", - shape: [ - [5, 5, 0], - [0, 5, 5], - [0, 0, 0], - ], - }, - // 6 – J (3×3) - { - colour: "#0040f0", - shape: [ - [6, 0, 0], - [6, 6, 6], - [0, 0, 0], - ], - }, - // 7 – L (3×3) - { - colour: "#f0a000", - shape: [ - [0, 0, 7], - [7, 7, 7], - [0, 0, 0], - ], - }, -]; - -/** Map colour index → hex string. Index 0 = empty. */ -const COLOURS: string[] = [ - "transparent", - ...PIECE_DEFS.map((p) => p.colour), -]; - -// ─── Matrix helpers ─────────────────────────────────────────────────────────── - -function cloneMatrix(m: Shape): Shape { - return m.map((row) => [...row]); -} - -/** Rotate a square matrix 90 degrees clockwise. */ -function rotateCW(m: Shape): Shape { - const N = m.length; - const r: Shape = Array.from({ length: N }, () => Array(N).fill(0)); - for (let y = 0; y < N; y++) - for (let x = 0; x < N; x++) - r[x][N - 1 - y] = m[y][x]; - return r; -} - -/** Rotate a square matrix 90 degrees counter-clockwise. */ -function rotateCCW(m: Shape): Shape { - const N = m.length; - const r: Shape = Array.from({ length: N }, () => Array(N).fill(0)); - for (let y = 0; y < N; y++) - for (let x = 0; x < N; x++) - r[N - 1 - x][y] = m[y][x]; - return r; -} - -// ─── 7-bag randomiser ───────────────────────────────────────────────────────── - -class Bag { - private queue: number[] = []; - - next(): number { - if (this.queue.length === 0) this.refill(); - return this.queue.shift()!; - } - - private refill(): void { - const bag = [0, 1, 2, 3, 4, 5, 6]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - this.queue.push(...bag); - } -} - -// ─── Piece (active) ─────────────────────────────────────────────────────────── - -interface ActivePiece { - shape: Shape; - typeIdx: number; // 0-based index into PIECE_DEFS - x: number; // board column of top-left corner of bounding box - y: number; // board row (may be negative during spawn) -} - -function makePiece(typeIdx: number): ActivePiece { - const shape = cloneMatrix(PIECE_DEFS[typeIdx].shape); - // Offset y so the first non-empty row sits at board row 0 - let firstFilledRow = 0; - for (let r = 0; r < shape.length; r++) { - if (shape[r].some((v) => v !== 0)) { firstFilledRow = r; break; } - } - const x = Math.floor((COLS - shape[0].length) / 2); - return { shape, typeIdx, x, y: -firstFilledRow }; -} - -// ─── Board ──────────────────────────────────────────────────────────────────── - -type Board = number[][]; - -function makeBoard(): Board { - return Array.from({ length: ROWS }, () => Array(COLS).fill(0)); -} - -// ─── Collision ──────────────────────────────────────────────────────────────── - -function collides(board: Board, shape: Shape, ox: number, oy: number): boolean { - for (let y = 0; y < shape.length; y++) { - for (let x = 0; x < shape[y].length; x++) { - if (!shape[y][x]) continue; - const bx = ox + x; - const by = oy + y; - if (bx < 0 || bx >= COLS) return true; - if (by >= ROWS) return true; - if (by >= 0 && board[by][bx]) return true; - } - } - return false; -} - -// ─── Wall-kick offsets (simple SRS-inspired) ────────────────────────────────── - -/** - * For each rotation attempt we try these (dx, dy) offsets in order. - * The first one that results in no collision wins. - */ -const KICKS_NORMAL: [number, number][] = [ - [ 0, 0], - [-1, 0], - [ 1, 0], - [ 0, -1], - [-1, -1], - [ 1, -1], - [-2, 0], - [ 2, 0], -]; - -// ─── Rendering helpers ──────────────────────────────────────────────────────── - -function drawBlock( - ctx: CanvasRenderingContext2D, - col: number, - row: number, - colour: string, - size: number, - alpha: number = 1, -): void { - if (alpha <= 0) return; - ctx.globalAlpha = alpha; - - const x = col * size; - const y = row * size; - const inset = 1; - - // Fill - ctx.fillStyle = colour; - ctx.fillRect(x, y, size, size); - - // Top / left highlight - ctx.fillStyle = "rgba(255,255,255,0.25)"; - ctx.fillRect(x + inset, y + inset, size - inset * 2, 3); - ctx.fillRect(x + inset, y + inset, 3, size - inset * 2); - - // Bottom / right shadow - ctx.fillStyle = "rgba(0,0,0,0.30)"; - ctx.fillRect(x + inset, y + size - inset - 3, size - inset * 2, 3); - ctx.fillRect(x + size - inset - 3, y + inset, 3, size - inset * 2); - - // Outer border - ctx.strokeStyle = "rgba(0,0,0,0.45)"; - ctx.lineWidth = 0.75; - ctx.strokeRect(x + 0.5, y + 0.5, size - 1, size - 1); - - ctx.globalAlpha = 1; -} - -// ─── Game ───────────────────────────────────────────────────────────────────── - -type GameStatus = "idle" | "playing" | "paused" | "over"; - -class TetrisGame { - // DOM - private readonly cvs: HTMLCanvasElement; - private readonly ctx: CanvasRenderingContext2D; - private readonly nextCvs: HTMLCanvasElement; - private readonly nextCtx: CanvasRenderingContext2D; - private readonly scoreEl: HTMLElement; - private readonly levelEl: HTMLElement; - private readonly linesEl: HTMLElement; - private readonly overlay: HTMLElement; - private readonly oTitle: HTMLElement; - private readonly oSub: HTMLElement; - private readonly oScore: HTMLElement; - private readonly oBtn: HTMLElement; - - // State - private board: Board = makeBoard(); - private piece: ActivePiece | null = null; - private nextTypeIdx: number = 0; - private score: number = 0; - private level: number = 1; - private linesCleared: number = 0; - private status: GameStatus = "idle"; - - // Timing - private dropAccum: number = 0; // ms accumulated since last gravity drop - private lastTs: number = 0; - private rafId: number = 0; - - // Flash effect on line clear - private flashFrames: number = 0; - - // Randomiser - private readonly bag = new Bag(); - - constructor() { - this.cvs = document.getElementById("game-canvas") as HTMLCanvasElement; - this.ctx = this.cvs.getContext("2d")!; - this.nextCvs = document.getElementById("next-canvas") as HTMLCanvasElement; - this.nextCtx = this.nextCvs.getContext("2d")!; - this.scoreEl = document.getElementById("score")!; - this.levelEl = document.getElementById("level")!; - this.linesEl = document.getElementById("lines")!; - this.overlay = document.getElementById("overlay")!; - this.oTitle = document.getElementById("overlay-title")!; - this.oSub = document.getElementById("overlay-sub")!; - this.oScore = document.getElementById("overlay-score")!; - this.oBtn = document.getElementById("overlay-btn")!; - - document.addEventListener("keydown", this.onKey.bind(this)); - document.getElementById("btn-new-game")!.addEventListener("click", () => this.newGame()); - this.oBtn.addEventListener("click", () => this.newGame()); - - // Initial render so the board is visible before the game starts - this.drawBoard(); - this.drawNext(); - } - - // ── Public actions ────────────────────────────────────────────────────────── - - private newGame(): void { - this.board = makeBoard(); - this.score = 0; - this.level = 1; - this.linesCleared = 0; - this.dropAccum = 0; - this.flashFrames = 0; - this.status = "playing"; - - this.nextTypeIdx = this.bag.next(); - this.spawnPiece(); - this.updateHUD(); - this.hideOverlay(); - - cancelAnimationFrame(this.rafId); - this.lastTs = performance.now(); - this.rafId = requestAnimationFrame(this.loop.bind(this)); - } - - private togglePause(): void { - if (this.status === "playing") { - this.status = "paused"; - this.showOverlay("PAUSED", "Press P or Esc to resume", false); - } else if (this.status === "paused") { - this.status = "playing"; - this.lastTs = performance.now(); // avoid time-jump after un-pause - this.hideOverlay(); - } - } - - // ── Keyboard ──────────────────────────────────────────────────────────────── - - private onKey(e: KeyboardEvent): void { - // Start / resume with Space or Enter from idle / game-over - if (this.status === "idle" || this.status === "over") { - if (e.code === "Space" || e.code === "Enter") { e.preventDefault(); this.newGame(); } - return; - } - - if (e.code === "KeyP" || e.code === "Escape") { - e.preventDefault(); - this.togglePause(); - return; - } - - if (this.status !== "playing") return; - - switch (e.code) { - case "ArrowLeft": e.preventDefault(); this.tryMove(-1, 0); break; - case "ArrowRight": e.preventDefault(); this.tryMove( 1, 0); break; - case "ArrowDown": e.preventDefault(); this.softDrop(); break; - case "ArrowUp": e.preventDefault(); this.rotate(true); break; - case "KeyZ": e.preventDefault(); this.rotate(false); break; - case "KeyX": e.preventDefault(); this.rotate(true); break; - case "Space": e.preventDefault(); this.hardDrop(); break; - } - } - - // ── Piece movement ────────────────────────────────────────────────────────── - - private tryMove(dx: number, dy: number): boolean { - if (!this.piece) return false; - const nx = this.piece.x + dx; - const ny = this.piece.y + dy; - if (collides(this.board, this.piece.shape, nx, ny)) return false; - this.piece.x = nx; - this.piece.y = ny; - return true; - } - - private rotate(cw: boolean): void { - if (!this.piece) return; - const rotated = cw ? rotateCW(this.piece.shape) : rotateCCW(this.piece.shape); - for (const [dx, dy] of KICKS_NORMAL) { - if (!collides(this.board, rotated, this.piece.x + dx, this.piece.y + dy)) { - this.piece.shape = rotated; - this.piece.x += dx; - this.piece.y += dy; - return; - } - } - } - - private softDrop(): void { - if (this.tryMove(0, 1)) { - this.score += 1; - this.dropAccum = 0; // reset gravity timer on manual drop - } else { - this.lockPiece(); - } - } - - private hardDrop(): void { - if (!this.piece) return; - let cells = 0; - while (this.tryMove(0, 1)) cells++; - this.score += cells * 2; - this.lockPiece(); - } - - // ── Gravity loop ──────────────────────────────────────────────────────────── - - private loop(ts: number): void { - const dt = ts - this.lastTs; - this.lastTs = ts; - - if (this.status === "playing") { - if (this.flashFrames > 0) { - this.flashFrames -= dt; - } else { - this.dropAccum += dt; - const interval = this.dropInterval(); - while (this.dropAccum >= interval) { - this.dropAccum -= interval; - this.gravityDrop(); - } - } - this.render(); - } - - this.rafId = requestAnimationFrame(this.loop.bind(this)); - } - - /** Milliseconds between automatic gravity drops for the current level. */ - private dropInterval(): number { - // Roughly follows Tetris guideline gravity curve - return Math.max(50, 1000 * Math.pow(0.85, this.level - 1)); - } - - private gravityDrop(): void { - if (!this.tryMove(0, 1)) { - this.lockPiece(); - } - } - - // ── Lock & clear ──────────────────────────────────────────────────────────── - - private lockPiece(): void { - if (!this.piece) return; - const { shape, typeIdx, x, y } = this.piece; - - let lockedAboveBoard = false; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (!shape[r][c]) continue; - const by = y + r; - const bx = x + c; - if (by < 0) { lockedAboveBoard = true; continue; } - this.board[by][bx] = typeIdx + 1; // colour index 1-7 - } - } - - this.piece = null; - - if (lockedAboveBoard) { - this.gameOver(); - return; - } - - this.clearLines(); - this.spawnPiece(); - - // Check for immediate collision after spawn → game over - if (this.piece && collides(this.board, this.piece.shape, this.piece.x, this.piece.y)) { - this.gameOver(); - } - } - - private clearLines(): void { - let count = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (this.board[r].every((v) => v !== 0)) { - this.board.splice(r, 1); - this.board.unshift(Array(COLS).fill(0)); - count++; - r++; // recheck same index after splice - } - } - if (count === 0) return; - - this.linesCleared += count; - this.score += LINE_SCORES[count] * this.level; - - const newLevel = Math.floor(this.linesCleared / LINES_PER_LEVEL) + 1; - if (newLevel > this.level) this.level = newLevel; - - this.updateHUD(); - this.flashFrames = 180; // ~180 ms flash pause - } - - // ── Spawn ──────────────────────────────────────────────────────────────────── - - private spawnPiece(): void { - this.piece = makePiece(this.nextTypeIdx); - this.nextTypeIdx = this.bag.next(); - this.dropAccum = 0; - } - - // ── Ghost piece ────────────────────────────────────────────────────────────── - - private ghostRow(): number { - if (!this.piece) return 0; - let gy = this.piece.y; - while (!collides(this.board, this.piece.shape, this.piece.x, gy + 1)) gy++; - return gy; - } - - // ── Game over ──────────────────────────────────────────────────────────────── - - private gameOver(): void { - this.status = "over"; - this.showOverlay("GAME OVER", "Press Enter or Space to retry", true); - } - - // ── HUD ────────────────────────────────────────────────────────────────────── - - private updateHUD(): void { - this.scoreEl.textContent = this.score.toLocaleString(); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.linesCleared); - } - - // ── Overlay helpers ────────────────────────────────────────────────────────── - - private showOverlay(title: string, sub: string, showScore: boolean): void { - this.oTitle.textContent = title; - this.oSub.textContent = sub; - - if (showScore) { - this.oScore.textContent = `Score: ${this.score.toLocaleString()}`; - this.oScore.classList.remove("hidden"); - } else { - this.oScore.classList.add("hidden"); - } - - if (title === "PAUSED") { - this.oBtn.textContent = "Resume"; - } else if (title === "GAME OVER") { - this.oBtn.textContent = "Play Again"; - } else { - this.oBtn.textContent = "Start Game"; - } - - this.overlay.classList.remove("hidden"); - } - - private hideOverlay(): void { - this.overlay.classList.add("hidden"); - } - - // ── Rendering ──────────────────────────────────────────────────────────────── - - private render(): void { - this.drawBoard(); - this.drawNext(); - } - - private drawBoard(): void { - const ctx = this.ctx; - const W = COLS * BLOCK; - const H = ROWS * BLOCK; - - // Background - ctx.fillStyle = "#080810"; - ctx.fillRect(0, 0, W, H); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - ctx.lineWidth = 0.5; - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, H); ctx.stroke(); - } - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(W, r * BLOCK); ctx.stroke(); - } - - // Locked cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const v = this.board[r][c]; - if (v) drawBlock(ctx, c, r, COLOURS[v], BLOCK); - } - } - - // Ghost piece - if (this.piece) { - const gy = this.ghostRow(); - const colour = COLOURS[this.piece.typeIdx + 1]; - for (let r = 0; r < this.piece.shape.length; r++) { - for (let c = 0; c < this.piece.shape[r].length; c++) { - if (!this.piece.shape[r][c]) continue; - const br = gy + r; - const bc = this.piece.x + c; - if (br < 0 || br >= ROWS) continue; - // Draw ghost as a dim outlined block - ctx.globalAlpha = 0.22; - ctx.fillStyle = colour; - ctx.fillRect(bc * BLOCK, br * BLOCK, BLOCK, BLOCK); - ctx.globalAlpha = 0.5; - ctx.strokeStyle = colour; - ctx.lineWidth = 1.5; - ctx.strokeRect(bc * BLOCK + 1, br * BLOCK + 1, BLOCK - 2, BLOCK - 2); - ctx.globalAlpha = 1; - } - } - } - - // Active piece - if (this.piece) { - const colour = COLOURS[this.piece.typeIdx + 1]; - for (let r = 0; r < this.piece.shape.length; r++) { - for (let c = 0; c < this.piece.shape[r].length; c++) { - if (!this.piece.shape[r][c]) continue; - const br = this.piece.y + r; - const bc = this.piece.x + c; - if (br < 0) continue; // still above the visible board - drawBlock(ctx, bc, br, colour, BLOCK); - } - } - } - } - - private drawNext(): void { - const ctx = this.nextCtx; - const cvsW = this.nextCvs.width; - const cvsH = this.nextCvs.height; - - ctx.fillStyle = "#080810"; - ctx.fillRect(0, 0, cvsW, cvsH); - - const def = PIECE_DEFS[this.nextTypeIdx]; - const shape = def.shape; - const colour = def.colour; - - // Count actual filled cols / rows for centring - const cols = shape[0].length; - const rows = shape.length; - const ox = Math.floor((cvsW / NEXT_BLOCK - cols) / 2); - const oy = Math.floor((cvsH / NEXT_BLOCK - rows) / 2); - - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - if (!shape[r][c]) continue; - drawBlock(ctx, ox + c, oy + r, colour, NEXT_BLOCK); - } - } - } -} - -// ─── Bootstrap ──────────────────────────────────────────────────────────────── - -document.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/style.css b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/style.css @@ -1,236 +0,0 @@ -/* ─── Reset & Base ─────────────────────────────────────────────────────────── */ -*, *::before, *::after { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -body { - background: #0d0d1a; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - min-height: 100vh; - font-family: 'Segoe UI', Arial, sans-serif; - color: #e0e0e0; - user-select: none; -} - -h1.game-title { - font-size: 2.2rem; - letter-spacing: 0.3em; - color: #00f0f0; - text-shadow: 0 0 16px #00f0f080, 0 0 40px #00f0f040; - margin-bottom: 18px; - text-transform: uppercase; -} - -/* ─── Layout ────────────────────────────────────────────────────────────────── */ -.game-wrapper { - display: flex; - gap: 20px; - align-items: flex-start; -} - -/* ─── Main Canvas ───────────────────────────────────────────────────────────── */ -#game-canvas { - display: block; - border: 2px solid #2a2a4a; - box-shadow: 0 0 30px #00f0f030, 0 0 2px #00f0f080; - background: #080810; -} - -/* ─── Sidebar ───────────────────────────────────────────────────────────────── */ -.sidebar { - display: flex; - flex-direction: column; - gap: 12px; - width: 148px; - flex-shrink: 0; -} - -/* ─── Info Panels ───────────────────────────────────────────────────────────── */ -.panel { - background: #111128; - border: 1px solid #2a2a4a; - border-radius: 10px; - padding: 10px 14px; - text-align: center; -} - -.panel-label { - font-size: 0.65rem; - letter-spacing: 0.18em; - color: #5a5a8a; - text-transform: uppercase; - margin-bottom: 4px; -} - -.panel-value { - font-size: 1.6rem; - font-weight: 700; - color: #00f0f0; - text-shadow: 0 0 10px #00f0f060; - line-height: 1.1; - min-height: 1.8rem; -} - -/* ─── Next Piece Preview ────────────────────────────────────────────────────── */ -.next-panel { - background: #111128; - border: 1px solid #2a2a4a; - border-radius: 10px; - padding: 10px 14px; - text-align: center; -} - -.next-panel .panel-label { - font-size: 0.65rem; - letter-spacing: 0.18em; - color: #5a5a8a; - text-transform: uppercase; - margin-bottom: 8px; -} - -#next-canvas { - display: block; - margin: 0 auto; - background: #080810; - border-radius: 4px; - border: 1px solid #1e1e38; -} - -/* ─── Controls Reference ────────────────────────────────────────────────────── */ -.controls-panel { - background: #111128; - border: 1px solid #2a2a4a; - border-radius: 10px; - padding: 10px 14px; - font-size: 0.72rem; - color: #6a6a9a; -} - -.controls-panel .panel-label { - font-size: 0.65rem; - letter-spacing: 0.18em; - color: #5a5a8a; - text-transform: uppercase; - margin-bottom: 8px; -} - -.control-row { - display: flex; - justify-content: space-between; - margin: 4px 0; - gap: 6px; -} - -.key { - background: #1e1e38; - border: 1px solid #3a3a6a; - border-radius: 4px; - padding: 1px 5px; - font-size: 0.68rem; - color: #a0a0d0; - white-space: nowrap; - font-family: monospace; -} - -.action { - color: #8a8ab0; - font-size: 0.68rem; -} - -/* ─── Buttons ───────────────────────────────────────────────────────────────── */ -.btn { - background: #e94560; - color: #fff; - border: none; - padding: 10px 16px; - border-radius: 8px; - cursor: pointer; - font-size: 0.85rem; - font-weight: 700; - letter-spacing: 0.06em; - text-transform: uppercase; - width: 100%; - transition: background 0.15s, transform 0.1s, box-shadow 0.15s; - box-shadow: 0 0 10px #e9456040; -} - -.btn:hover { - background: #ff5575; - box-shadow: 0 0 18px #e9456070; - transform: translateY(-1px); -} - -.btn:active { - transform: translateY(0); -} - -/* ─── Overlay ───────────────────────────────────────────────────────────────── */ -.overlay { - position: fixed; - inset: 0; - background: rgba(0, 0, 0, 0.75); - display: flex; - justify-content: center; - align-items: center; - z-index: 100; - backdrop-filter: blur(3px); -} - -.overlay.hidden { - display: none; -} - -.overlay-box { - background: #111128; - border: 2px solid #e94560; - border-radius: 16px; - padding: 44px 48px; - text-align: center; - box-shadow: 0 0 40px #e9456040; - min-width: 260px; -} - -.overlay-box h2 { - font-size: 2.4rem; - font-weight: 900; - letter-spacing: 0.12em; - color: #00f0f0; - text-shadow: 0 0 20px #00f0f0, 0 0 50px #00f0f040; - margin-bottom: 12px; - text-transform: uppercase; -} - -.overlay-box .sub { - font-size: 0.9rem; - color: #8888aa; - margin-bottom: 8px; -} - -.overlay-box .final-score { - font-size: 1.5rem; - color: #f0f000; - text-shadow: 0 0 10px #f0f00060; - font-weight: 700; - margin-bottom: 28px; -} - -.overlay-box .btn { - width: auto; - padding: 12px 36px; - font-size: 0.9rem; -} - -/* ─── Line-clear flash ──────────────────────────────────────────────────────── */ -@keyframes flash { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.15; } -} - -.flash { - animation: flash 0.18s ease-in-out 2; -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "None", - "lib": ["ES2017", "DOM"], - "outFile": "dist/tetris.js", - "rootDir": "src", - "strict": true, - "noImplicitAny": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "sourceMap": true - }, - "include": ["src/**/*.ts"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-orggsowe", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-orggsowe", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-orggsowe", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:46:46.139Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-nlkj6_tk", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-nlkj6_tk", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-nlkj6_tk", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,60 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:32:42.236Z", - "formats": { - "json": { - "sources": { - "tsconfig.json": { - "lines": 14, - "tokens": 94, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 34, - "tokens": 219, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 34, - "tokens": 219, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/tsconfig.json @@ -1,15 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "None", - "lib": ["ES2020", "DOM"], - "outFile": "dist/game.js", - "rootDir": "src", - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true - }, - "include": ["src/**/*"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2819 +0,0 @@ -{ - "name": "loop-bench-732u9ti4", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-732u9ti4", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/package.json @@ -1,22 +0,0 @@ -{ - "name": "loop-bench-732u9ti4", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,161 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:41:16.145Z", - "formats": { - "typescript": { - "sources": { - "src/types.ts": { - "lines": 24, - "tokens": 187, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/tetromino.ts": { - "lines": 151, - "tokens": 1870, - "sources": 1, - "clones": 2, - "duplicatedLines": 12, - "duplicatedTokens": 270, - "percentage": 7.95, - "percentageTokens": 14.44, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/renderer.ts": { - "lines": 238, - "tokens": 2562, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/constants.ts": { - "lines": 65, - "tokens": 1286, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/board.ts": { - "lines": 62, - "tokens": 767, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 540, - "tokens": 6672, - "sources": 5, - "clones": 1, - "duplicatedLines": 6, - "duplicatedTokens": 135, - "percentage": 1.11, - "percentageTokens": 2.02, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 561, - "tokens": 6804, - "sources": 6, - "clones": 1, - "duplicatedLines": 6, - "duplicatedTokens": 135, - "percentage": 1.07, - "percentageTokens": 1.98, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "typescript", - "lines": 7, - "fragment": "(matrix: Matrix): Matrix {\n const N = matrix.length;\n const M = matrix[0].length;\n const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < M; c++) {\n result[M", - "tokens": 0, - "firstFile": { - "name": "src/tetromino.ts", - "start": 58, - "end": 64, - "startLoc": { - "line": 58, - "column": 16, - "position": 612 - }, - "endLoc": { - "line": 64, - "column": 2, - "position": 747 - } - }, - "secondFile": { - "name": "src/tetromino.ts", - "start": 45, - "end": 51, - "startLoc": { - "line": 45, - "column": 15, - "position": 430 - }, - "endLoc": { - "line": 51, - "column": 2, - "position": 565 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/board.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/board.ts @@ -1,63 +0,0 @@ -import { Matrix, Piece } from './types'; -import { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants'; -import { typeToId, hasCollision } from './tetromino'; - -/** Create an empty board (ROWS × COLS filled with 0) */ -export function createBoard(): number[][] { - return Array.from({ length: ROWS }, () => Array(COLS).fill(0)); -} - -/** Merge (lock) a piece into the board, mutating it in place */ -export function mergePiece(board: number[][], piece: Piece): void { - const id = typeToId(piece.type); - for (let r = 0; r < piece.matrix.length; r++) { - for (let c = 0; c < piece.matrix[r].length; c++) { - if (!piece.matrix[r][c]) continue; - const boardY = piece.pos.y + r; - const boardX = piece.pos.x + c; - if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) { - board[boardY][boardX] = id; - } - } - } -} - -/** Clear completed lines and return count of cleared lines */ -export function clearLines(board: number[][]): number { - let cleared = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (board[r].every(cell => cell !== 0)) { - board.splice(r, 1); - board.unshift(Array(COLS).fill(0)); - cleared++; - r++; // re-check the same row index after shifting down - } - } - return cleared; -} - -/** Calculate score delta for cleared lines at a given level */ -export function calcScore(linesCleared: number, level: number): number { - return (LINE_SCORES[linesCleared] ?? 0) * level; -} - -/** Calculate new level given total lines cleared */ -export function calcLevel(totalLines: number): number { - return Math.floor(totalLines / LINES_PER_LEVEL) + 1; -} - -/** Compute the ghost piece: drop it as far as possible */ -export function getGhostPiece(piece: Piece, board: number[][]): Piece { - let ghost = { ...piece, pos: { ...piece.pos } }; - while (true) { - const nextPos = { x: ghost.pos.x, y: ghost.pos.y + 1 }; - if (hasCollision(ghost.matrix, nextPos, board)) break; - ghost = { ...ghost, pos: nextPos }; - } - return ghost; -} - -/** Check if any cell is above row 0 (block-out = game over) */ -export function isTopOut(board: number[][]): boolean { - return board[0].some(cell => cell !== 0); -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/constants.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/constants.ts @@ -1,66 +0,0 @@ -export const COLS = 10; -export const ROWS = 20; -export const BLOCK_SIZE = 30; -export const PREVIEW_BLOCK_SIZE = 24; - -// Tetromino colors (index 0 = empty) -export const COLORS: readonly string[] = [ - 'transparent', // 0: empty - '#00F0F0', // 1: I — cyan - '#F0F000', // 2: O — yellow - '#A000F0', // 3: T — purple - '#00F000', // 4: S — green - '#F00000', // 5: Z — red - '#0000F0', // 6: J — blue - '#F0A000', // 7: L — orange -]; - -export const TYPE_TO_ID: Record<string, number> = { - I: 1, O: 2, T: 3, S: 4, Z: 5, J: 6, L: 7, -}; - -// Points awarded per line clear at level 1 (multiply by level) -export const LINE_SCORES: readonly number[] = [0, 100, 300, 500, 800]; - -// Lines needed per level -export const LINES_PER_LEVEL = 10; - -// Frames per gravity drop at each level (60 fps reference) -export const GRAVITY_FRAMES: readonly number[] = [ - 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 1–10 - 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, // levels 11–20 - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, // levels 21–30 -]; - -export const LOCK_DELAY_MS = 500; -export const MAX_LOCK_MOVES = 15; - -// DAS (Delayed Auto Shift) settings -export const DAS_DELAY_MS = 167; // delay before auto-repeat -export const DAS_REPEAT_MS = 33; // repeat interval (~30 Hz) - -// SRS wall kick data for JLSTZ pieces -// Each entry: [dx, dy] in screen coords (y increases downward) -// Key format: "fromRotation->toRotation" -export const JLSTZ_KICKS: Record<string, [number, number][]> = { - '0->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]], - '1->0': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]], - '1->2': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]], - '2->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]], - '2->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]], - '3->2': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]], - '3->0': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]], - '0->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]], -}; - -// SRS wall kick data for I piece -export const I_KICKS: Record<string, [number, number][]> = { - '0->1': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]], - '1->0': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]], - '1->2': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]], - '2->1': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]], - '2->3': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]], - '3->2': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]], - '3->0': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]], - '0->3': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]], -}; diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/renderer.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/renderer.ts @@ -1,239 +0,0 @@ -import { Piece, TetrominoType } from './types'; -import { - COLS, ROWS, BLOCK_SIZE, PREVIEW_BLOCK_SIZE, - COLORS, TYPE_TO_ID, -} from './constants'; -import { getGhostPiece } from './board'; - -const BORDER_RADIUS = 3; -const GRID_COLOR = 'rgba(255,255,255,0.04)'; -const EMPTY_CELL_COLOR = '#0d0d1a'; - -// ── helpers ────────────────────────────────────────────────────────────────── - -function drawBlock( - ctx: CanvasRenderingContext2D, - x: number, - y: number, - size: number, - color: string, - alpha = 1, -): void { - ctx.globalAlpha = alpha; - // Main fill - ctx.fillStyle = color; - ctx.beginPath(); - ctx.roundRect(x + 1, y + 1, size - 2, size - 2, BORDER_RADIUS); - ctx.fill(); - - // Highlight (top-left glint) - const grad = ctx.createLinearGradient(x, y, x + size, y + size); - grad.addColorStop(0, 'rgba(255,255,255,0.35)'); - grad.addColorStop(1, 'rgba(0,0,0,0.25)'); - ctx.fillStyle = grad; - ctx.beginPath(); - ctx.roundRect(x + 1, y + 1, size - 2, size - 2, BORDER_RADIUS); - ctx.fill(); - - ctx.globalAlpha = 1; -} - -function drawGhostBlock( - ctx: CanvasRenderingContext2D, - x: number, - y: number, - size: number, - color: string, -): void { - ctx.globalAlpha = 1; - ctx.strokeStyle = color; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.roundRect(x + 2, y + 2, size - 4, size - 4, BORDER_RADIUS); - ctx.stroke(); -} - -// ── main board renderer ─────────────────────────────────────────────────────── - -export class Renderer { - private ctx: CanvasRenderingContext2D; - private holdCtx: CanvasRenderingContext2D; - private nextCtx: CanvasRenderingContext2D; - - constructor( - canvas: HTMLCanvasElement, - holdCanvas: HTMLCanvasElement, - nextCanvas: HTMLCanvasElement, - ) { - this.ctx = canvas.getContext('2d')!; - this.holdCtx = holdCanvas.getContext('2d')!; - this.nextCtx = nextCanvas.getContext('2d')!; - } - - // ── board ──────────────────────────────────────────────────────────────── - - drawBoard( - board: number[][], - currentPiece: Piece | null, - heldPiece: Piece | null, - nextPiece: Piece | null, - canHold: boolean, - ): void { - const ctx = this.ctx; - ctx.clearRect(0, 0, COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE); - - // Background - ctx.fillStyle = EMPTY_CELL_COLOR; - ctx.fillRect(0, 0, COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE); - - // Grid lines - ctx.strokeStyle = GRID_COLOR; - ctx.lineWidth = 1; - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * BLOCK_SIZE, 0); - ctx.lineTo(c * BLOCK_SIZE, ROWS * BLOCK_SIZE); - ctx.stroke(); - } - for (let r = 0; r <= ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * BLOCK_SIZE); - ctx.lineTo(COLS * BLOCK_SIZE, r * BLOCK_SIZE); - ctx.stroke(); - } - - // Placed cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const id = board[r][c]; - if (id) { - drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[id]); - } - } - } - - // Ghost piece - if (currentPiece) { - const ghost = getGhostPiece(currentPiece, board); - if (ghost.pos.y !== currentPiece.pos.y) { - const color = COLORS[TYPE_TO_ID[currentPiece.type]]; - for (let r = 0; r < ghost.matrix.length; r++) { - for (let c = 0; c < ghost.matrix[r].length; c++) { - if (!ghost.matrix[r][c]) continue; - const px = (ghost.pos.x + c) * BLOCK_SIZE; - const py = (ghost.pos.y + r) * BLOCK_SIZE; - if (py >= 0) drawGhostBlock(ctx, px, py, BLOCK_SIZE, color); - } - } - } - } - - // Current (active) piece - if (currentPiece) { - const color = COLORS[TYPE_TO_ID[currentPiece.type]]; - for (let r = 0; r < currentPiece.matrix.length; r++) { - for (let c = 0; c < currentPiece.matrix[r].length; c++) { - if (!currentPiece.matrix[r][c]) continue; - const px = (currentPiece.pos.x + c) * BLOCK_SIZE; - const py = (currentPiece.pos.y + r) * BLOCK_SIZE; - if (py >= 0) drawBlock(ctx, px, py, BLOCK_SIZE, color); - } - } - } - - // Side panels - this.drawPreview(this.holdCtx, heldPiece, canHold); - this.drawPreview(this.nextCtx, nextPiece, true); - } - - // ── piece preview (hold / next) ─────────────────────────────────────────── - - private drawPreview( - ctx: CanvasRenderingContext2D, - piece: Piece | null, - active: boolean, - ): void { - const W = ctx.canvas.width; - const H = ctx.canvas.height; - ctx.clearRect(0, 0, W, H); - ctx.fillStyle = '#0d0d1a'; - ctx.fillRect(0, 0, W, H); - - if (!piece) return; - - const bs = PREVIEW_BLOCK_SIZE; - const mat = piece.matrix; - const cols = mat[0].length; - const rows = mat.length; - - // Find actual bounding box of filled cells - let minR = rows, maxR = -1, minC = cols, maxC = -1; - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - if (mat[r][c]) { - minR = Math.min(minR, r); - maxR = Math.max(maxR, r); - minC = Math.min(minC, c); - maxC = Math.max(maxC, c); - } - } - } - if (maxR < 0) return; - - const spanC = maxC - minC + 1; - const spanR = maxR - minR + 1; - const offsetX = Math.floor((W - spanC * bs) / 2); - const offsetY = Math.floor((H - spanR * bs) / 2); - - const color = COLORS[TYPE_TO_ID[piece.type]]; - ctx.globalAlpha = active ? 1 : 0.35; - - for (let r = minR; r <= maxR; r++) { - for (let c = minC; c <= maxC; c++) { - if (!mat[r][c]) continue; - const px = offsetX + (c - minC) * bs; - const py = offsetY + (r - minR) * bs; - drawBlock(ctx, px, py, bs, color); - } - } - ctx.globalAlpha = 1; - } - - // ── overlays ────────────────────────────────────────────────────────────── - - drawOverlay( - text: string, - subText: string, - color = '#00f0f0', - ): void { - const ctx = this.ctx; - const W = COLS * BLOCK_SIZE; - const H = ROWS * BLOCK_SIZE; - - ctx.fillStyle = 'rgba(0, 0, 0, 0.75)'; - ctx.fillRect(0, 0, W, H); - - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - - ctx.fillStyle = color; - ctx.font = `bold 36px 'Courier New', monospace`; - ctx.fillText(text, W / 2, H / 2 - 28); - - ctx.fillStyle = '#aaa'; - ctx.font = `16px 'Courier New', monospace`; - - const lines = subText.split('\n'); - lines.forEach((line, i) => { - ctx.fillText(line, W / 2, H / 2 + 18 + i * 22); - }); - } - - drawLineClearFlash(rows: number[]): void { - const ctx = this.ctx; - ctx.fillStyle = 'rgba(255, 255, 255, 0.6)'; - for (const r of rows) { - ctx.fillRect(0, r * BLOCK_SIZE, COLS * BLOCK_SIZE, BLOCK_SIZE); - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/tetromino.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/tetromino.ts @@ -1,152 +0,0 @@ -import { Matrix, Piece, Position, TetrominoType } from './types'; -import { COLS, I_KICKS, JLSTZ_KICKS, TYPE_TO_ID } from './constants'; - -// Canonical rotation state 0 matrices for each piece type -const PIECE_MATRICES: Record<TetrominoType, Matrix> = { - I: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - O: [ - [0, 1, 1, 0], - [0, 1, 1, 0], - [0, 0, 0, 0], - ], - T: [ - [0, 1, 0], - [1, 1, 1], - [0, 0, 0], - ], - S: [ - [0, 1, 1], - [1, 1, 0], - [0, 0, 0], - ], - Z: [ - [1, 1, 0], - [0, 1, 1], - [0, 0, 0], - ], - J: [ - [1, 0, 0], - [1, 1, 1], - [0, 0, 0], - ], - L: [ - [0, 0, 1], - [1, 1, 1], - [0, 0, 0], - ], -}; - -/** Rotate a matrix 90° clockwise */ -export function rotateMatrixCW(matrix: Matrix): Matrix { - const N = matrix.length; - const M = matrix[0].length; - const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0)); - for (let r = 0; r < N; r++) { - for (let c = 0; c < M; c++) { - result[c][N - 1 - r] = matrix[r][c]; - } - } - return result; -} - -/** Rotate a matrix 90° counter-clockwise */ -export function rotateMatrixCCW(matrix: Matrix): Matrix { - const N = matrix.length; - const M = matrix[0].length; - const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0)); - for (let r = 0; r < N; r++) { - for (let c = 0; c < M; c++) { - result[M - 1 - c][r] = matrix[r][c]; - } - } - return result; -} - -/** Build the rotation-state matrix for a piece at a given rotation (0–3) */ -export function buildMatrix(type: TetrominoType, rotation: number): Matrix { - let mat = PIECE_MATRICES[type].map(row => [...row]); - for (let i = 0; i < (rotation % 4 + 4) % 4; i++) { - mat = rotateMatrixCW(mat); - } - return mat; -} - -/** Create a new piece at its spawn position */ -export function createPiece(type: TetrominoType): Piece { - const matrix = buildMatrix(type, 0); - const spawnX = Math.floor((COLS - matrix[0].length) / 2); - // Spawn above visible field (y = -1 for pieces that appear at top) - const spawnY = type === 'I' ? -1 : 0; - return { type, matrix, pos: { x: spawnX, y: spawnY }, rotation: 0 }; -} - -/** - * Try to rotate a piece clockwise or counter-clockwise. - * Returns the new Piece if a valid position is found, or null on failure. - */ -export function tryRotate( - piece: Piece, - direction: 'CW' | 'CCW', - board: number[][] -): Piece | null { - const newRotation = direction === 'CW' - ? (piece.rotation + 1) % 4 - : (piece.rotation + 3) % 4; - - const newMatrix = direction === 'CW' - ? rotateMatrixCW(piece.matrix) - : rotateMatrixCCW(piece.matrix); - - const kickKey = `${piece.rotation}->${newRotation}`; - const kickTable = piece.type === 'I' ? I_KICKS : JLSTZ_KICKS; - const kicks = piece.type === 'O' ? [[0, 0]] : (kickTable[kickKey] ?? [[0, 0]]); - - for (const [dx, dy] of kicks) { - const testPos: Position = { x: piece.pos.x + dx, y: piece.pos.y + dy }; - if (!hasCollision(newMatrix, testPos, board)) { - return { ...piece, matrix: newMatrix, pos: testPos, rotation: newRotation }; - } - } - return null; // rotation failed -} - -/** Check if a matrix at a given position collides with the board or walls */ -export function hasCollision(matrix: Matrix, pos: Position, board: number[][]): boolean { - for (let r = 0; r < matrix.length; r++) { - for (let c = 0; c < matrix[r].length; c++) { - if (!matrix[r][c]) continue; - const boardX = pos.x + c; - const boardY = pos.y + r; - if (boardX < 0 || boardX >= COLS) return true; - if (boardY >= board.length) return true; - if (boardY >= 0 && board[boardY][boardX]) return true; - } - } - return false; -} - -/** Get the filled cell value for a tetromino type */ -export function typeToId(type: TetrominoType): number { - return TYPE_TO_ID[type]; -} - -/** Return a randomly chosen tetromino type */ -export function randomType(): TetrominoType { - const types: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L']; - return types[Math.floor(Math.random() * types.length)]; -} - -/** 7-bag randomiser: returns a shuffled bag of all 7 pieces */ -export function newBag(): TetrominoType[] { - const bag: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L']; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - return bag; -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/types.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/src/types.ts @@ -1,25 +0,0 @@ -export type TetrominoType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L'; - -export type Cell = TetrominoType | null; - -export type Matrix = number[][]; - -export interface Position { - x: number; - y: number; -} - -export interface Piece { - type: TetrominoType; - matrix: Matrix; - pos: Position; - rotation: number; // 0 | 1 | 2 | 3 -} - -export interface GameStats { - score: number; - lines: number; - level: number; -} - -export type GamePhase = 'idle' | 'playing' | 'paused' | 'gameover'; diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-b5qblx2a", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-b5qblx2a", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-b5qblx2a", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T08:54:02.882Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-3fkpubdq", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-3fkpubdq", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-3fkpubdq", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:22:24.081Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-rapthkjt", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-rapthkjt", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-rapthkjt", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:21:25.059Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2301 +0,0 @@ -{ - "name": "loop-bench-eh4etafl", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-eh4etafl", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,19 +0,0 @@ -{ - "name": "loop-bench-eh4etafl", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:37:30.736Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html @@ -1,948 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0d0d1a; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - font-family: 'Segoe UI', system-ui, sans-serif; - color: #e0e0ff; - user-select: none; - } - - #wrapper { - display: flex; - gap: 24px; - align-items: flex-start; - } - - /* ── Left panel ─────────────────────────────── */ - #left-panel { - display: flex; - flex-direction: column; - gap: 16px; - width: 140px; - } - - /* ── Right panel ────────────────────────────── */ - #right-panel { - display: flex; - flex-direction: column; - gap: 16px; - width: 140px; - } - - .panel-box { - background: #12122a; - border: 2px solid #2a2a5a; - border-radius: 10px; - padding: 14px 16px; - } - - .panel-box h3 { - font-size: 10px; - letter-spacing: 2px; - text-transform: uppercase; - color: #6666aa; - margin-bottom: 8px; - } - - .panel-value { - font-size: 26px; - font-weight: 700; - color: #c8c8ff; - letter-spacing: 1px; - } - - /* ── Canvas / game board ────────────────────── */ - #game-area { - position: relative; - } - - #board { - display: block; - border: 3px solid #2a2a5a; - border-radius: 4px; - box-shadow: 0 0 40px #3333aa55, inset 0 0 20px #00001888; - } - - /* ── Overlay (start / pause / game-over) ───── */ - #overlay { - position: absolute; - inset: 0; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 14px; - background: rgba(5, 5, 20, 0.82); - border-radius: 2px; - backdrop-filter: blur(3px); - } - - #overlay h2 { - font-size: 30px; - letter-spacing: 4px; - text-transform: uppercase; - color: #fff; - text-shadow: 0 0 20px #8888ff; - } - - #overlay p { - font-size: 13px; - color: #9090cc; - letter-spacing: 1px; - text-align: center; - line-height: 1.7; - } - - #overlay button { - margin-top: 6px; - padding: 11px 32px; - font-size: 14px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - background: linear-gradient(135deg, #4444cc, #6644ff); - color: #fff; - border: none; - border-radius: 8px; - cursor: pointer; - transition: filter 0.15s, transform 0.12s; - box-shadow: 0 4px 18px #4444cc88; - } - - #overlay button:hover { filter: brightness(1.25); transform: translateY(-2px); } - #overlay button:active { transform: translateY(0); } - - /* ── Next-piece canvas ──────────────────────── */ - #next-canvas { - display: block; - margin: 6px auto 0; - } - - /* ── Hold canvas ────────────────────────────── */ - #hold-canvas { - display: block; - margin: 6px auto 0; - } - - /* ── Controls list ──────────────────────────── */ - .controls-list { - font-size: 11px; - line-height: 2; - color: #7777bb; - } - - .controls-list span { - display: inline-block; - background: #1e1e3e; - border: 1px solid #3333668a; - border-radius: 4px; - padding: 1px 6px; - font-size: 10px; - color: #aaaadd; - margin-right: 4px; - } - - /* ── Ghost / level colours ──────────────────── */ - #level-bar-wrap { - background: #1a1a35; - border-radius: 4px; - height: 6px; - overflow: hidden; - margin-top: 6px; - } - - #level-bar { - height: 100%; - width: 0%; - background: linear-gradient(90deg, #4466ff, #aa44ff); - border-radius: 4px; - transition: width 0.4s ease; - } - </style> -</head> -<body> - -<div id="wrapper"> - - <!-- LEFT PANEL --> - <div id="left-panel"> - <div class="panel-box"> - <h3>Score</h3> - <div class="panel-value" id="score-display">0</div> - </div> - <div class="panel-box"> - <h3>Level</h3> - <div class="panel-value" id="level-display">1</div> - <div id="level-bar-wrap"><div id="level-bar"></div></div> - </div> - <div class="panel-box"> - <h3>Lines</h3> - <div class="panel-value" id="lines-display">0</div> - </div> - <div class="panel-box"> - <h3>Hold <small style="font-size:9px;color:#555">(C)</small></h3> - <canvas id="hold-canvas" width="100" height="80"></canvas> - </div> - </div> - - <!-- GAME BOARD --> - <div id="game-area"> - <canvas id="board" width="300" height="600"></canvas> - <div id="overlay"> - <h2>Tetris</h2> - <p>Arrow keys to move & soft-drop<br> - ↑ / X rotate CW · Z rotate CCW<br> - Space hard-drop · C hold<br> - P pause</p> - <button id="start-btn">Start Game</button> - </div> - </div> - - <!-- RIGHT PANEL --> - <div id="right-panel"> - <div class="panel-box"> - <h3>Next</h3> - <canvas id="next-canvas" width="100" height="200"></canvas> - </div> - <div class="panel-box"> - <h3>Controls</h3> - <div class="controls-list"> - <span>←→</span> Move<br> - <span>↓</span> Soft Drop<br> - <span>Space</span> Hard Drop<br> - <span>↑</span><span>X</span> Rotate CW<br> - <span>Z</span> Rotate CCW<br> - <span>C</span> Hold<br> - <span>P</span> Pause - </div> - </div> - <div class="panel-box" id="combo-box" style="display:none"> - <h3>Combo</h3> - <div class="panel-value" id="combo-display">x0</div> - </div> - </div> - -</div> - -<script> -// ═══════════════════════════════════════════════════════════════ -// CONSTANTS -// ═══════════════════════════════════════════════════════════════ -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell - -// Colours per piece type (index 0 = empty) -const COLORS = [ - null, - '#00cfcf', // I – cyan - '#f0a000', // O – orange/yellow - '#a000f0', // T – purple - '#00a000', // S – green - '#f00000', // Z – red - '#0000f0', // J – blue - '#f07800', // L – orange -]; - -const GHOST_ALPHA = 0.22; - -// Tetromino definitions – each piece has 4 rotation states -// Stored as [row][col] offsets from the pivot -const PIECES = { - // 0 1 2 3 - I: [ - [[0,0],[0,1],[0,2],[0,3]], - [[0,2],[1,2],[2,2],[3,2]], - [[1,0],[1,1],[1,2],[1,3]], - [[0,1],[1,1],[2,1],[3,1]], - ], - O: [ - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - ], - T: [ - [[0,1],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[1,2],[2,1]], - [[0,1],[1,0],[1,1],[2,1]], - ], - S: [ - [[0,1],[0,2],[1,0],[1,1]], - [[0,1],[1,1],[1,2],[2,2]], - [[1,1],[1,2],[2,0],[2,1]], - [[0,0],[1,0],[1,1],[2,1]], - ], - Z: [ - [[0,0],[0,1],[1,1],[1,2]], - [[0,2],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[2,1],[2,2]], - [[0,1],[1,0],[1,1],[2,0]], - ], - J: [ - [[0,0],[1,0],[1,1],[1,2]], - [[0,1],[0,2],[1,1],[2,1]], - [[1,0],[1,1],[1,2],[2,2]], - [[0,1],[1,1],[2,0],[2,1]], - ], - L: [ - [[0,2],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[2,1],[2,2]], - [[1,0],[1,1],[1,2],[2,0]], - [[0,0],[0,1],[1,1],[2,1]], - ], -}; - -const PIECE_KEYS = Object.keys(PIECES); // ['I','O','T','S','Z','J','L'] -const PIECE_IDX = { I:1, O:2, T:3, S:4, Z:5, J:6, L:7 }; - -// Wall-kick offsets for standard rotation (SRS-lite) -// [from-rotation][to-rotation] = array of (dr,dc) attempts -const KICKS = {}; -(function buildKicks() { - // Non-I pieces - const standard = { - '01': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]], - '10': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]], - '12': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]], - '21': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2,-1]], - '23': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]], - '32': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]], - '30': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]], - '03': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2, 1]], - }; - // I piece - const iKicks = { - '01': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]], - '10': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]], - '12': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]], - '21': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]], - '23': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]], - '32': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]], - '30': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]], - '03': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]], - }; - KICKS['standard'] = standard; - KICKS['I'] = iKicks; -})(); - -// Level → fall interval (ms) -function levelSpeed(level) { - // Classic Tetris-style curve - const frames = [48,43,38,33,28,23,18,13,8,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1]; - const idx = Math.min(level - 1, frames.length - 1); - return Math.round(frames[idx] * (1000 / 60)); -} - -// Points for line clears (single,double,triple,tetris) -const LINE_POINTS = [0, 100, 300, 500, 800]; -const SOFT_DROP_PTS = 1; -const HARD_DROP_PTS = 2; - -// ═══════════════════════════════════════════════════════════════ -// GAME STATE -// ═══════════════════════════════════════════════════════════════ -let board, current, ghost, nextQueue, held; -let score, level, lines, combo; -let canHold, gameOver, paused, started; -let dropTimer, lastTime, animId; -let lockTimer, lockMoved; -const LOCK_DELAY = 500; // ms before a grounded piece locks -const LOCK_MOVES = 15; // max moves before forced lock - -// 7-bag randomiser -let bag = []; -function nextBag() { - if (bag.length === 0) { - bag = [...PIECE_KEYS]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - } - return bag.pop(); -} - -function createPiece(type) { - // spawn position: row 0, col 3 - return { type, rot: 0, row: 0, col: 3 }; -} - -function initGame() { - board = Array.from({ length: ROWS }, () => new Array(COLS).fill(0)); - bag = []; - nextQueue = [nextBag(), nextBag(), nextBag()]; - current = spawnPiece(); - held = null; - score = 0; level = 1; lines = 0; combo = -1; - canHold = true; - gameOver = false; paused = false; - dropTimer = 0; lastTime = null; - lockTimer = null; lockMoved = 0; - updateUI(); - updateGhost(); -} - -function spawnPiece() { - const type = nextQueue.shift(); - nextQueue.push(nextBag()); - const p = createPiece(type); - // I and O spawn slightly lower - if (type === 'I') p.row = -1; - return p; -} - -// ═══════════════════════════════════════════════════════════════ -// BOARD HELPERS -// ═══════════════════════════════════════════════════════════════ -function cells(piece) { - return PIECES[piece.type][piece.rot].map(([dr, dc]) => [piece.row + dr, piece.col + dc]); -} - -function valid(piece, dr = 0, dc = 0, rot = piece.rot) { - const test = { ...piece, row: piece.row + dr, col: piece.col + dc, rot }; - return cells(test).every(([r, c]) => - r < ROWS && c >= 0 && c < COLS && (r < 0 || board[r][c] === 0) - ); -} - -function lock(piece) { - let topped = false; - cells(piece).forEach(([r, c]) => { - if (r < 0) { topped = true; return; } - board[r][c] = PIECE_IDX[piece.type]; - }); - if (topped) { triggerGameOver(); return; } - - clearLines(); - - current = spawnPiece(); - canHold = true; - lockMoved = 0; - clearTimeout(lockTimer); lockTimer = null; - - if (!valid(current)) { - triggerGameOver(); - } else { - updateGhost(); - } -} - -function clearLines() { - const fullSet = new Set(); - for (let r = ROWS - 1; r >= 0; r--) { - if (board[r].every(v => v !== 0)) fullSet.add(r); - } - if (fullSet.size === 0) { - combo = -1; - return; - } - - const count = fullSet.size; - const flashRowArr = [...fullSet]; // original indices for flash effect - - // Remove all full rows atomically, prepend empty rows at top - const kept = board.filter((_, r) => !fullSet.has(r)); - const empties = Array.from({ length: count }, () => new Array(COLS).fill(0)); - board.splice(0, ROWS, ...empties, ...kept); - - combo++; - const pts = (LINE_POINTS[count] + (combo > 0 ? 50 * combo : 0)) * level; - score += pts; - lines += count; - level = Math.floor(lines / 10) + 1; - updateUI(); - - flashLines(flashRowArr); // purely visual -} - -function updateGhost() { - if (!current) return; - ghost = { ...current }; - while (valid(ghost, 1)) ghost.row++; -} - -// ═══════════════════════════════════════════════════════════════ -// CONTROLS -// ═══════════════════════════════════════════════════════════════ -function moveLeft() { tryMove(0, -1); } -function moveRight() { tryMove(0, 1); } -function softDrop() { - if (tryMove(1, 0)) { - score += SOFT_DROP_PTS; - updateUI(); - } -} - -function tryMove(dr, dc) { - if (!current || gameOver || paused) return false; - if (valid(current, dr, dc)) { - current.row += dr; - current.col += dc; - updateGhost(); - extendLock(); - return true; - } - return false; -} - -function rotateCW() { rotate( 1); } -function rotateCCW() { rotate(-1); } - -function rotate(dir) { - if (!current || gameOver || paused) return; - const newRot = ((current.rot + dir) + 4) % 4; - const kickTable = current.type === 'I' ? KICKS['I'] : KICKS['standard']; - const key = `${current.rot}${newRot}`; - const kicks = kickTable[key] || [[0, 0]]; - for (const [kr, kc] of kicks) { - if (valid(current, kr, kc, newRot)) { - current.row += kr; - current.col += kc; - current.rot = newRot; - updateGhost(); - extendLock(); - return; - } - } -} - -function hardDrop() { - if (!current || gameOver || paused) return; - let dropped = 0; - while (valid(current, 1)) { current.row++; dropped++; } - score += dropped * HARD_DROP_PTS; - updateUI(); - clearTimeout(lockTimer); lockTimer = null; - lock(current); -} - -function holdPiece() { - if (!current || !canHold || gameOver || paused) return; - if (held) { - const prev = held; - held = current.type; - current = createPiece(prev); - if (current.type === 'I') current.row = -1; - } else { - held = current.type; - current = spawnPiece(); - } - canHold = false; - updateGhost(); - drawHold(); -} - -function extendLock() { - // If the piece is grounded, reset lock timer (up to LOCK_MOVES times) - if (!valid(current, 1) && lockMoved < LOCK_MOVES) { - lockMoved++; - clearTimeout(lockTimer); - lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY); - } -} - -// ═══════════════════════════════════════════════════════════════ -// GAME LOOP -// ═══════════════════════════════════════════════════════════════ -function gameLoop(ts) { - if (gameOver) return; - animId = requestAnimationFrame(gameLoop); - - if (!lastTime) lastTime = ts; - const dt = ts - lastTime; - lastTime = ts; - - if (!paused) { - dropTimer += dt; - const interval = levelSpeed(level); - if (dropTimer >= interval) { - dropTimer -= interval; - // Attempt to fall - if (valid(current, 1)) { - current.row++; - updateGhost(); - } else { - // Start lock delay if not already running - if (!lockTimer) { - lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY); - } - } - } - } - - draw(); -} - -function triggerGameOver() { - gameOver = true; - clearTimeout(lockTimer); - cancelAnimationFrame(animId); - drawBoard(); // final frame - showOverlay('GAME OVER', `Score: ${score} | Level: ${level} | Lines: ${lines}`, 'Play Again'); -} - -// ═══════════════════════════════════════════════════════════════ -// RENDERING -// ═══════════════════════════════════════════════════════════════ -const canvas = document.getElementById('board'); -const ctx = canvas.getContext('2d'); -const nextCvs = document.getElementById('next-canvas'); -const nextCtx = nextCvs.getContext('2d'); -const holdCvs = document.getElementById('hold-canvas'); -const holdCtx = holdCvs.getContext('2d'); - -let flashRows = []; -let flashTimer = 0; -const FLASH_DUR = 320; - -function flashLines(rows) { - flashRows = rows; - flashTimer = FLASH_DUR; -} - -function draw() { - drawBoard(); - drawNext(); - drawHold(); -} - -function drawBoard() { - // Background - ctx.fillStyle = '#090918'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - // Grid lines (subtle) - ctx.strokeStyle = '#12122a'; - ctx.lineWidth = 0.5; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke(); - } - - // Settled board cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (board[r][c]) { - drawCell(ctx, r, c, COLORS[board[r][c]], 1, 0, 0); - } - } - } - - // Flash overlay - if (flashTimer > 0 && !paused) { - flashTimer -= 16; - const alpha = 0.7 * (flashTimer / FLASH_DUR); - ctx.fillStyle = `rgba(255,255,255,${alpha})`; - flashRows.forEach(r => { - ctx.fillRect(0, r * BLOCK, canvas.width, BLOCK); - }); - if (flashTimer <= 0) flashRows = []; - } - - if (paused) { - ctx.fillStyle = 'rgba(5,5,20,0.7)'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 28px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('PAUSED', canvas.width / 2, canvas.height / 2); - ctx.font = '13px system-ui'; - ctx.fillStyle = '#8888cc'; - ctx.fillText('Press P to resume', canvas.width / 2, canvas.height / 2 + 32); - return; - } - - if (!current) return; - - // Ghost piece - if (ghost && (ghost.row !== current.row || ghost.col !== current.col)) { - cells(ghost).forEach(([r, c]) => { - if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], GHOST_ALPHA, 0, 0); - }); - } - - // Active piece - cells(current).forEach(([r, c]) => { - if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], 1, 0, 0); - }); -} - -function drawCell(context, row, col, color, alpha, offR, offC) { - const x = (col + offC) * BLOCK; - const y = (row + offR) * BLOCK; - const s = BLOCK - 1; - - context.save(); - context.globalAlpha = alpha; - - // Main fill with gradient - const grad = context.createLinearGradient(x, y, x + s, y + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - context.fillStyle = grad; - context.fillRect(x + 1, y + 1, s - 1, s - 1); - - // Highlight edge (top-left) - context.fillStyle = lighten(color, 60); - context.fillRect(x + 1, y + 1, s - 1, 2); - context.fillRect(x + 1, y + 1, 2, s - 1); - - // Shadow edge (bottom-right) - context.fillStyle = darken(color, 50); - context.fillRect(x + 1, y + s - 2, s - 1, 2); - context.fillRect(x + s - 2, y + 1, 2, s - 1); - - context.restore(); -} - -function drawMiniPiece(context, cvs, type) { - context.fillStyle = '#0d0d1f'; - context.fillRect(0, 0, cvs.width, cvs.height); - if (!type) return; - - const shape = PIECES[type][0]; - const minR = Math.min(...shape.map(([r]) => r)); - const maxR = Math.max(...shape.map(([r]) => r)); - const minC = Math.min(...shape.map(([, c]) => c)); - const maxC = Math.max(...shape.map(([, c]) => c)); - const h = maxR - minR + 1; - const w = maxC - minC + 1; - const bs = 20; - const startX = Math.floor((cvs.width - w * bs) / 2); - const startY = Math.floor((cvs.height - h * bs) / 2); - - shape.forEach(([r, c]) => { - const px = startX + (c - minC) * bs; - const py = startY + (r - minR) * bs; - const s = bs - 1; - - const color = COLORS[PIECE_IDX[type]]; - const grad = context.createLinearGradient(px, py, px + s, py + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - context.fillStyle = grad; - context.fillRect(px + 1, py + 1, s - 1, s - 1); - - context.fillStyle = lighten(color, 60); - context.fillRect(px + 1, py + 1, s - 1, 2); - context.fillRect(px + 1, py + 1, 2, s - 1); - - context.fillStyle = darken(color, 50); - context.fillRect(px + 1, py + s - 2, s - 1, 2); - context.fillRect(px + s - 2, py + 1, 2, s - 1); - }); -} - -function drawNext() { - const w = nextCvs.width; - const h = nextCvs.height; - nextCtx.fillStyle = '#0d0d1f'; - nextCtx.fillRect(0, 0, w, h); - - const slotH = h / 3; - nextQueue.forEach((type, i) => { - const shape = PIECES[type][0]; - const minR = Math.min(...shape.map(([r]) => r)); - const maxR = Math.max(...shape.map(([r]) => r)); - const minC = Math.min(...shape.map(([, c]) => c)); - const maxC = Math.max(...shape.map(([, c]) => c)); - const ph = maxR - minR + 1; - const pw = maxC - minC + 1; - const bs = i === 0 ? 20 : 16; - const startX = Math.floor((w - pw * bs) / 2); - const baseY = i * slotH + Math.floor((slotH - ph * bs) / 2); - - shape.forEach(([r, c]) => { - const px = startX + (c - minC) * bs; - const py = baseY + (r - minR) * bs; - const s = bs - 1; - const color = COLORS[PIECE_IDX[type]]; - const alpha = i === 0 ? 1 : 0.65 - i * 0.1; - - nextCtx.save(); - nextCtx.globalAlpha = alpha; - const grad = nextCtx.createLinearGradient(px, py, px + s, py + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - nextCtx.fillStyle = grad; - nextCtx.fillRect(px + 1, py + 1, s - 1, s - 1); - nextCtx.fillStyle = lighten(color, 60); - nextCtx.fillRect(px + 1, py + 1, s - 1, 2); - nextCtx.fillRect(px + 1, py + 1, 2, s - 1); - nextCtx.fillStyle = darken(color, 50); - nextCtx.fillRect(px + 1, py + s - 2, s - 1, 2); - nextCtx.fillRect(px + s - 2, py + 1, 2, s - 1); - nextCtx.restore(); - }); - }); -} - -function drawHold() { - drawMiniPiece(holdCtx, holdCvs, held); - if (!canHold && held) { - holdCtx.fillStyle = 'rgba(0,0,0,0.5)'; - holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height); - } -} - -// ═══════════════════════════════════════════════════════════════ -// UI -// ═══════════════════════════════════════════════════════════════ -const scoreEl = document.getElementById('score-display'); -const levelEl = document.getElementById('level-display'); -const linesEl = document.getElementById('lines-display'); -const levelBar = document.getElementById('level-bar'); -const comboBox = document.getElementById('combo-box'); -const comboDis = document.getElementById('combo-display'); - -function updateUI() { - scoreEl.textContent = score.toLocaleString(); - levelEl.textContent = level; - linesEl.textContent = lines; - const pct = ((lines % 10) / 10) * 100; - levelBar.style.width = pct + '%'; - - if (combo > 0) { - comboBox.style.display = 'block'; - comboDis.textContent = 'x' + (combo + 1); - } else { - comboBox.style.display = 'none'; - } -} - -// ═══════════════════════════════════════════════════════════════ -// OVERLAY -// ═══════════════════════════════════════════════════════════════ -const overlay = document.getElementById('overlay'); -const startBtn = document.getElementById('start-btn'); - -function showOverlay(title, msg, btnText) { - overlay.querySelector('h2').textContent = title; - overlay.querySelector('p').innerHTML = msg; - startBtn.textContent = btnText; - overlay.style.display = 'flex'; -} - -function hideOverlay() { - overlay.style.display = 'none'; -} - -startBtn.addEventListener('click', () => { - hideOverlay(); - initGame(); - lastTime = null; - started = true; - animId = requestAnimationFrame(gameLoop); -}); - -// ═══════════════════════════════════════════════════════════════ -// KEYBOARD -// ═══════════════════════════════════════════════════════════════ -const DAS_DELAY = 170; // ms before auto-repeat -const DAS_REPEAT = 50; // ms between repeats - -let dasKey = null, dasTimer = null, dasRepeat = null; - -function startDAS(key) { - if (dasKey === key) return; - stopDAS(); - dasKey = key; - applyKey(key); - dasTimer = setTimeout(() => { - dasRepeat = setInterval(() => applyKey(key), DAS_REPEAT); - }, DAS_DELAY); -} - -function stopDAS(key) { - if (key && dasKey !== key) return; - clearTimeout(dasTimer); - clearInterval(dasRepeat); - dasKey = null; -} - -function applyKey(key) { - if (key === 'ArrowLeft') moveLeft(); - if (key === 'ArrowRight') moveRight(); - if (key === 'ArrowDown') softDrop(); -} - -window.addEventListener('keydown', e => { - if (!started) return; - - // Pause toggle - if (e.code === 'KeyP') { - if (gameOver) return; - paused = !paused; - if (!paused) { lastTime = null; } - return; - } - - if (paused || gameOver) return; - - switch (e.code) { - case 'ArrowLeft': e.preventDefault(); startDAS('ArrowLeft'); break; - case 'ArrowRight': e.preventDefault(); startDAS('ArrowRight'); break; - case 'ArrowDown': e.preventDefault(); startDAS('ArrowDown'); break; - case 'ArrowUp': e.preventDefault(); rotateCW(); break; - case 'KeyX': e.preventDefault(); rotateCW(); break; - case 'KeyZ': e.preventDefault(); rotateCCW(); break; - case 'Space': e.preventDefault(); hardDrop(); break; - case 'KeyC': e.preventDefault(); holdPiece(); break; - } -}); - -window.addEventListener('keyup', e => { - if (['ArrowLeft','ArrowRight','ArrowDown'].includes(e.code)) { - stopDAS(e.code); - } -}); - -// ═══════════════════════════════════════════════════════════════ -// COLOUR HELPERS -// ═══════════════════════════════════════════════════════════════ -function parseHex(hex) { - const n = parseInt(hex.replace('#',''), 16); - return [(n >> 16) & 255, (n >> 8) & 255, n & 255]; -} -function toHex([r, g, b]) { - return '#' + [r, g, b].map(v => Math.min(255, Math.max(0, v)).toString(16).padStart(2,'0')).join(''); -} -function lighten(hex, amt) { return toHex(parseHex(hex).map(v => v + amt)); } -function darken(hex, amt) { return toHex(parseHex(hex).map(v => v - amt)); } - -// ═══════════════════════════════════════════════════════════════ -// INITIAL RENDER -// ═══════════════════════════════════════════════════════════════ -(function initialDraw() { - ctx.fillStyle = '#090918'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - // subtle grid - ctx.strokeStyle = '#12122a'; - ctx.lineWidth = 0.5; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke(); - } - holdCtx.fillStyle = '#0d0d1f'; holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height); - nextCtx.fillStyle = '#0d0d1f'; nextCtx.fillRect(0, 0, nextCvs.width, nextCvs.height); -})(); -</script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2550 +0,0 @@ -{ - "name": "loop-bench-st5faakp", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-st5faakp", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,20 +0,0 @@ -{ - "name": "loop-bench-st5faakp", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,76 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:30:42.265Z", - "formats": { - "markup": { - "sources": { - "tetris.html": { - "lines": 947, - "tokens": 7532, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 947, - "tokens": 7532, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "package.json": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 19, - "tokens": 118, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 966, - "tokens": 7650, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tetris.html @@ -1,948 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0d0d1a; - display: flex; - justify-content: center; - align-items: center; - min-height: 100vh; - font-family: 'Segoe UI', system-ui, sans-serif; - color: #e0e0ff; - user-select: none; - } - - #wrapper { - display: flex; - gap: 24px; - align-items: flex-start; - } - - /* ── Left panel ─────────────────────────────── */ - #left-panel { - display: flex; - flex-direction: column; - gap: 16px; - width: 140px; - } - - /* ── Right panel ────────────────────────────── */ - #right-panel { - display: flex; - flex-direction: column; - gap: 16px; - width: 140px; - } - - .panel-box { - background: #12122a; - border: 2px solid #2a2a5a; - border-radius: 10px; - padding: 14px 16px; - } - - .panel-box h3 { - font-size: 10px; - letter-spacing: 2px; - text-transform: uppercase; - color: #6666aa; - margin-bottom: 8px; - } - - .panel-value { - font-size: 26px; - font-weight: 700; - color: #c8c8ff; - letter-spacing: 1px; - } - - /* ── Canvas / game board ────────────────────── */ - #game-area { - position: relative; - } - - #board { - display: block; - border: 3px solid #2a2a5a; - border-radius: 4px; - box-shadow: 0 0 40px #3333aa55, inset 0 0 20px #00001888; - } - - /* ── Overlay (start / pause / game-over) ───── */ - #overlay { - position: absolute; - inset: 0; - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - gap: 14px; - background: rgba(5, 5, 20, 0.82); - border-radius: 2px; - backdrop-filter: blur(3px); - } - - #overlay h2 { - font-size: 30px; - letter-spacing: 4px; - text-transform: uppercase; - color: #fff; - text-shadow: 0 0 20px #8888ff; - } - - #overlay p { - font-size: 13px; - color: #9090cc; - letter-spacing: 1px; - text-align: center; - line-height: 1.7; - } - - #overlay button { - margin-top: 6px; - padding: 11px 32px; - font-size: 14px; - font-weight: 700; - letter-spacing: 2px; - text-transform: uppercase; - background: linear-gradient(135deg, #4444cc, #6644ff); - color: #fff; - border: none; - border-radius: 8px; - cursor: pointer; - transition: filter 0.15s, transform 0.12s; - box-shadow: 0 4px 18px #4444cc88; - } - - #overlay button:hover { filter: brightness(1.25); transform: translateY(-2px); } - #overlay button:active { transform: translateY(0); } - - /* ── Next-piece canvas ──────────────────────── */ - #next-canvas { - display: block; - margin: 6px auto 0; - } - - /* ── Hold canvas ────────────────────────────── */ - #hold-canvas { - display: block; - margin: 6px auto 0; - } - - /* ── Controls list ──────────────────────────── */ - .controls-list { - font-size: 11px; - line-height: 2; - color: #7777bb; - } - - .controls-list span { - display: inline-block; - background: #1e1e3e; - border: 1px solid #3333668a; - border-radius: 4px; - padding: 1px 6px; - font-size: 10px; - color: #aaaadd; - margin-right: 4px; - } - - /* ── Ghost / level colours ──────────────────── */ - #level-bar-wrap { - background: #1a1a35; - border-radius: 4px; - height: 6px; - overflow: hidden; - margin-top: 6px; - } - - #level-bar { - height: 100%; - width: 0%; - background: linear-gradient(90deg, #4466ff, #aa44ff); - border-radius: 4px; - transition: width 0.4s ease; - } - </style> -</head> -<body> - -<div id="wrapper"> - - <!-- LEFT PANEL --> - <div id="left-panel"> - <div class="panel-box"> - <h3>Score</h3> - <div class="panel-value" id="score-display">0</div> - </div> - <div class="panel-box"> - <h3>Level</h3> - <div class="panel-value" id="level-display">1</div> - <div id="level-bar-wrap"><div id="level-bar"></div></div> - </div> - <div class="panel-box"> - <h3>Lines</h3> - <div class="panel-value" id="lines-display">0</div> - </div> - <div class="panel-box"> - <h3>Hold <small style="font-size:9px;color:#555">(C)</small></h3> - <canvas id="hold-canvas" width="100" height="80"></canvas> - </div> - </div> - - <!-- GAME BOARD --> - <div id="game-area"> - <canvas id="board" width="300" height="600"></canvas> - <div id="overlay"> - <h2>Tetris</h2> - <p>Arrow keys to move & soft-drop<br> - ↑ / X rotate CW · Z rotate CCW<br> - Space hard-drop · C hold<br> - P pause</p> - <button id="start-btn">Start Game</button> - </div> - </div> - - <!-- RIGHT PANEL --> - <div id="right-panel"> - <div class="panel-box"> - <h3>Next</h3> - <canvas id="next-canvas" width="100" height="200"></canvas> - </div> - <div class="panel-box"> - <h3>Controls</h3> - <div class="controls-list"> - <span>←→</span> Move<br> - <span>↓</span> Soft Drop<br> - <span>Space</span> Hard Drop<br> - <span>↑</span><span>X</span> Rotate CW<br> - <span>Z</span> Rotate CCW<br> - <span>C</span> Hold<br> - <span>P</span> Pause - </div> - </div> - <div class="panel-box" id="combo-box" style="display:none"> - <h3>Combo</h3> - <div class="panel-value" id="combo-display">x0</div> - </div> - </div> - -</div> - -<script> -// ═══════════════════════════════════════════════════════════════ -// CONSTANTS -// ═══════════════════════════════════════════════════════════════ -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell - -// Colours per piece type (index 0 = empty) -const COLORS = [ - null, - '#00cfcf', // I – cyan - '#f0a000', // O – orange/yellow - '#a000f0', // T – purple - '#00a000', // S – green - '#f00000', // Z – red - '#0000f0', // J – blue - '#f07800', // L – orange -]; - -const GHOST_ALPHA = 0.22; - -// Tetromino definitions – each piece has 4 rotation states -// Stored as [row][col] offsets from the pivot -const PIECES = { - // 0 1 2 3 - I: [ - [[0,0],[0,1],[0,2],[0,3]], - [[0,2],[1,2],[2,2],[3,2]], - [[1,0],[1,1],[1,2],[1,3]], - [[0,1],[1,1],[2,1],[3,1]], - ], - O: [ - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - [[0,0],[0,1],[1,0],[1,1]], - ], - T: [ - [[0,1],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[1,2],[2,1]], - [[0,1],[1,0],[1,1],[2,1]], - ], - S: [ - [[0,1],[0,2],[1,0],[1,1]], - [[0,1],[1,1],[1,2],[2,2]], - [[1,1],[1,2],[2,0],[2,1]], - [[0,0],[1,0],[1,1],[2,1]], - ], - Z: [ - [[0,0],[0,1],[1,1],[1,2]], - [[0,2],[1,1],[1,2],[2,1]], - [[1,0],[1,1],[2,1],[2,2]], - [[0,1],[1,0],[1,1],[2,0]], - ], - J: [ - [[0,0],[1,0],[1,1],[1,2]], - [[0,1],[0,2],[1,1],[2,1]], - [[1,0],[1,1],[1,2],[2,2]], - [[0,1],[1,1],[2,0],[2,1]], - ], - L: [ - [[0,2],[1,0],[1,1],[1,2]], - [[0,1],[1,1],[2,1],[2,2]], - [[1,0],[1,1],[1,2],[2,0]], - [[0,0],[0,1],[1,1],[2,1]], - ], -}; - -const PIECE_KEYS = Object.keys(PIECES); // ['I','O','T','S','Z','J','L'] -const PIECE_IDX = { I:1, O:2, T:3, S:4, Z:5, J:6, L:7 }; - -// Wall-kick offsets for standard rotation (SRS-lite) -// [from-rotation][to-rotation] = array of (dr,dc) attempts -const KICKS = {}; -(function buildKicks() { - // Non-I pieces - const standard = { - '01': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]], - '10': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]], - '12': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]], - '21': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2,-1]], - '23': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]], - '32': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]], - '30': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]], - '03': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2, 1]], - }; - // I piece - const iKicks = { - '01': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]], - '10': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]], - '12': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]], - '21': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]], - '23': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]], - '32': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]], - '30': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]], - '03': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]], - }; - KICKS['standard'] = standard; - KICKS['I'] = iKicks; -})(); - -// Level → fall interval (ms) -function levelSpeed(level) { - // Classic Tetris-style curve - const frames = [48,43,38,33,28,23,18,13,8,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1]; - const idx = Math.min(level - 1, frames.length - 1); - return Math.round(frames[idx] * (1000 / 60)); -} - -// Points for line clears (single,double,triple,tetris) -const LINE_POINTS = [0, 100, 300, 500, 800]; -const SOFT_DROP_PTS = 1; -const HARD_DROP_PTS = 2; - -// ═══════════════════════════════════════════════════════════════ -// GAME STATE -// ═══════════════════════════════════════════════════════════════ -let board, current, ghost, nextQueue, held; -let score, level, lines, combo; -let canHold, gameOver, paused, started; -let dropTimer, lastTime, animId; -let lockTimer, lockMoved; -const LOCK_DELAY = 500; // ms before a grounded piece locks -const LOCK_MOVES = 15; // max moves before forced lock - -// 7-bag randomiser -let bag = []; -function nextBag() { - if (bag.length === 0) { - bag = [...PIECE_KEYS]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - } - return bag.pop(); -} - -function createPiece(type) { - // spawn position: row 0, col 3 - return { type, rot: 0, row: 0, col: 3 }; -} - -function initGame() { - board = Array.from({ length: ROWS }, () => new Array(COLS).fill(0)); - bag = []; - nextQueue = [nextBag(), nextBag(), nextBag()]; - current = spawnPiece(); - held = null; - score = 0; level = 1; lines = 0; combo = -1; - canHold = true; - gameOver = false; paused = false; - dropTimer = 0; lastTime = null; - lockTimer = null; lockMoved = 0; - updateUI(); - updateGhost(); -} - -function spawnPiece() { - const type = nextQueue.shift(); - nextQueue.push(nextBag()); - const p = createPiece(type); - // I and O spawn slightly lower - if (type === 'I') p.row = -1; - return p; -} - -// ═══════════════════════════════════════════════════════════════ -// BOARD HELPERS -// ═══════════════════════════════════════════════════════════════ -function cells(piece) { - return PIECES[piece.type][piece.rot].map(([dr, dc]) => [piece.row + dr, piece.col + dc]); -} - -function valid(piece, dr = 0, dc = 0, rot = piece.rot) { - const test = { ...piece, row: piece.row + dr, col: piece.col + dc, rot }; - return cells(test).every(([r, c]) => - r < ROWS && c >= 0 && c < COLS && (r < 0 || board[r][c] === 0) - ); -} - -function lock(piece) { - let topped = false; - cells(piece).forEach(([r, c]) => { - if (r < 0) { topped = true; return; } - board[r][c] = PIECE_IDX[piece.type]; - }); - if (topped) { triggerGameOver(); return; } - - clearLines(); - - current = spawnPiece(); - canHold = true; - lockMoved = 0; - clearTimeout(lockTimer); lockTimer = null; - - if (!valid(current)) { - triggerGameOver(); - } else { - updateGhost(); - } -} - -function clearLines() { - const fullSet = new Set(); - for (let r = ROWS - 1; r >= 0; r--) { - if (board[r].every(v => v !== 0)) fullSet.add(r); - } - if (fullSet.size === 0) { - combo = -1; - return; - } - - const count = fullSet.size; - const flashRowArr = [...fullSet]; // original indices for flash effect - - // Remove all full rows atomically, prepend empty rows at top - const kept = board.filter((_, r) => !fullSet.has(r)); - const empties = Array.from({ length: count }, () => new Array(COLS).fill(0)); - board.splice(0, ROWS, ...empties, ...kept); - - combo++; - const pts = (LINE_POINTS[count] + (combo > 0 ? 50 * combo : 0)) * level; - score += pts; - lines += count; - level = Math.floor(lines / 10) + 1; - updateUI(); - - flashLines(flashRowArr); // purely visual -} - -function updateGhost() { - if (!current) return; - ghost = { ...current }; - while (valid(ghost, 1)) ghost.row++; -} - -// ═══════════════════════════════════════════════════════════════ -// CONTROLS -// ═══════════════════════════════════════════════════════════════ -function moveLeft() { tryMove(0, -1); } -function moveRight() { tryMove(0, 1); } -function softDrop() { - if (tryMove(1, 0)) { - score += SOFT_DROP_PTS; - updateUI(); - } -} - -function tryMove(dr, dc) { - if (!current || gameOver || paused) return false; - if (valid(current, dr, dc)) { - current.row += dr; - current.col += dc; - updateGhost(); - extendLock(); - return true; - } - return false; -} - -function rotateCW() { rotate( 1); } -function rotateCCW() { rotate(-1); } - -function rotate(dir) { - if (!current || gameOver || paused) return; - const newRot = ((current.rot + dir) + 4) % 4; - const kickTable = current.type === 'I' ? KICKS['I'] : KICKS['standard']; - const key = `${current.rot}${newRot}`; - const kicks = kickTable[key] || [[0, 0]]; - for (const [kr, kc] of kicks) { - if (valid(current, kr, kc, newRot)) { - current.row += kr; - current.col += kc; - current.rot = newRot; - updateGhost(); - extendLock(); - return; - } - } -} - -function hardDrop() { - if (!current || gameOver || paused) return; - let dropped = 0; - while (valid(current, 1)) { current.row++; dropped++; } - score += dropped * HARD_DROP_PTS; - updateUI(); - clearTimeout(lockTimer); lockTimer = null; - lock(current); -} - -function holdPiece() { - if (!current || !canHold || gameOver || paused) return; - if (held) { - const prev = held; - held = current.type; - current = createPiece(prev); - if (current.type === 'I') current.row = -1; - } else { - held = current.type; - current = spawnPiece(); - } - canHold = false; - updateGhost(); - drawHold(); -} - -function extendLock() { - // If the piece is grounded, reset lock timer (up to LOCK_MOVES times) - if (!valid(current, 1) && lockMoved < LOCK_MOVES) { - lockMoved++; - clearTimeout(lockTimer); - lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY); - } -} - -// ═══════════════════════════════════════════════════════════════ -// GAME LOOP -// ═══════════════════════════════════════════════════════════════ -function gameLoop(ts) { - if (gameOver) return; - animId = requestAnimationFrame(gameLoop); - - if (!lastTime) lastTime = ts; - const dt = ts - lastTime; - lastTime = ts; - - if (!paused) { - dropTimer += dt; - const interval = levelSpeed(level); - if (dropTimer >= interval) { - dropTimer -= interval; - // Attempt to fall - if (valid(current, 1)) { - current.row++; - updateGhost(); - } else { - // Start lock delay if not already running - if (!lockTimer) { - lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY); - } - } - } - } - - draw(); -} - -function triggerGameOver() { - gameOver = true; - clearTimeout(lockTimer); - cancelAnimationFrame(animId); - drawBoard(); // final frame - showOverlay('GAME OVER', `Score: ${score} | Level: ${level} | Lines: ${lines}`, 'Play Again'); -} - -// ═══════════════════════════════════════════════════════════════ -// RENDERING -// ═══════════════════════════════════════════════════════════════ -const canvas = document.getElementById('board'); -const ctx = canvas.getContext('2d'); -const nextCvs = document.getElementById('next-canvas'); -const nextCtx = nextCvs.getContext('2d'); -const holdCvs = document.getElementById('hold-canvas'); -const holdCtx = holdCvs.getContext('2d'); - -let flashRows = []; -let flashTimer = 0; -const FLASH_DUR = 320; - -function flashLines(rows) { - flashRows = rows; - flashTimer = FLASH_DUR; -} - -function draw() { - drawBoard(); - drawNext(); - drawHold(); -} - -function drawBoard() { - // Background - ctx.fillStyle = '#090918'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - // Grid lines (subtle) - ctx.strokeStyle = '#12122a'; - ctx.lineWidth = 0.5; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke(); - } - - // Settled board cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (board[r][c]) { - drawCell(ctx, r, c, COLORS[board[r][c]], 1, 0, 0); - } - } - } - - // Flash overlay - if (flashTimer > 0 && !paused) { - flashTimer -= 16; - const alpha = 0.7 * (flashTimer / FLASH_DUR); - ctx.fillStyle = `rgba(255,255,255,${alpha})`; - flashRows.forEach(r => { - ctx.fillRect(0, r * BLOCK, canvas.width, BLOCK); - }); - if (flashTimer <= 0) flashRows = []; - } - - if (paused) { - ctx.fillStyle = 'rgba(5,5,20,0.7)'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 28px system-ui'; - ctx.textAlign = 'center'; - ctx.fillText('PAUSED', canvas.width / 2, canvas.height / 2); - ctx.font = '13px system-ui'; - ctx.fillStyle = '#8888cc'; - ctx.fillText('Press P to resume', canvas.width / 2, canvas.height / 2 + 32); - return; - } - - if (!current) return; - - // Ghost piece - if (ghost && (ghost.row !== current.row || ghost.col !== current.col)) { - cells(ghost).forEach(([r, c]) => { - if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], GHOST_ALPHA, 0, 0); - }); - } - - // Active piece - cells(current).forEach(([r, c]) => { - if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], 1, 0, 0); - }); -} - -function drawCell(context, row, col, color, alpha, offR, offC) { - const x = (col + offC) * BLOCK; - const y = (row + offR) * BLOCK; - const s = BLOCK - 1; - - context.save(); - context.globalAlpha = alpha; - - // Main fill with gradient - const grad = context.createLinearGradient(x, y, x + s, y + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - context.fillStyle = grad; - context.fillRect(x + 1, y + 1, s - 1, s - 1); - - // Highlight edge (top-left) - context.fillStyle = lighten(color, 60); - context.fillRect(x + 1, y + 1, s - 1, 2); - context.fillRect(x + 1, y + 1, 2, s - 1); - - // Shadow edge (bottom-right) - context.fillStyle = darken(color, 50); - context.fillRect(x + 1, y + s - 2, s - 1, 2); - context.fillRect(x + s - 2, y + 1, 2, s - 1); - - context.restore(); -} - -function drawMiniPiece(context, cvs, type) { - context.fillStyle = '#0d0d1f'; - context.fillRect(0, 0, cvs.width, cvs.height); - if (!type) return; - - const shape = PIECES[type][0]; - const minR = Math.min(...shape.map(([r]) => r)); - const maxR = Math.max(...shape.map(([r]) => r)); - const minC = Math.min(...shape.map(([, c]) => c)); - const maxC = Math.max(...shape.map(([, c]) => c)); - const h = maxR - minR + 1; - const w = maxC - minC + 1; - const bs = 20; - const startX = Math.floor((cvs.width - w * bs) / 2); - const startY = Math.floor((cvs.height - h * bs) / 2); - - shape.forEach(([r, c]) => { - const px = startX + (c - minC) * bs; - const py = startY + (r - minR) * bs; - const s = bs - 1; - - const color = COLORS[PIECE_IDX[type]]; - const grad = context.createLinearGradient(px, py, px + s, py + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - context.fillStyle = grad; - context.fillRect(px + 1, py + 1, s - 1, s - 1); - - context.fillStyle = lighten(color, 60); - context.fillRect(px + 1, py + 1, s - 1, 2); - context.fillRect(px + 1, py + 1, 2, s - 1); - - context.fillStyle = darken(color, 50); - context.fillRect(px + 1, py + s - 2, s - 1, 2); - context.fillRect(px + s - 2, py + 1, 2, s - 1); - }); -} - -function drawNext() { - const w = nextCvs.width; - const h = nextCvs.height; - nextCtx.fillStyle = '#0d0d1f'; - nextCtx.fillRect(0, 0, w, h); - - const slotH = h / 3; - nextQueue.forEach((type, i) => { - const shape = PIECES[type][0]; - const minR = Math.min(...shape.map(([r]) => r)); - const maxR = Math.max(...shape.map(([r]) => r)); - const minC = Math.min(...shape.map(([, c]) => c)); - const maxC = Math.max(...shape.map(([, c]) => c)); - const ph = maxR - minR + 1; - const pw = maxC - minC + 1; - const bs = i === 0 ? 20 : 16; - const startX = Math.floor((w - pw * bs) / 2); - const baseY = i * slotH + Math.floor((slotH - ph * bs) / 2); - - shape.forEach(([r, c]) => { - const px = startX + (c - minC) * bs; - const py = baseY + (r - minR) * bs; - const s = bs - 1; - const color = COLORS[PIECE_IDX[type]]; - const alpha = i === 0 ? 1 : 0.65 - i * 0.1; - - nextCtx.save(); - nextCtx.globalAlpha = alpha; - const grad = nextCtx.createLinearGradient(px, py, px + s, py + s); - grad.addColorStop(0, lighten(color, 40)); - grad.addColorStop(1, darken(color, 30)); - nextCtx.fillStyle = grad; - nextCtx.fillRect(px + 1, py + 1, s - 1, s - 1); - nextCtx.fillStyle = lighten(color, 60); - nextCtx.fillRect(px + 1, py + 1, s - 1, 2); - nextCtx.fillRect(px + 1, py + 1, 2, s - 1); - nextCtx.fillStyle = darken(color, 50); - nextCtx.fillRect(px + 1, py + s - 2, s - 1, 2); - nextCtx.fillRect(px + s - 2, py + 1, 2, s - 1); - nextCtx.restore(); - }); - }); -} - -function drawHold() { - drawMiniPiece(holdCtx, holdCvs, held); - if (!canHold && held) { - holdCtx.fillStyle = 'rgba(0,0,0,0.5)'; - holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height); - } -} - -// ═══════════════════════════════════════════════════════════════ -// UI -// ═══════════════════════════════════════════════════════════════ -const scoreEl = document.getElementById('score-display'); -const levelEl = document.getElementById('level-display'); -const linesEl = document.getElementById('lines-display'); -const levelBar = document.getElementById('level-bar'); -const comboBox = document.getElementById('combo-box'); -const comboDis = document.getElementById('combo-display'); - -function updateUI() { - scoreEl.textContent = score.toLocaleString(); - levelEl.textContent = level; - linesEl.textContent = lines; - const pct = ((lines % 10) / 10) * 100; - levelBar.style.width = pct + '%'; - - if (combo > 0) { - comboBox.style.display = 'block'; - comboDis.textContent = 'x' + (combo + 1); - } else { - comboBox.style.display = 'none'; - } -} - -// ═══════════════════════════════════════════════════════════════ -// OVERLAY -// ═══════════════════════════════════════════════════════════════ -const overlay = document.getElementById('overlay'); -const startBtn = document.getElementById('start-btn'); - -function showOverlay(title, msg, btnText) { - overlay.querySelector('h2').textContent = title; - overlay.querySelector('p').innerHTML = msg; - startBtn.textContent = btnText; - overlay.style.display = 'flex'; -} - -function hideOverlay() { - overlay.style.display = 'none'; -} - -startBtn.addEventListener('click', () => { - hideOverlay(); - initGame(); - lastTime = null; - started = true; - animId = requestAnimationFrame(gameLoop); -}); - -// ═══════════════════════════════════════════════════════════════ -// KEYBOARD -// ═══════════════════════════════════════════════════════════════ -const DAS_DELAY = 170; // ms before auto-repeat -const DAS_REPEAT = 50; // ms between repeats - -let dasKey = null, dasTimer = null, dasRepeat = null; - -function startDAS(key) { - if (dasKey === key) return; - stopDAS(); - dasKey = key; - applyKey(key); - dasTimer = setTimeout(() => { - dasRepeat = setInterval(() => applyKey(key), DAS_REPEAT); - }, DAS_DELAY); -} - -function stopDAS(key) { - if (key && dasKey !== key) return; - clearTimeout(dasTimer); - clearInterval(dasRepeat); - dasKey = null; -} - -function applyKey(key) { - if (key === 'ArrowLeft') moveLeft(); - if (key === 'ArrowRight') moveRight(); - if (key === 'ArrowDown') softDrop(); -} - -window.addEventListener('keydown', e => { - if (!started) return; - - // Pause toggle - if (e.code === 'KeyP') { - if (gameOver) return; - paused = !paused; - if (!paused) { lastTime = null; } - return; - } - - if (paused || gameOver) return; - - switch (e.code) { - case 'ArrowLeft': e.preventDefault(); startDAS('ArrowLeft'); break; - case 'ArrowRight': e.preventDefault(); startDAS('ArrowRight'); break; - case 'ArrowDown': e.preventDefault(); startDAS('ArrowDown'); break; - case 'ArrowUp': e.preventDefault(); rotateCW(); break; - case 'KeyX': e.preventDefault(); rotateCW(); break; - case 'KeyZ': e.preventDefault(); rotateCCW(); break; - case 'Space': e.preventDefault(); hardDrop(); break; - case 'KeyC': e.preventDefault(); holdPiece(); break; - } -}); - -window.addEventListener('keyup', e => { - if (['ArrowLeft','ArrowRight','ArrowDown'].includes(e.code)) { - stopDAS(e.code); - } -}); - -// ═══════════════════════════════════════════════════════════════ -// COLOUR HELPERS -// ═══════════════════════════════════════════════════════════════ -function parseHex(hex) { - const n = parseInt(hex.replace('#',''), 16); - return [(n >> 16) & 255, (n >> 8) & 255, n & 255]; -} -function toHex([r, g, b]) { - return '#' + [r, g, b].map(v => Math.min(255, Math.max(0, v)).toString(16).padStart(2,'0')).join(''); -} -function lighten(hex, amt) { return toHex(parseHex(hex).map(v => v + amt)); } -function darken(hex, amt) { return toHex(parseHex(hex).map(v => v - amt)); } - -// ═══════════════════════════════════════════════════════════════ -// INITIAL RENDER -// ═══════════════════════════════════════════════════════════════ -(function initialDraw() { - ctx.fillStyle = '#090918'; - ctx.fillRect(0, 0, canvas.width, canvas.height); - // subtle grid - ctx.strokeStyle = '#12122a'; - ctx.lineWidth = 0.5; - for (let c = 1; c < COLS; c++) { - ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke(); - } - for (let r = 1; r < ROWS; r++) { - ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke(); - } - holdCtx.fillStyle = '#0d0d1f'; holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height); - nextCtx.fillStyle = '#0d0d1f'; nextCtx.fillRect(0, 0, nextCvs.width, nextCvs.height); -})(); -</script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2301 +0,0 @@ -{ - "name": "loop-bench-u5h42hq_", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-u5h42hq_", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,19 +0,0 @@ -{ - "name": "loop-bench-u5h42hq_", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "eslint": "^10.2.0", - "jscpd": "^4.0.8" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:35:37.902Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 18, - "tokens": 111, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/index.html @@ -1,78 +0,0 @@ -<!DOCTYPE html> -<html lang="es"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <link rel="stylesheet" href="styles/main.css" /> -</head> -<body> - <h1>TETRIS</h1> - - <div class="game-wrapper"> - - <!-- ── Left panel: HOLD + controls info ─────────────────────────── --> - <div class="side-panel"> - <div class="panel-box"> - <div class="panel-label">Hold</div> - <canvas id="hold-canvas" width="96" height="72"></canvas> - </div> - - <div class="panel-box"> - <div class="panel-label">Líneas</div> - <div class="panel-value" id="lines-val">0</div> - </div> - - <div class="panel-box"> - <div class="panel-label">Nivel</div> - <div class="panel-value" id="level-val">1</div> - </div> - - <div class="panel-box" style="min-height:36px;"> - <div id="combo-val"></div> - </div> - </div> - - <!-- ── Board ──────────────────────────────────────────────────────── --> - <div class="board-container"> - <canvas id="board"></canvas> - <canvas id="ui"></canvas> - </div> - - <!-- ── Right panel: SCORE + NEXT ─────────────────────────────────── --> - <div class="side-panel right"> - <div class="panel-box"> - <div class="panel-label">Puntaje</div> - <div class="panel-value large" id="score-val">0</div> - </div> - - <div class="panel-box"> - <div class="panel-label">Siguiente</div> - <div class="next-list" id="next-list"> - <canvas width="96" height="72"></canvas> - <canvas width="96" height="72"></canvas> - <canvas width="96" height="72"></canvas> - <canvas width="96" height="72"></canvas> - <canvas width="96" height="72"></canvas> - </div> - </div> - </div> - - </div><!-- .game-wrapper --> - - <!-- ── Controls legend ──────────────────────────────────────────────── --> - <div class="controls"> - <div class="ctrl-item"><kbd>←</kbd><kbd>→</kbd> Mover</div> - <div class="ctrl-item"><kbd>↑</kbd> / <kbd>X</kbd> Rotar CW</div> - <div class="ctrl-item"><kbd>Z</kbd> / <kbd>Ctrl</kbd> Rotar CCW</div> - <div class="ctrl-item"><kbd>R</kbd> Rotar 180°</div> - <div class="ctrl-item"><kbd>↓</kbd> Bajar suave</div> - <div class="ctrl-item"><kbd>Space</kbd> Hard drop</div> - <div class="ctrl-item"><kbd>C</kbd> / <kbd>Shift</kbd> Hold</div> - <div class="ctrl-item"><kbd>P</kbd> / <kbd>Esc</kbd> Pausa</div> - <div class="ctrl-item"><kbd>Enter</kbd> Iniciar / Reiniciar</div> - </div> - - <script src="dist/bundle.js" type="module"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,3068 +0,0 @@ -{ - "name": "loop-bench-f6z2ybi3", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-f6z2ybi3", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,23 +0,0 @@ -{ - "name": "loop-bench-f6z2ybi3", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,253 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:50:04.386Z", - "formats": { - "css": { - "sources": { - "styles/main.css": { - "lines": 155, - "tokens": 941, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 155, - "tokens": 941, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "typescript": { - "sources": { - "src/types.ts": { - "lines": 37, - "tokens": 292, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/renderer.ts": { - "lines": 288, - "tokens": 3277, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/pieces.ts": { - "lines": 126, - "tokens": 2560, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/main.ts": { - "lines": 292, - "tokens": 2339, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/game.ts": { - "lines": 268, - "tokens": 2817, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/constants.ts": { - "lines": 42, - "tokens": 284, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "src/board.ts": { - "lines": 68, - "tokens": 861, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 1121, - "tokens": 12430, - "sources": 7, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 15, - "tokens": 96, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 22, - "tokens": 139, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 37, - "tokens": 235, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 77, - "tokens": 918, - "sources": 1, - "clones": 2, - "duplicatedLines": 10, - "duplicatedTokens": 166, - "percentage": 12.99, - "percentageTokens": 18.08, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 77, - "tokens": 918, - "sources": 1, - "clones": 1, - "duplicatedLines": 5, - "duplicatedTokens": 83, - "percentage": 6.49, - "percentageTokens": 9.04, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1390, - "tokens": 14524, - "sources": 11, - "clones": 1, - "duplicatedLines": 5, - "duplicatedTokens": 83, - "percentage": 0.36, - "percentageTokens": 0.57, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [ - { - "format": "markup", - "lines": 6, - "fragment": ">\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n </", - "tokens": 0, - "firstFile": { - "name": "index.html", - "start": 52, - "end": 57, - "startLoc": { - "line": 52, - "column": 7, - "position": 499 - }, - "endLoc": { - "line": 57, - "column": 3, - "position": 582 - } - }, - "secondFile": { - "name": "index.html", - "start": 51, - "end": 55, - "startLoc": { - "line": 51, - "column": 2, - "position": 479 - }, - "endLoc": { - "line": 55, - "column": 2, - "position": 542 - } - } - } - ] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/board.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/board.ts @@ -1,69 +0,0 @@ -import { BOARD_COLS, BOARD_ROWS } from './constants.js'; -import type { Grid, CellColor, Vec2, ActivePiece } from './types.js'; -import { getShape } from './pieces.js'; - -/** Create a fresh empty board */ -export function createBoard(): Grid { - return Array.from({ length: BOARD_ROWS }, () => - Array<CellColor>(BOARD_COLS).fill(null) - ); -} - -/** Deep-copy a board */ -export function cloneBoard(board: Grid): Grid { - return board.map(row => [...row]); -} - -/** Returns all [row, col] cells occupied by the piece in absolute coords */ -export function getPieceCells(piece: ActivePiece): Vec2[] { - const shape = getShape(piece.type, piece.rotIndex); - const cells: Vec2[] = []; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - cells.push({ x: piece.pos.x + c, y: piece.pos.y + r }); - } - } - } - return cells; -} - -/** Returns true if the piece is in a valid position (no collision) */ -export function isValid(board: Grid, piece: ActivePiece): boolean { - for (const { x, y } of getPieceCells(piece)) { - if (x < 0 || x >= BOARD_COLS) return false; - if (y >= BOARD_ROWS) return false; - if (y >= 0 && board[y][x] !== null) return false; - } - return true; -} - -/** Lock the current piece onto the board and return the new board */ -export function lockPiece(board: Grid, piece: ActivePiece, color: string): Grid { - const next = cloneBoard(board); - for (const { x, y } of getPieceCells(piece)) { - if (y >= 0) next[y][x] = color; - } - return next; -} - -/** Clear full lines, return [newBoard, linesCleared] */ -export function clearLines(board: Grid): [Grid, number] { - const remaining = board.filter(row => row.some(c => c === null)); - const cleared = BOARD_ROWS - remaining.length; - const newRows = Array.from({ length: cleared }, () => - Array<CellColor>(BOARD_COLS).fill(null) - ); - return [[...newRows, ...remaining], cleared]; -} - -/** Ghost-piece: find the lowest valid position by dropping straight down */ -export function getGhostPiece(board: Grid, piece: ActivePiece): ActivePiece { - let ghost: ActivePiece = { ...piece, pos: { ...piece.pos } }; - while (true) { - const next: ActivePiece = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } }; - if (!isValid(board, next)) break; - ghost = next; - } - return ghost; -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/constants.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/constants.ts @@ -1,43 +0,0 @@ -// Board dimensions -export const BOARD_COLS = 10; -export const BOARD_ROWS = 20; -export const HIDDEN_ROWS = 2; // rows above visible area for spawn - -// Rendering -export const CELL_SIZE = 30; -export const BORDER_RADIUS = 3; - -// Scoring (number of lines → points multiplied by level) -export const LINE_SCORE: Record<number, number> = { - 1: 100, - 2: 300, - 3: 500, - 4: 800, -}; - -// Soft-drop points per cell -export const SOFT_DROP_SCORE = 1; -// Hard-drop points per cell -export const HARD_DROP_SCORE = 2; - -// Lines to clear to advance a level -export const LINES_PER_LEVEL = 10; - -// Fall interval in ms (level 1 → INITIAL_SPEED, decreases each level) -export const INITIAL_SPEED = 800; -export const SPEED_DECREMENT = 60; // ms less per level -export const MIN_SPEED = 80; - -// Lock-delay in ms (piece locks this long after landing) -export const LOCK_DELAY = 500; -// Max lock-delay resets before forcing lock -export const MAX_LOCK_RESETS = 15; - -// DAS / ARR (keyboard auto-repeat) -export const DAS_DELAY = 170; // ms before auto-repeat starts -export const ARR_INTERVAL = 50; // ms between auto-repeat moves - -// Colors -export const BOARD_BG = '#0d0d1a'; -export const GRID_COLOR = 'rgba(255,255,255,0.04)'; -export const GHOST_ALPHA = 0.18; diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/game.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/game.ts @@ -1,269 +0,0 @@ -import { - BOARD_COLS, HIDDEN_ROWS, - LINE_SCORE, SOFT_DROP_SCORE, HARD_DROP_SCORE, - LINES_PER_LEVEL, INITIAL_SPEED, SPEED_DECREMENT, MIN_SPEED, - LOCK_DELAY, MAX_LOCK_RESETS, -} from './constants.js'; -import type { GameState, ActivePiece, PieceType } from './types.js'; -import { PIECE_TYPES, getDef, getShape, getKicks } from './pieces.js'; -import { - createBoard, isValid, lockPiece, clearLines, getGhostPiece, -} from './board.js'; - -// ─── Bag randomizer ────────────────────────────────────────────────────────── - -function newBag(): PieceType[] { - const bag = [...PIECE_TYPES]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - return bag; -} - -function refillQueue(bag: PieceType[], next: PieceType[]): [PieceType[], PieceType[]] { - const b = [...bag]; - const n = [...next]; - while (n.length < 6) { - if (b.length === 0) b.push(...newBag()); - n.push(b.shift()!); - } - return [b, n]; -} - -// ─── Piece spawning ────────────────────────────────────────────────────────── - -function spawnPiece(type: PieceType): ActivePiece { - const shape = getShape(type, 0); - // Find the leftmost non-empty column to calculate centre spawn - const cols = shape[0].length; - return { - type, - rotIndex: 0, - pos: { - x: Math.floor(BOARD_COLS / 2) - Math.floor(cols / 2), - y: -HIDDEN_ROWS, - }, - }; -} - -// ─── Level / speed ─────────────────────────────────────────────────────────── - -export function levelSpeed(level: number): number { - return Math.max(MIN_SPEED, INITIAL_SPEED - (level - 1) * SPEED_DECREMENT); -} - -// ─── Initial state ─────────────────────────────────────────────────────────── - -export function createInitialState(): GameState { - let bag: PieceType[] = newBag(); - let next: PieceType[] = []; - [bag, next] = refillQueue(bag, next); - - const type = next.shift()!; - [bag, next] = refillQueue(bag, next); - - return { - board: createBoard(), - current: spawnPiece(type), - held: null, - holdUsed: false, - bag, - next, - score: 0, - lines: 0, - level: 1, - status: 'idle', - combo: -1, - }; -} - -// ─── Action results ────────────────────────────────────────────────────────── - -export type ActionResult = - | { type: 'ok'; state: GameState } - | { type: 'locked'; state: GameState; linesCleared: number } - | { type: 'gameover'; state: GameState } - | { type: 'noop' }; - -// ─── Move helpers ──────────────────────────────────────────────────────────── - -function tryMove(state: GameState, dx: number, dy: number): ActivePiece | null { - const moved: ActivePiece = { - ...state.current, - pos: { x: state.current.pos.x + dx, y: state.current.pos.y + dy }, - }; - return isValid(state.board, moved) ? moved : null; -} - -function tryRotate(state: GameState, dir: 1 | -1): ActivePiece | null { - const fromRot = state.current.rotIndex; - const toRot = (fromRot + dir + 4) % 4; - const candidate: ActivePiece = { ...state.current, rotIndex: toRot }; - const kicks = getKicks(state.current.type, fromRot, toRot); - - for (const [dx, dy] of kicks) { - const kicked: ActivePiece = { - ...candidate, - pos: { x: candidate.pos.x + dx, y: candidate.pos.y - dy }, - }; - if (isValid(state.board, kicked)) return kicked; - } - return null; -} - -// Lock piece, clear lines, spawn next ───────────────────────────────────────── - -function lockAndSpawn(state: GameState): ActionResult { - const color = getDef(state.current.type).color; - let board = lockPiece(state.board, state.current, color); - const [newBoard, linesCleared] = clearLines(board); - board = newBoard; - - // Score - let score = state.score; - let combo = state.combo; - if (linesCleared > 0) { - combo += 1; - const base = LINE_SCORE[linesCleared] ?? 0; - score += base * state.level + (combo > 0 ? 50 * combo * state.level : 0); - } else { - combo = -1; - } - - const lines = state.lines + linesCleared; - const level = Math.floor(lines / LINES_PER_LEVEL) + 1; - - // Next piece - let { bag, next } = state; - const type = next.shift()!; - [bag, next] = refillQueue(bag, next); - - const newPiece = spawnPiece(type); - - // Game over if spawn position is occupied - if (!isValid(board, newPiece)) { - return { - type: 'gameover', - state: { ...state, board, status: 'gameover', score, lines, level, combo }, - }; - } - - return { - type: 'locked', - state: { - ...state, - board, - current: newPiece, - holdUsed: false, - bag, - next, - score, - lines, - level, - combo, - }, - linesCleared, - }; -} - -// ─── Public actions ─────────────────────────────────────────────────────────── - -export function actionMoveLeft(state: GameState): ActionResult { - const moved = tryMove(state, -1, 0); - if (!moved) return { type: 'noop' }; - return { type: 'ok', state: { ...state, current: moved } }; -} - -export function actionMoveRight(state: GameState): ActionResult { - const moved = tryMove(state, 1, 0); - if (!moved) return { type: 'noop' }; - return { type: 'ok', state: { ...state, current: moved } }; -} - -export function actionSoftDrop(state: GameState): ActionResult { - const moved = tryMove(state, 0, 1); - if (!moved) return { type: 'noop' }; // signal: piece should lock - return { - type: 'ok', - state: { ...state, current: moved, score: state.score + SOFT_DROP_SCORE }, - }; -} - -export function actionHardDrop(state: GameState): ActionResult { - let s = state; - let cells = 0; - while (true) { - const moved = tryMove(s, 0, 1); - if (!moved) break; - s = { ...s, current: moved }; - cells++; - } - s = { ...s, score: s.score + cells * HARD_DROP_SCORE }; - return lockAndSpawn(s); -} - -export function actionRotateCW(state: GameState): ActionResult { - const rotated = tryRotate(state, 1); - if (!rotated) return { type: 'noop' }; - return { type: 'ok', state: { ...state, current: rotated } }; -} - -export function actionRotateCCW(state: GameState): ActionResult { - const rotated = tryRotate(state, -1); - if (!rotated) return { type: 'noop' }; - return { type: 'ok', state: { ...state, current: rotated } }; -} - -export function actionRotate180(state: GameState): ActionResult { - // Try both CW twice - const r1 = tryRotate(state, 1); - if (!r1) return { type: 'noop' }; - const r2 = tryRotate({ ...state, current: r1 }, 1); - if (!r2) return { type: 'noop' }; - return { type: 'ok', state: { ...state, current: r2 } }; -} - -export function actionGravity(state: GameState): ActionResult { - const moved = tryMove(state, 0, 1); - if (!moved) return { type: 'noop' }; // signal: lock - return { type: 'ok', state: { ...state, current: moved } }; -} - -export function actionLock(state: GameState): ActionResult { - return lockAndSpawn(state); -} - -export function actionHold(state: GameState): ActionResult { - if (state.holdUsed) return { type: 'noop' }; - - const incoming = state.held ?? state.next[0]; - let { bag, next } = state; - - if (state.held === null) { - // Take from next queue - next = next.slice(1); - [bag, next] = refillQueue(bag, next); - } - - const newCurrent = spawnPiece(incoming); - if (!isValid(state.board, newCurrent)) { - return { type: 'gameover', state: { ...state, status: 'gameover' } }; - } - - return { - type: 'ok', - state: { - ...state, - current: newCurrent, - held: state.current.type, - holdUsed: true, - bag, - next, - }, - }; -} - -export function getGhost(state: GameState): ActivePiece { - return getGhostPiece(state.board, state.current); -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/main.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/main.ts @@ -1,293 +0,0 @@ -import { - DAS_DELAY, ARR_INTERVAL, LOCK_DELAY, MAX_LOCK_RESETS, -} from './constants.js'; -import type { GameState } from './types.js'; -import { - createInitialState, levelSpeed, - actionMoveLeft, actionMoveRight, actionSoftDrop, actionHardDrop, - actionRotateCW, actionRotateCCW, actionRotate180, - actionGravity, actionLock, actionHold, - type ActionResult, -} from './game.js'; -import { initRenderer, render, renderSidePanels } from './renderer.js'; - -// ─── DOM references ─────────────────────────────────────────────────────────── - -const boardCanvas = document.getElementById('board') as HTMLCanvasElement; -const uiCanvas = document.getElementById('ui') as HTMLCanvasElement; -const holdCanvas = document.getElementById('hold-canvas') as HTMLCanvasElement; -const nextEl = document.getElementById('next-list') as HTMLElement; -const scoreEl = document.getElementById('score-val') as HTMLElement; -const linesEl = document.getElementById('lines-val') as HTMLElement; -const levelEl = document.getElementById('level-val') as HTMLElement; -const comboEl = document.getElementById('combo-val') as HTMLElement; - -// ─── Game state ─────────────────────────────────────────────────────────────── - -let state: GameState = createInitialState(); - -// Gravity / lock timers -let gravityTimer: ReturnType<typeof setTimeout> | null = null; -let lockTimer: ReturnType<typeof setTimeout> | null = null; -let lockResets = 0; - -// DAS / ARR -let dasTimer: ReturnType<typeof setTimeout> | null = null; -let arrTimer: ReturnType<typeof setInterval> | null = null; -let dasAction: (() => void) | null = null; - -// ─── Init ───────────────────────────────────────────────────────────────────── - -initRenderer(boardCanvas, uiCanvas); -renderFrame(); - -// ─── Render loop ────────────────────────────────────────────────────────────── - -function renderFrame(): void { - render(state); - renderSidePanels(state, holdCanvas, nextEl, scoreEl, linesEl, levelEl, comboEl); - requestAnimationFrame(renderFrame); -} - -// ─── Game loop ──────────────────────────────────────────────────────────────── - -function scheduleGravity(): void { - clearTimeout(gravityTimer ?? undefined); - gravityTimer = setTimeout(gravityTick, levelSpeed(state.level)); -} - -function cancelGravity(): void { - clearTimeout(gravityTimer ?? undefined); - gravityTimer = null; -} - -function gravityTick(): void { - if (state.status !== 'playing') return; - const result = actionGravity(state); - if (result.type === 'ok') { - state = result.state; - cancelLock(); - scheduleGravity(); - } else { - // Piece can't move down → start lock delay - scheduleLock(); - } -} - -function scheduleLock(): void { - if (lockTimer !== null) return; // already counting - lockTimer = setTimeout(forceLock, LOCK_DELAY); -} - -function cancelLock(): void { - clearTimeout(lockTimer ?? undefined); - lockTimer = null; - lockResets = 0; -} - -function resetLock(): void { - if (lockResets >= MAX_LOCK_RESETS) return; - clearTimeout(lockTimer ?? undefined); - lockTimer = setTimeout(forceLock, LOCK_DELAY); - lockResets++; -} - -function forceLock(): void { - lockTimer = null; - if (state.status !== 'playing') return; - applyResult(actionLock(state)); -} - -// ─── Apply action results ───────────────────────────────────────────────────── - -function applyResult(result: ActionResult): void { - if (result.type === 'noop') return; - - if (result.type === 'gameover') { - state = result.state; - cancelGravity(); - cancelLock(); - return; - } - - if (result.type === 'locked') { - state = result.state; - cancelLock(); - scheduleGravity(); - if (result.linesCleared > 0) flashLines(); - return; - } - - // 'ok' - state = result.state; -} - -// ─── Keyboard handling ──────────────────────────────────────────────────────── - -function startDAS(action: () => void): void { - stopDAS(); - action(); - dasAction = action; - dasTimer = setTimeout(() => { - arrTimer = setInterval(() => { if (dasAction) dasAction(); }, ARR_INTERVAL); - }, DAS_DELAY); -} - -function stopDAS(): void { - clearTimeout(dasTimer ?? undefined); - clearInterval(arrTimer ?? undefined); - dasTimer = null; - arrTimer = null; - dasAction = null; -} - -const heldKeys = new Set<string>(); - -window.addEventListener('keydown', (e: KeyboardEvent) => { - if (heldKeys.has(e.code)) return; // prevent re-fire on key-hold - heldKeys.add(e.code); - - // Start / restart - if (e.code === 'Enter') { - if (state.status === 'idle' || state.status === 'gameover') { - startGame(); - } - return; - } - - // Pause - if (e.code === 'Escape' || e.code === 'KeyP') { - if (state.status === 'playing') { - state = { ...state, status: 'paused' }; - cancelGravity(); - } else if (state.status === 'paused') { - state = { ...state, status: 'playing' }; - scheduleGravity(); - } - return; - } - - if (state.status !== 'playing') return; - - switch (e.code) { - case 'ArrowLeft': - case 'KeyA': - e.preventDefault(); - startDAS(() => { - const r = actionMoveLeft(state); - if (r.type === 'ok') { state = r.state; afterMove(); } - }); - break; - - case 'ArrowRight': - case 'KeyD': - e.preventDefault(); - startDAS(() => { - const r = actionMoveRight(state); - if (r.type === 'ok') { state = r.state; afterMove(); } - }); - break; - - case 'ArrowDown': - case 'KeyS': - e.preventDefault(); - startDAS(() => { - const r = actionSoftDrop(state); - if (r.type === 'ok') { - state = r.state; - cancelGravity(); - scheduleGravity(); - resetLockOnMove(); - } - // if noop → piece landed, lock timer already running - }); - break; - - case 'ArrowUp': - case 'KeyW': - case 'KeyX': - e.preventDefault(); - applyRotate(actionRotateCW(state)); - break; - - case 'KeyZ': - case 'ControlLeft': - case 'ControlRight': - e.preventDefault(); - applyRotate(actionRotateCCW(state)); - break; - - case 'KeyA': break; // already handled above - - case 'Space': - e.preventDefault(); - cancelGravity(); - cancelLock(); - applyResult(actionHardDrop(state)); - if (state.status === 'playing') scheduleGravity(); - break; - - case 'ShiftLeft': - case 'ShiftRight': - case 'KeyC': { - e.preventDefault(); - const r = actionHold(state); - applyResult(r); - if (state.status === 'playing') { - cancelLock(); - cancelGravity(); - scheduleGravity(); - } - break; - } - - case 'KeyR': - e.preventDefault(); - applyRotate(actionRotate180(state)); - break; - } -}); - -window.addEventListener('keyup', (e: KeyboardEvent) => { - heldKeys.delete(e.code); - if ( - e.code === 'ArrowLeft' || e.code === 'ArrowRight' || - e.code === 'ArrowDown' || e.code === 'KeyA' || - e.code === 'KeyD' || e.code === 'KeyS' - ) { - stopDAS(); - } -}); - -function afterMove(): void { - // If piece is on ground, reset lock timer so player can slide - resetLockOnMove(); -} - -function resetLockOnMove(): void { - if (lockTimer !== null) resetLock(); -} - -function applyRotate(result: ActionResult): void { - if (result.type === 'ok') { - state = result.state; - if (lockTimer !== null) resetLock(); - } -} - -// ─── Start / restart ────────────────────────────────────────────────────────── - -function startGame(): void { - cancelGravity(); - cancelLock(); - stopDAS(); - state = { ...createInitialState(), status: 'playing' }; - scheduleGravity(); -} - -// ─── Flash effect for line clears (visual feedback) ─────────────────────────── - -function flashLines(): void { - boardCanvas.classList.add('flash'); - setTimeout(() => boardCanvas.classList.remove('flash'), 180); -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/pieces.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/pieces.ts @@ -1,127 +0,0 @@ -import type { PieceDef, PieceType } from './types.js'; - -/** - * All 7 tetrominoes in their 4 rotation states. - * Each rotation is a 4x4 (or smaller) grid of 0/1. - * Rotations go clockwise: 0=spawn, 1=R, 2=2, 3=L. - */ -const PIECE_DEFS: Record<PieceType, PieceDef> = { - I: { - shapes: [ - [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]], - [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]], - [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]], - ], - color: '#00e5ff', - highlight: '#80f4ff', - shadow: '#007fa8', - }, - O: { - shapes: [ - [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], - ], - color: '#ffe000', - highlight: '#fff380', - shadow: '#a08000', - }, - T: { - shapes: [ - [[0,1,0,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,0,0],[0,1,1,0],[0,1,0,0],[0,0,0,0]], - [[0,0,0,0],[1,1,1,0],[0,1,0,0],[0,0,0,0]], - [[0,1,0,0],[1,1,0,0],[0,1,0,0],[0,0,0,0]], - ], - color: '#c000ff', - highlight: '#e080ff', - shadow: '#6a00a0', - }, - S: { - shapes: [ - [[0,1,1,0],[1,1,0,0],[0,0,0,0],[0,0,0,0]], - [[0,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,0,0]], - [[0,0,0,0],[0,1,1,0],[1,1,0,0],[0,0,0,0]], - [[1,0,0,0],[1,1,0,0],[0,1,0,0],[0,0,0,0]], - ], - color: '#00d000', - highlight: '#80ff80', - shadow: '#006800', - }, - Z: { - shapes: [ - [[1,1,0,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,0,1,0],[0,1,1,0],[0,1,0,0],[0,0,0,0]], - [[0,0,0,0],[1,1,0,0],[0,1,1,0],[0,0,0,0]], - [[0,1,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]], - ], - color: '#ff2020', - highlight: '#ff8080', - shadow: '#900000', - }, - J: { - shapes: [ - [[1,0,0,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,1,0],[0,1,0,0],[0,1,0,0],[0,0,0,0]], - [[0,0,0,0],[1,1,1,0],[0,0,1,0],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[1,1,0,0],[0,0,0,0]], - ], - color: '#1a6fff', - highlight: '#80b4ff', - shadow: '#003da0', - }, - L: { - shapes: [ - [[0,0,1,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]], - [[0,1,0,0],[0,1,0,0],[0,1,1,0],[0,0,0,0]], - [[0,0,0,0],[1,1,1,0],[1,0,0,0],[0,0,0,0]], - [[1,1,0,0],[0,1,0,0],[0,1,0,0],[0,0,0,0]], - ], - color: '#ff8c00', - highlight: '#ffc060', - shadow: '#a04a00', - }, -}; - -export const PIECE_TYPES: PieceType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L']; - -export function getDef(type: PieceType): PieceDef { - return PIECE_DEFS[type]; -} - -export function getShape(type: PieceType, rotIndex: number): number[][] { - return PIECE_DEFS[type].shapes[rotIndex]; -} - -/** SRS wall-kick offsets for J/L/S/T/Z pieces. - * Key: `${fromRot}>${toRot}` → array of [dx,dy] tests */ -const KICKS_JLSTZ: Record<string, [number,number][]> = { - '0>1': [[ 0,0],[-1,0],[-1,1],[ 0,-2],[-1,-2]], - '1>0': [[ 0,0],[ 1,0],[ 1,-1],[ 0, 2],[ 1, 2]], - '1>2': [[ 0,0],[ 1,0],[ 1,-1],[ 0, 2],[ 1, 2]], - '2>1': [[ 0,0],[-1,0],[-1,1],[ 0,-2],[-1,-2]], - '2>3': [[ 0,0],[ 1,0],[ 1,1],[ 0,-2],[ 1,-2]], - '3>2': [[ 0,0],[-1,0],[-1,-1],[ 0, 2],[-1, 2]], - '3>0': [[ 0,0],[-1,0],[-1,-1],[ 0, 2],[-1, 2]], - '0>3': [[ 0,0],[ 1,0],[ 1,1],[ 0,-2],[ 1,-2]], -}; - -const KICKS_I: Record<string, [number,number][]> = { - '0>1': [[ 0,0],[-2,0],[ 1,0],[-2,-1],[ 1, 2]], - '1>0': [[ 0,0],[ 2,0],[-1,0],[ 2, 1],[-1,-2]], - '1>2': [[ 0,0],[-1,0],[ 2,0],[-1, 2],[ 2,-1]], - '2>1': [[ 0,0],[ 1,0],[-2,0],[ 1,-2],[-2, 1]], - '2>3': [[ 0,0],[ 2,0],[-1,0],[ 2, 1],[-1,-2]], - '3>2': [[ 0,0],[-2,0],[ 1,0],[-2,-1],[ 1, 2]], - '3>0': [[ 0,0],[ 1,0],[-2,0],[ 1,-2],[-2, 1]], - '0>3': [[ 0,0],[-1,0],[ 2,0],[-1, 2],[ 2,-1]], -}; - -export function getKicks(type: PieceType, fromRot: number, toRot: number): [number,number][] { - const key = `${fromRot}>${toRot}`; - if (type === 'I') return KICKS_I[key] ?? [[0,0]]; - if (type === 'O') return [[0,0]]; - return KICKS_JLSTZ[key] ?? [[0,0]]; -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/renderer.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/renderer.ts @@ -1,289 +0,0 @@ -import { - BOARD_COLS, BOARD_ROWS, CELL_SIZE, BORDER_RADIUS, - BOARD_BG, GRID_COLOR, GHOST_ALPHA, -} from './constants.js'; -import type { GameState, ActivePiece, PieceType } from './types.js'; -import { getDef, getShape } from './pieces.js'; -import { getPieceCells } from './board.js'; -import { getGhost } from './game.js'; - -// Canvas / context references (set once in init) -let boardCtx: CanvasRenderingContext2D; -let uiCtx: CanvasRenderingContext2D; - -const PANEL_CELL = 24; // cell size for side panels - -// ─── Init ───────────────────────────────────────────────────────────────────── - -export function initRenderer( - boardCanvas: HTMLCanvasElement, - uiCanvas: HTMLCanvasElement, -): void { - boardCanvas.width = BOARD_COLS * CELL_SIZE; - boardCanvas.height = BOARD_ROWS * CELL_SIZE; - uiCanvas.width = boardCanvas.width; - uiCanvas.height = boardCanvas.height; - - boardCtx = boardCanvas.getContext('2d')!; - uiCtx = uiCanvas.getContext('2d')!; -} - -// ─── Draw helpers ───────────────────────────────────────────────────────────── - -function drawCell( - ctx: CanvasRenderingContext2D, - col: number, - row: number, - color: string, - highlight: string, - shadow: string, - size: number = CELL_SIZE, - alpha: number = 1, - ox: number = 0, - oy: number = 0, -): void { - const x = ox + col * size; - const y = oy + row * size; - const pad = 1; - const r = BORDER_RADIUS; - - ctx.save(); - ctx.globalAlpha = alpha; - - // Main fill - ctx.fillStyle = color; - ctx.beginPath(); - ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r); - ctx.fill(); - - // Top-left highlight - ctx.fillStyle = highlight; - ctx.beginPath(); - ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r); - ctx.fill(); - - // Draw the main face over it (inner rect) - const bevel = 4; - ctx.fillStyle = color; - ctx.beginPath(); - ctx.roundRect(x + pad + bevel, y + pad + bevel, - size - pad * 2 - bevel * 2, size - pad * 2 - bevel * 2, Math.max(0, r - 1)); - ctx.fill(); - - // Bottom-right shadow strip - ctx.fillStyle = shadow; - ctx.beginPath(); - ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r); - ctx.clip(); - ctx.fillRect(x + pad, y + size - pad - bevel, size - pad * 2, bevel); - ctx.fillRect(x + size - pad - bevel, y + pad, bevel, size - pad * 2); - - ctx.restore(); -} - -function drawGrid(ctx: CanvasRenderingContext2D): void { - ctx.strokeStyle = GRID_COLOR; - ctx.lineWidth = 0.5; - for (let c = 0; c <= BOARD_COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * CELL_SIZE, 0); - ctx.lineTo(c * CELL_SIZE, BOARD_ROWS * CELL_SIZE); - ctx.stroke(); - } - for (let r = 0; r <= BOARD_ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * CELL_SIZE); - ctx.lineTo(BOARD_COLS * CELL_SIZE, r * CELL_SIZE); - ctx.stroke(); - } -} - -// ─── Main render ───────────────────────────────────────────────────────────── - -export function render(state: GameState): void { - renderBoard(state); - renderUI(state); -} - -function renderBoard(state: GameState): void { - const ctx = boardCtx; - const W = BOARD_COLS * CELL_SIZE; - const H = BOARD_ROWS * CELL_SIZE; - - // Background - ctx.fillStyle = BOARD_BG; - ctx.fillRect(0, 0, W, H); - drawGrid(ctx); - - // Locked cells - for (let r = 0; r < BOARD_ROWS; r++) { - for (let c = 0; c < BOARD_COLS; c++) { - const color = state.board[r][c]; - if (color) { - // Derive highlight/shadow from color (use getDef if we could, but - // the board only stores color strings; approximate shades) - drawCell(ctx, c, r, color, - lighten(color, 60), darken(color, 60)); - } - } - } - - if (state.status === 'playing' || state.status === 'paused') { - // Ghost piece - const ghost = getGhost(state); - const def = getDef(ghost.type); - for (const { x, y } of getPieceCells(ghost)) { - if (y >= 0) { - ctx.save(); - ctx.globalAlpha = GHOST_ALPHA; - ctx.fillStyle = def.color; - ctx.beginPath(); - ctx.roundRect(x * CELL_SIZE + 1, y * CELL_SIZE + 1, - CELL_SIZE - 2, CELL_SIZE - 2, BORDER_RADIUS); - ctx.fill(); - ctx.globalAlpha = GHOST_ALPHA * 2; - ctx.strokeStyle = def.color; - ctx.lineWidth = 1.5; - ctx.stroke(); - ctx.restore(); - } - } - - // Active piece - const pdef = getDef(state.current.type); - for (const { x, y } of getPieceCells(state.current)) { - if (y >= 0) { - drawCell(ctx, x, y, pdef.color, pdef.highlight, pdef.shadow); - } - } - } - - // Pause overlay - if (state.status === 'paused') { - ctx.save(); - ctx.fillStyle = 'rgba(0,0,0,0.55)'; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#fff'; - ctx.font = 'bold 32px "Segoe UI", sans-serif'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText('PAUSA', W / 2, H / 2); - ctx.restore(); - } - - // Game-over overlay - if (state.status === 'gameover') { - ctx.save(); - ctx.fillStyle = 'rgba(0,0,0,0.7)'; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#ff4444'; - ctx.font = 'bold 34px "Segoe UI", sans-serif'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText('GAME OVER', W / 2, H / 2 - 22); - ctx.fillStyle = '#ccc'; - ctx.font = '18px "Segoe UI", sans-serif'; - ctx.fillText('Presiona Enter para reiniciar', W / 2, H / 2 + 22); - ctx.restore(); - } - - // Idle overlay - if (state.status === 'idle') { - ctx.save(); - ctx.fillStyle = 'rgba(0,0,0,0.65)'; - ctx.fillRect(0, 0, W, H); - ctx.fillStyle = '#00e5ff'; - ctx.font = 'bold 38px "Segoe UI", sans-serif'; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillText('TETRIS', W / 2, H / 2 - 28); - ctx.fillStyle = '#aaa'; - ctx.font = '17px "Segoe UI", sans-serif'; - ctx.fillText('Presiona Enter para jugar', W / 2, H / 2 + 18); - ctx.restore(); - } -} - -// ─── UI canvas (side panels drawn into absolutely-positioned div) ───────────── - -export function renderSidePanels( - state: GameState, - holdEl: HTMLElement, - nextEl: HTMLElement, - scoreEl: HTMLElement, - linesEl: HTMLElement, - levelEl: HTMLElement, - comboEl: HTMLElement, -): void { - // Score numbers - scoreEl.textContent = state.score.toLocaleString(); - linesEl.textContent = state.lines.toString(); - levelEl.textContent = state.level.toString(); - comboEl.textContent = state.combo > 0 ? `${state.combo}x COMBO` : ''; - - // Hold canvas - drawMiniPiece(holdEl as HTMLCanvasElement, state.held, state.holdUsed); - - // Next canvases - const nextCanvases = nextEl.querySelectorAll<HTMLCanvasElement>('canvas'); - state.next.slice(0, 5).forEach((type, i) => { - if (nextCanvases[i]) drawMiniPiece(nextCanvases[i], type, false); - }); -} - -function drawMiniPiece(canvas: HTMLCanvasElement, type: PieceType | null, dim: boolean): void { - const ctx = canvas.getContext('2d')!; - const W = canvas.width; - const H = canvas.height; - ctx.clearRect(0, 0, W, H); - - if (!type) return; - - const def = getDef(type); - const shape = getShape(type, 0); - const size = PANEL_CELL; - - // Find bounding box - let minR = shape.length, maxR = 0, minC = shape[0].length, maxC = 0; - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - minR = Math.min(minR, r); maxR = Math.max(maxR, r); - minC = Math.min(minC, c); maxC = Math.max(maxC, c); - } - } - } - const bW = (maxC - minC + 1) * size; - const bH = (maxR - minR + 1) * size; - const ox = Math.floor((W - bW) / 2) - minC * size; - const oy = Math.floor((H - bH) / 2) - minR * size; - - for (let r = 0; r < shape.length; r++) { - for (let c = 0; c < shape[r].length; c++) { - if (shape[r][c]) { - drawCell(ctx, c, r, def.color, def.highlight, def.shadow, size, - dim ? 0.35 : 1, ox, oy); - } - } - } -} - -// ─── Colour utilities ───────────────────────────────────────────────────────── - -function parseHex(hex: string): [number,number,number] { - const n = parseInt(hex.replace('#', ''), 16); - return [(n >> 16) & 255, (n >> 8) & 255, n & 255]; -} - -function lighten(hex: string, amt: number): string { - const [r,g,b] = parseHex(hex); - return `rgb(${Math.min(255,r+amt)},${Math.min(255,g+amt)},${Math.min(255,b+amt)})`; -} - -function darken(hex: string, amt: number): string { - const [r,g,b] = parseHex(hex); - return `rgb(${Math.max(0,r-amt)},${Math.max(0,g-amt)},${Math.max(0,b-amt)})`; -} - -// Unused – kept for reference -export function renderUI(_state: GameState): void { /* side-panels handled separately */ } diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/types.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/src/types.ts @@ -1,38 +0,0 @@ -export type CellColor = string | null; -export type Grid = CellColor[][]; - -export interface Vec2 { - x: number; - y: number; -} - -export type PieceType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L'; - -export interface PieceDef { - shapes: number[][][]; // 4 rotation states - color: string; - highlight: string; - shadow: string; -} - -export interface ActivePiece { - type: PieceType; - rotIndex: number; // 0-3 - pos: Vec2; -} - -export type GameStatus = 'idle' | 'playing' | 'paused' | 'gameover'; - -export interface GameState { - board: Grid; - current: ActivePiece; - held: PieceType | null; - holdUsed: boolean; - bag: PieceType[]; - next: PieceType[]; // next 5 pieces - score: number; - lines: number; - level: number; - status: GameStatus; - combo: number; -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/styles/main.css b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/styles/main.css @@ -1,156 +0,0 @@ -/* ─── Reset & base ─────────────────────────────────────────────────────────── */ -*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - -body { - background: #07071a; - color: #e0e0e0; - font-family: 'Segoe UI', 'Helvetica Neue', Arial, sans-serif; - min-height: 100vh; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - padding: 20px 12px 32px; - user-select: none; -} - -h1 { - font-size: 2.4rem; - font-weight: 900; - letter-spacing: 0.18em; - color: #00e5ff; - text-shadow: 0 0 18px #00e5ff88, 0 2px 4px #000; - margin-bottom: 18px; -} - -/* ─── Layout ─────────────────────────────────────────────────────────────── */ -.game-wrapper { - display: flex; - align-items: flex-start; - gap: 14px; -} - -/* ─── Board ──────────────────────────────────────────────────────────────── */ -.board-container { - position: relative; - border: 2px solid #1a2a3a; - border-radius: 4px; - overflow: hidden; - box-shadow: 0 0 32px #000a, 0 0 12px #00e5ff22; -} - -#board, #ui { - display: block; -} - -#ui { - position: absolute; - top: 0; left: 0; - pointer-events: none; -} - -/* flash animation on line clear */ -@keyframes flash-anim { - 0% { filter: brightness(1); } - 40% { filter: brightness(2.2) saturate(1.8); } - 100% { filter: brightness(1); } -} -#board.flash { animation: flash-anim 0.18s ease-out; } - -/* ─── Side panels ────────────────────────────────────────────────────────── */ -.side-panel { - display: flex; - flex-direction: column; - gap: 12px; - min-width: 110px; -} - -.side-panel.right { - min-width: 120px; -} - -.panel-box { - background: #0d1225; - border: 1px solid #1a2a45; - border-radius: 6px; - padding: 10px 10px 10px; -} - -.panel-label { - font-size: 0.65rem; - font-weight: 700; - letter-spacing: 0.14em; - color: #5a7fa0; - text-transform: uppercase; - margin-bottom: 6px; -} - -.panel-value { - font-size: 1.5rem; - font-weight: 800; - color: #fff; - letter-spacing: 0.04em; -} - -.panel-value.large { - font-size: 1.9rem; -} - -/* Hold / Next canvases */ -#hold-canvas { - display: block; -} - -.next-list { - display: flex; - flex-direction: column; - gap: 4px; -} - -#combo-val { - min-height: 1.2em; - font-size: 0.85rem; - font-weight: 800; - color: #ffe000; - letter-spacing: 0.05em; - text-shadow: 0 0 8px #ffe00077; -} - -/* ─── Controls legend ─────────────────────────────────────────────────────── */ -.controls { - margin-top: 18px; - display: flex; - flex-wrap: wrap; - gap: 6px 18px; - justify-content: center; - max-width: 640px; -} - -.ctrl-item { - display: flex; - align-items: center; - gap: 6px; - font-size: 0.78rem; - color: #8aaabb; -} - -kbd { - background: #1a2a3a; - border: 1px solid #334; - border-bottom: 2px solid #556; - border-radius: 4px; - padding: 1px 6px; - font-family: inherit; - font-size: 0.75rem; - color: #cde; - white-space: nowrap; -} - -/* ─── Responsive ─────────────────────────────────────────────────────────── */ -@media (max-width: 520px) { - h1 { font-size: 1.7rem; } - .game-wrapper { gap: 8px; } - .side-panel { min-width: 80px; } - .panel-value { font-size: 1.1rem; } - .panel-value.large { font-size: 1.4rem; } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/tsconfig.json @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ES2020", - "moduleResolution": "bundler", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noImplicitReturns": true, - "esModuleInterop": true, - "skipLibCheck": true, - "outDir": "./dist", - "rootDir": "./src" - }, - "include": ["src/**/*"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/index.html @@ -1,236 +0,0 @@ -<!DOCTYPE html> -<html lang="es"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - /* ── Reset & Base ──────────────────────────────────────────────────────── */ - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0d0d1f; - color: #e0e0f0; - font-family: 'Segoe UI', system-ui, sans-serif; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-start; - min-height: 100vh; - padding: 20px 10px; - user-select: none; - } - - /* ── Title ─────────────────────────────────────────────────────────────── */ - h1 { - font-size: 2.8rem; - font-weight: 900; - letter-spacing: 0.18em; - margin-bottom: 18px; - background: linear-gradient(135deg, #00cfcf, #9f00cf, #cf7f00); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - background-clip: text; - text-shadow: none; - filter: drop-shadow(0 0 12px rgba(0,207,207,0.4)); - } - - /* ── Layout ────────────────────────────────────────────────────────────── */ - #game-wrapper { - display: flex; - gap: 16px; - align-items: flex-start; - } - - /* ── Sidebar panels ────────────────────────────────────────────────────── */ - .side-panel { - display: flex; - flex-direction: column; - gap: 14px; - width: 130px; - } - - .panel-box { - background: #12122a; - border: 1px solid rgba(255,255,255,0.08); - border-radius: 10px; - padding: 12px; - box-shadow: 0 4px 20px rgba(0,0,0,0.5); - } - - .panel-label { - font-size: 0.65rem; - font-weight: 700; - letter-spacing: 0.15em; - text-transform: uppercase; - color: #888; - margin-bottom: 8px; - } - - .panel-value { - font-size: 1.6rem; - font-weight: 800; - color: #e8e8ff; - font-variant-numeric: tabular-nums; - } - - canvas.preview { - width: 106px; - height: 80px; - display: block; - border-radius: 6px; - } - - /* ── Board area ────────────────────────────────────────────────────────── */ - #board-container { - position: relative; - border: 2px solid rgba(255,255,255,0.1); - border-radius: 8px; - overflow: hidden; - box-shadow: - 0 0 40px rgba(0,207,207,0.15), - 0 0 80px rgba(0,0,0,0.6), - inset 0 0 30px rgba(0,0,0,0.4); - } - - #board { - display: block; - } - - /* ── Overlay message ───────────────────────────────────────────────────── */ - #message { - position: absolute; - inset: 0; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - gap: 12px; - background: rgba(5, 5, 20, 0.82); - backdrop-filter: blur(3px); - } - - .msg-title { - font-size: 2.2rem; - font-weight: 900; - letter-spacing: 0.2em; - color: #fff; - text-shadow: 0 0 20px rgba(0,207,207,0.8); - } - - .msg-sub { - font-size: 0.85rem; - color: #aaa; - text-align: center; - line-height: 1.6; - max-width: 240px; - } - - /* ── Controls guide ────────────────────────────────────────────────────── */ - #controls { - margin-top: 18px; - background: #12122a; - border: 1px solid rgba(255,255,255,0.06); - border-radius: 10px; - padding: 14px 20px; - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 6px 24px; - max-width: 520px; - width: 100%; - } - - .ctrl-row { - display: flex; - align-items: center; - gap: 8px; - } - - kbd { - display: inline-flex; - align-items: center; - justify-content: center; - background: #1e1e3a; - border: 1px solid rgba(255,255,255,0.2); - border-bottom: 3px solid rgba(255,255,255,0.12); - border-radius: 5px; - padding: 2px 7px; - font-size: 0.72rem; - font-family: inherit; - font-weight: 600; - color: #ccc; - white-space: nowrap; - min-width: 28px; - } - - .ctrl-label { - font-size: 0.72rem; - color: #777; - } - </style> -</head> -<body> - - <h1>TETRIS</h1> - - <div id="game-wrapper"> - - <!-- Left panel: Hold + Score + Level + Lines --> - <div class="side-panel"> - <div class="panel-box"> - <div class="panel-label">Guardar (C)</div> - <canvas class="preview" id="hold" width="106" height="80"></canvas> - </div> - <div class="panel-box"> - <div class="panel-label">Puntuación</div> - <div class="panel-value" id="score">0</div> - </div> - <div class="panel-box"> - <div class="panel-label">Nivel</div> - <div class="panel-value" id="level">1</div> - </div> - <div class="panel-box"> - <div class="panel-label">Líneas</div> - <div class="panel-value" id="lines">0</div> - </div> - </div> - - <!-- Board --> - <div id="board-container"> - <canvas id="board" width="320" height="640"></canvas> - <div id="message"></div> - </div> - - <!-- Right panel: Next --> - <div class="side-panel"> - <div class="panel-box"> - <div class="panel-label">Siguiente</div> - <canvas class="preview" id="next" width="106" height="80"></canvas> - </div> - <div class="panel-box" style="font-size:0.7rem; color:#666; line-height:1.8;"> - <div class="panel-label">Puntuaciones</div> - <div>1 línea ×100</div> - <div>2 líneas ×300</div> - <div>3 líneas ×500</div> - <div>Tetris ×800</div> - <div style="margin-top:6px; color:#555;">× nivel</div> - </div> - </div> - - </div> - - <!-- Controls reference --> - <div id="controls"> - <div class="ctrl-row"><kbd>◄ ►</kbd> <span class="ctrl-label">Mover</span></div> - <div class="ctrl-row"><kbd>▲</kbd> <span class="ctrl-label">Rotar CW</span></div> - <div class="ctrl-row"><kbd>Z</kbd> <span class="ctrl-label">Rotar CCW</span></div> - <div class="ctrl-row"><kbd>▼</kbd> <span class="ctrl-label">Bajar suave</span></div> - <div class="ctrl-row"><kbd>Espacio</kbd> <span class="ctrl-label">Caída dura</span></div> - <div class="ctrl-row"><kbd>C</kbd> / <kbd>⇧</kbd> <span class="ctrl-label">Guardar pieza</span></div> - <div class="ctrl-row"><kbd>P</kbd> <span class="ctrl-label">Pausar</span></div> - <div class="ctrl-row"><kbd>Enter</kbd> <span class="ctrl-label">Iniciar / Reiniciar</span></div> - </div> - - <script src="dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,3068 +0,0 @@ -{ - "name": "loop-bench-sdedmh6w", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-sdedmh6w", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@esbuild/aix-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", - "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", - "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", - "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", - "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", - "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", - "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", - "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", - "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", - "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", - "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", - "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", - "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", - "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", - "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", - "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", - "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", - "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", - "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", - "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", - "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", - "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", - "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", - "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", - "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", - "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", - "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", - "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.0", - "@esbuild/android-arm": "0.28.0", - "@esbuild/android-arm64": "0.28.0", - "@esbuild/android-x64": "0.28.0", - "@esbuild/darwin-arm64": "0.28.0", - "@esbuild/darwin-x64": "0.28.0", - "@esbuild/freebsd-arm64": "0.28.0", - "@esbuild/freebsd-x64": "0.28.0", - "@esbuild/linux-arm": "0.28.0", - "@esbuild/linux-arm64": "0.28.0", - "@esbuild/linux-ia32": "0.28.0", - "@esbuild/linux-loong64": "0.28.0", - "@esbuild/linux-mips64el": "0.28.0", - "@esbuild/linux-ppc64": "0.28.0", - "@esbuild/linux-riscv64": "0.28.0", - "@esbuild/linux-s390x": "0.28.0", - "@esbuild/linux-x64": "0.28.0", - "@esbuild/netbsd-arm64": "0.28.0", - "@esbuild/netbsd-x64": "0.28.0", - "@esbuild/openbsd-arm64": "0.28.0", - "@esbuild/openbsd-x64": "0.28.0", - "@esbuild/openharmony-arm64": "0.28.0", - "@esbuild/sunos-x64": "0.28.0", - "@esbuild/win32-arm64": "0.28.0", - "@esbuild/win32-ia32": "0.28.0", - "@esbuild/win32-x64": "0.28.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,26 +0,0 @@ -{ - "name": "loop-bench-sdedmh6w", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017", - "watch": "esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch", - "typecheck": "tsc --noEmit", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "esbuild": "^0.28.0", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,144 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:51:50.075Z", - "formats": { - "typescript": { - "sources": { - "src/tetris.ts": { - "lines": 673, - "tokens": 6955, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 673, - "tokens": 6955, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "dist/tetris.js": { - "lines": 542, - "tokens": 6514, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 542, - "tokens": 6514, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 10, - "tokens": 66, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 25, - "tokens": 160, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 35, - "tokens": 226, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 235, - "tokens": 1797, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 235, - "tokens": 1797, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1485, - "tokens": 15492, - "sources": 5, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/src/tetris.ts @@ -1,674 +0,0 @@ -// ─── Constants ──────────────────────────────────────────────────────────────── - -const COLS = 10; -const ROWS = 20; -const BLOCK = 32; -const PREVIEW_BLOCK = 24; - -// Points per line clear (multiplied by level) -const LINE_POINTS = [0, 100, 300, 500, 800]; - -// Drop interval in ms per level (level 1 = 800ms, decreases until level 20 = 50ms) -function dropInterval(level: number): number { - return Math.max(50, 800 - (level - 1) * 40); -} - -// ─── Tetromino Definitions ──────────────────────────────────────────────────── - -type Color = string; -type Matrix = number[][]; - -interface TetrominoDef { - shape: Matrix; - color: Color; -} - -const PIECES: Record<string, TetrominoDef> = { - I: { - color: "#00cfcf", - shape: [ - [0, 0, 0, 0], - [1, 1, 1, 1], - [0, 0, 0, 0], - [0, 0, 0, 0], - ], - }, - O: { - color: "#cfcf00", - shape: [ - [1, 1], - [1, 1], - ], - }, - T: { - color: "#9f00cf", - shape: [ - [0, 1, 0], - [1, 1, 1], - [0, 0, 0], - ], - }, - S: { - color: "#00cf00", - shape: [ - [0, 1, 1], - [1, 1, 0], - [0, 0, 0], - ], - }, - Z: { - color: "#cf0000", - shape: [ - [1, 1, 0], - [0, 1, 1], - [0, 0, 0], - ], - }, - J: { - color: "#0000cf", - shape: [ - [1, 0, 0], - [1, 1, 1], - [0, 0, 0], - ], - }, - L: { - color: "#cf7f00", - shape: [ - [0, 0, 1], - [1, 1, 1], - [0, 0, 0], - ], - }, -}; - -const PIECE_KEYS = Object.keys(PIECES); - -// Wall-kick offsets for J/L/T/S/Z (SRS) -const KICKS_JLTSZ: [number, number][][] = [ - [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], // 0→1 - [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], // 1→2 - [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], // 2→3 - [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], // 3→0 -]; - -// Wall-kick offsets for I -const KICKS_I: [number, number][][] = [ - [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], // 0→1 - [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], // 1→2 - [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], // 2→3 - [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], // 3→0 -]; - -// ─── Piece Class ────────────────────────────────────────────────────────────── - -class Piece { - key: string; - color: Color; - matrix: Matrix; - x: number; - y: number; - rotation: number; // 0..3 - - constructor(key: string) { - this.key = key; - this.color = PIECES[key].color; - this.matrix = PIECES[key].shape.map((r) => [...r]); - this.rotation = 0; - this.x = Math.floor(COLS / 2) - Math.floor(this.matrix[0].length / 2); - this.y = key === "I" ? -1 : 0; - } - - clone(): Piece { - const p = new Piece(this.key); - p.matrix = this.matrix.map((r) => [...r]); - p.x = this.x; - p.y = this.y; - p.rotation = this.rotation; - return p; - } -} - -// ─── Rotation helpers ───────────────────────────────────────────────────────── - -function rotateMatrix(matrix: Matrix, dir: 1 | -1): Matrix { - const N = matrix.length; - const rotated: Matrix = Array.from({ length: N }, () => Array(N).fill(0)); - for (let r = 0; r < N; r++) { - for (let c = 0; c < matrix[r].length; c++) { - if (dir === 1) { - rotated[c][N - 1 - r] = matrix[r][c]; - } else { - rotated[N - 1 - c][r] = matrix[r][c]; - } - } - } - return rotated; -} - -// ─── Board ──────────────────────────────────────────────────────────────────── - -type Cell = { color: Color } | null; -type Board = Cell[][]; - -function createBoard(): Board { - return Array.from({ length: ROWS }, () => Array(COLS).fill(null)); -} - -// ─── Game ───────────────────────────────────────────────────────────────────── - -class TetrisGame { - private board: Board; - private current: Piece; - private next: Piece; - private held: Piece | null = null; - private canHold = true; - - private score = 0; - private level = 1; - private lines = 0; - - private gameOver = false; - private paused = false; - private started = false; - - private dropTimer = 0; - private lastTime = 0; - private rafId = 0; - - // Canvas elements - private boardCanvas: HTMLCanvasElement; - private boardCtx: CanvasRenderingContext2D; - private nextCanvas: HTMLCanvasElement; - private nextCtx: CanvasRenderingContext2D; - private holdCanvas: HTMLCanvasElement; - private holdCtx: CanvasRenderingContext2D; - - // UI elements - private scoreEl: HTMLElement; - private levelEl: HTMLElement; - private linesEl: HTMLElement; - private messageEl: HTMLElement; - - constructor() { - this.boardCanvas = document.getElementById("board") as HTMLCanvasElement; - this.boardCtx = this.boardCanvas.getContext("2d")!; - this.nextCanvas = document.getElementById("next") as HTMLCanvasElement; - this.nextCtx = this.nextCanvas.getContext("2d")!; - this.holdCanvas = document.getElementById("hold") as HTMLCanvasElement; - this.holdCtx = this.holdCanvas.getContext("2d")!; - - this.scoreEl = document.getElementById("score")!; - this.levelEl = document.getElementById("level")!; - this.linesEl = document.getElementById("lines")!; - this.messageEl = document.getElementById("message")!; - - this.board = createBoard(); - this.current = this.randomPiece(); - this.next = this.randomPiece(); - - this.bindKeys(); - this.showMessage("TETRIS", "Pulsa Enter o Espacio para comenzar"); - this.drawAll(); - } - - // ── Piece Factory ── - - private randomPiece(): Piece { - const key = PIECE_KEYS[Math.floor(Math.random() * PIECE_KEYS.length)]; - return new Piece(key); - } - - // ── Collision ── - - private collides(piece: Piece, board: Board): boolean { - for (let r = 0; r < piece.matrix.length; r++) { - for (let c = 0; c < piece.matrix[r].length; c++) { - if (!piece.matrix[r][c]) continue; - const nx = piece.x + c; - const ny = piece.y + r; - if (nx < 0 || nx >= COLS || ny >= ROWS) return true; - if (ny >= 0 && board[ny][nx]) return true; - } - } - return false; - } - - // ── Ghost piece ── - - private ghostPiece(): Piece { - const ghost = this.current.clone(); - while (!this.collides(ghost, this.board)) { - ghost.y++; - } - ghost.y--; - return ghost; - } - - // ── Movement ── - - private moveLeft() { - const p = this.current.clone(); - p.x--; - if (!this.collides(p, this.board)) this.current.x--; - } - - private moveRight() { - const p = this.current.clone(); - p.x++; - if (!this.collides(p, this.board)) this.current.x++; - } - - private softDrop() { - const p = this.current.clone(); - p.y++; - if (!this.collides(p, this.board)) { - this.current.y++; - this.score += 1; - this.updateScore(); - this.dropTimer = 0; - } else { - this.lock(); - } - } - - private hardDrop() { - const ghost = this.ghostPiece(); - const dropped = ghost.y - this.current.y; - this.score += dropped * 2; - this.current.y = ghost.y; - this.updateScore(); - this.lock(); - } - - // ── Rotation (SRS) ── - - private rotate(dir: 1 | -1) { - const original = this.current.clone(); - const newMatrix = rotateMatrix(this.current.matrix, dir); - const newRot = ((this.current.rotation + dir) + 4) % 4; - - // Select kick table - const kicks = this.current.key === "I" ? KICKS_I : KICKS_JLTSZ; - // Index into kick table: clockwise uses newRot-1 direction - const kickIdx = dir === 1 ? this.current.rotation : newRot; - const offsets = kicks[kickIdx]; - - for (const [ox, oy] of offsets) { - const testX = original.x + (dir === 1 ? ox : -ox); - const testY = original.y + (dir === 1 ? -oy : oy); - - const test = original.clone(); - test.matrix = newMatrix; - test.x = testX; - test.y = testY; - test.rotation = newRot; - - if (!this.collides(test, this.board)) { - this.current.matrix = newMatrix; - this.current.x = testX; - this.current.y = testY; - this.current.rotation = newRot; - return; - } - } - } - - // ── Hold ── - - private holdPiece() { - if (!this.canHold) return; - this.canHold = false; - if (this.held) { - const tmp = this.held; - this.held = new Piece(this.current.key); - this.current = new Piece(tmp.key); - } else { - this.held = new Piece(this.current.key); - this.spawn(); - } - this.drawHold(); - } - - // ── Lock and clear lines ── - - private lock() { - // Place piece onto board - for (let r = 0; r < this.current.matrix.length; r++) { - for (let c = 0; c < this.current.matrix[r].length; c++) { - if (!this.current.matrix[r][c]) continue; - const ny = this.current.y + r; - const nx = this.current.x + c; - if (ny < 0) { - this.triggerGameOver(); - return; - } - this.board[ny][nx] = { color: this.current.color }; - } - } - - // Clear full lines - let cleared = 0; - for (let r = ROWS - 1; r >= 0; r--) { - if (this.board[r].every((cell) => cell !== null)) { - this.board.splice(r, 1); - this.board.unshift(Array(COLS).fill(null)); - cleared++; - r++; // Re-check same row index - } - } - - if (cleared > 0) { - this.lines += cleared; - this.score += LINE_POINTS[cleared] * this.level; - this.level = Math.floor(this.lines / 10) + 1; - this.updateScore(); - } - - this.canHold = true; - this.spawn(); - } - - private spawn() { - this.current = this.next; - this.next = this.randomPiece(); - if (this.collides(this.current, this.board)) { - this.triggerGameOver(); - } - this.drawNext(); - } - - // ── Game State ── - - start() { - if (this.gameOver) { - this.reset(); - } - this.started = true; - this.paused = false; - this.hideMessage(); - this.lastTime = performance.now(); - this.dropTimer = 0; - cancelAnimationFrame(this.rafId); - this.rafId = requestAnimationFrame((t) => this.loop(t)); - } - - private reset() { - this.board = createBoard(); - this.held = null; - this.canHold = true; - this.score = 0; - this.level = 1; - this.lines = 0; - this.gameOver = false; - this.current = this.randomPiece(); - this.next = this.randomPiece(); - this.updateScore(); - this.drawHold(); - this.drawNext(); - } - - togglePause() { - if (!this.started || this.gameOver) return; - this.paused = !this.paused; - if (this.paused) { - cancelAnimationFrame(this.rafId); - this.showMessage("PAUSA", "Pulsa P para continuar"); - } else { - this.hideMessage(); - this.lastTime = performance.now(); - this.rafId = requestAnimationFrame((t) => this.loop(t)); - } - } - - private triggerGameOver() { - this.gameOver = true; - this.started = false; - cancelAnimationFrame(this.rafId); - this.showMessage("GAME OVER", `Puntuación: ${this.score}<br>Pulsa Enter para reiniciar`); - } - - // ── Game Loop ── - - private loop(timestamp: number) { - const delta = timestamp - this.lastTime; - this.lastTime = timestamp; - this.dropTimer += delta; - - if (this.dropTimer >= dropInterval(this.level)) { - this.dropTimer = 0; - const p = this.current.clone(); - p.y++; - if (!this.collides(p, this.board)) { - this.current.y++; - } else { - this.lock(); - } - } - - this.drawAll(); - if (!this.gameOver && !this.paused) { - this.rafId = requestAnimationFrame((t) => this.loop(t)); - } - } - - // ── Drawing ── - - private drawBlock( - ctx: CanvasRenderingContext2D, - x: number, - y: number, - color: Color, - size = BLOCK, - alpha = 1 - ) { - ctx.globalAlpha = alpha; - // Fill - ctx.fillStyle = color; - ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2); - // Highlight (top-left) - ctx.fillStyle = "rgba(255,255,255,0.3)"; - ctx.fillRect(x * size + 1, y * size + 1, size - 2, 4); - ctx.fillRect(x * size + 1, y * size + 1, 4, size - 2); - // Shadow (bottom-right) - ctx.fillStyle = "rgba(0,0,0,0.3)"; - ctx.fillRect(x * size + 1, y * size + size - 5, size - 2, 4); - ctx.fillRect(x * size + size - 5, y * size + 1, 4, size - 2); - ctx.globalAlpha = 1; - } - - private drawBoard() { - const ctx = this.boardCtx; - ctx.clearRect(0, 0, this.boardCanvas.width, this.boardCanvas.height); - - // Grid background - ctx.fillStyle = "#0a0a1a"; - ctx.fillRect(0, 0, this.boardCanvas.width, this.boardCanvas.height); - - // Grid lines - ctx.strokeStyle = "rgba(255,255,255,0.04)"; - ctx.lineWidth = 1; - for (let r = 0; r < ROWS; r++) { - ctx.beginPath(); - ctx.moveTo(0, r * BLOCK); - ctx.lineTo(COLS * BLOCK, r * BLOCK); - ctx.stroke(); - } - for (let c = 0; c <= COLS; c++) { - ctx.beginPath(); - ctx.moveTo(c * BLOCK, 0); - ctx.lineTo(c * BLOCK, ROWS * BLOCK); - ctx.stroke(); - } - - // Locked cells - for (let r = 0; r < ROWS; r++) { - for (let c = 0; c < COLS; c++) { - if (this.board[r][c]) { - this.drawBlock(ctx, c, r, this.board[r][c]!.color); - } - } - } - - // Ghost piece - const ghost = this.ghostPiece(); - for (let r = 0; r < ghost.matrix.length; r++) { - for (let c = 0; c < ghost.matrix[r].length; c++) { - if (ghost.matrix[r][c]) { - const nx = ghost.x + c; - const ny = ghost.y + r; - if (ny >= 0) { - ctx.globalAlpha = 0.25; - ctx.fillStyle = this.current.color; - ctx.fillRect(nx * BLOCK + 1, ny * BLOCK + 1, BLOCK - 2, BLOCK - 2); - ctx.strokeStyle = this.current.color; - ctx.lineWidth = 2; - ctx.strokeRect(nx * BLOCK + 2, ny * BLOCK + 2, BLOCK - 4, BLOCK - 4); - ctx.globalAlpha = 1; - } - } - } - } - - // Current piece - for (let r = 0; r < this.current.matrix.length; r++) { - for (let c = 0; c < this.current.matrix[r].length; c++) { - if (this.current.matrix[r][c]) { - const nx = this.current.x + c; - const ny = this.current.y + r; - if (ny >= 0) { - this.drawBlock(ctx, nx, ny, this.current.color); - } - } - } - } - } - - private drawPieceInCanvas( - ctx: CanvasRenderingContext2D, - canvas: HTMLCanvasElement, - piece: Piece | null - ) { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = "#0a0a1a"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - - if (!piece) return; - - const m = piece.matrix; - const cols = m[0].length; - const rows = m.length; - - // Count actual bounding box - let minC = cols, maxC = 0, minR = rows, maxR = 0; - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - if (m[r][c]) { - minC = Math.min(minC, c); - maxC = Math.max(maxC, c); - minR = Math.min(minR, r); - maxR = Math.max(maxR, r); - } - } - } - const pw = (maxC - minC + 1) * PREVIEW_BLOCK; - const ph = (maxR - minR + 1) * PREVIEW_BLOCK; - const ox = Math.floor((canvas.width - pw) / 2) / PREVIEW_BLOCK - minC; - const oy = Math.floor((canvas.height - ph) / 2) / PREVIEW_BLOCK - minR; - - for (let r = 0; r < rows; r++) { - for (let c = 0; c < cols; c++) { - if (m[r][c]) { - this.drawBlock(ctx, c + ox, r + oy, piece.color, PREVIEW_BLOCK); - } - } - } - } - - private drawNext() { - this.drawPieceInCanvas(this.nextCtx, this.nextCanvas, this.next); - } - - private drawHold() { - this.drawPieceInCanvas(this.holdCtx, this.holdCanvas, this.held); - } - - private drawAll() { - this.drawBoard(); - } - - // ── UI helpers ── - - private updateScore() { - this.scoreEl.textContent = String(this.score); - this.levelEl.textContent = String(this.level); - this.linesEl.textContent = String(this.lines); - } - - private showMessage(title: string, sub: string) { - this.messageEl.innerHTML = `<div class="msg-title">${title}</div><div class="msg-sub">${sub}</div>`; - this.messageEl.style.display = "flex"; - } - - private hideMessage() { - this.messageEl.style.display = "none"; - } - - // ── Keyboard ── - - private bindKeys() { - document.addEventListener("keydown", (e) => { - // Always allow start/restart - if (e.code === "Enter" || (e.code === "Space" && !this.started)) { - e.preventDefault(); - this.start(); - return; - } - if (!this.started || this.gameOver) return; - if (e.code === "KeyP") { - this.togglePause(); - return; - } - if (this.paused) return; - - switch (e.code) { - case "ArrowLeft": - e.preventDefault(); - this.moveLeft(); - break; - case "ArrowRight": - e.preventDefault(); - this.moveRight(); - break; - case "ArrowDown": - e.preventDefault(); - this.softDrop(); - break; - case "ArrowUp": - e.preventDefault(); - this.rotate(1); - break; - case "KeyZ": - e.preventDefault(); - this.rotate(-1); - break; - case "Space": - e.preventDefault(); - this.hardDrop(); - break; - case "KeyC": - case "ShiftLeft": - case "ShiftRight": - e.preventDefault(); - this.holdPiece(); - break; - } - }); - } -} - -// ─── Entry Point ────────────────────────────────────────────────────────────── - -window.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/tsconfig.json @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2017", - "module": "ESNext", - "strict": true, - "outDir": "dist", - "rootDir": "src", - "lib": ["ES2017", "DOM"] - }, - "include": ["src"] -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-8xq7n6a5", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-8xq7n6a5", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-8xq7n6a5", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:34:07.973Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-o9xeiz1m", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-o9xeiz1m", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-o9xeiz1m", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:21:23.550Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package-lock.json @@ -1,2334 +0,0 @@ -{ - "name": "loop-bench-c4n513d1", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-c4n513d1", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/package.json @@ -1,21 +0,0 @@ -{ - "name": "loop-bench-c4n513d1", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/report/jscpd-report.json @@ -1,48 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T09:17:52.645Z", - "formats": { - "json": { - "sources": { - "package.json": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 20, - "tokens": 125, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/index.html b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/index.html @@ -1,129 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> -<head> - <meta charset="UTF-8" /> - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> - <title>Tetris</title> - <style> - /* ── Reset & page ── */ - *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } - - body { - background: #0d0d1a; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - min-height: 100vh; - font-family: 'Courier New', Courier, monospace; - color: #eee; - user-select: none; - } - - h1 { - font-size: 2rem; - letter-spacing: 0.35em; - text-transform: uppercase; - margin-bottom: 18px; - color: #00f0f0; - text-shadow: 0 0 18px #00f0f0aa; - } - - /* ── Layout wrapper ── */ - #game-wrap { - display: flex; - align-items: flex-start; - gap: 0; - } - - /* ── Main board ── */ - #board { - display: block; - border: 2px solid #333; - box-shadow: 0 0 40px #00f0f022, inset 0 0 8px #000; - background: #111; - image-rendering: pixelated; - } - - /* ── Sidebar ── */ - #sidebar { - display: block; - border: 2px solid #333; - border-left: none; - box-shadow: 0 0 40px #00f0f022; - background: #1a1a2e; - image-rendering: pixelated; - } - - /* ── Controls bar below the game ── */ - #controls { - margin-top: 16px; - display: flex; - flex-direction: column; - align-items: center; - gap: 6px; - color: #555; - font-size: 0.78rem; - letter-spacing: 0.04em; - } - - #controls table { - border-collapse: collapse; - } - - #controls td { - padding: 2px 10px; - } - - #controls td:first-child { - color: #888; - text-align: right; - } - - /* ── Restart button ── */ - #restart-btn { - margin-top: 14px; - padding: 8px 32px; - background: transparent; - border: 2px solid #00f0f0; - color: #00f0f0; - font-family: inherit; - font-size: 0.9rem; - letter-spacing: 0.2em; - text-transform: uppercase; - cursor: pointer; - transition: background 0.15s, color 0.15s, box-shadow 0.15s; - } - - #restart-btn:hover { - background: #00f0f0; - color: #0d0d1a; - box-shadow: 0 0 16px #00f0f0aa; - } - </style> -</head> -<body> - <h1>Tetris</h1> - - <div id="game-wrap"> - <canvas id="board"></canvas> - <canvas id="sidebar"></canvas> - </div> - - <div id="controls"> - <table> - <tr><td>← →</td><td>Move</td></tr> - <tr><td>↑ / X</td><td>Rotate CW</td></tr> - <tr><td>Z</td><td>Rotate CCW</td></tr> - <tr><td>↓</td><td>Soft drop</td></tr> - <tr><td>Space</td><td>Hard drop</td></tr> - <tr><td>C</td><td>Hold</td></tr> - <tr><td>P / Esc</td><td>Pause</td></tr> - </table> - </div> - - <button id="restart-btn">New Game</button> - - <script type="module" src="dist/tetris.js"></script> -</body> -</html> diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package-lock.json @@ -1,2583 +0,0 @@ -{ - "name": "loop-bench-a45vhkn9", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "loop-bench-a45vhkn9", - "version": "1.0.0", - "license": "ISC", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.4", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.4.tgz", - "integrity": "sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.4", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.4.tgz", - "integrity": "sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.0.tgz", - "integrity": "sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.4.tgz", - "integrity": "sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.0.tgz", - "integrity": "sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.0", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@html-validate/stylish": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@html-validate/stylish/-/stylish-5.0.0.tgz", - "integrity": "sha512-xjhRV9k1mWfgsOcpYlwsjUOFy3w3EnCDrqUrEw+DWdvOStMK59ts2H7GLKWZtmLI5m6Npp3qMSNReafQy9K2sA==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^4.0.0" - }, - "engines": { - "node": "^20.11 || >= 22.16" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@jscpd/badge-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/badge-reporter/-/badge-reporter-4.0.4.tgz", - "integrity": "sha512-I9b4MmLXPM2vo0SxSUWnNGKcA4PjQlD3GzXvFK60z43cN/EIdLbOq3FVwCL+dg2obUqGXKIzAm7EsDFTg0D+mQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "badgen": "^3.2.3", - "colors": "^1.4.0", - "fs-extra": "^11.2.0" - } - }, - "node_modules/@jscpd/core": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/core/-/core-4.0.4.tgz", - "integrity": "sha512-QGMT3iXEX1fI6lgjPH+x8eyJwhwr2KkpSF5uBpjC0Z5Xloj0yFTFLtwJT+RhxP/Ob4WYrtx2jvpKB269oIwgMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^5.0.1" - } - }, - "node_modules/@jscpd/finder": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/finder/-/finder-4.0.4.tgz", - "integrity": "sha512-qVUWY7Nzuvfd5OIk+n7/5CM98LmFroLqblRXAI2gDABwZrc7qS+WH2SNr0qoUq0f4OqwM+piiwKvwL/VDNn/Cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "blamer": "^1.0.6", - "bytes": "^3.1.2", - "cli-table3": "^0.6.5", - "colors": "^1.4.0", - "fast-glob": "^3.3.2", - "fs-extra": "^11.2.0", - "markdown-table": "^2.0.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/html-reporter": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/html-reporter/-/html-reporter-4.0.4.tgz", - "integrity": "sha512-YiepyeYkeH74Kx59PJRdUdonznct0wHPFkf6FLQN+mCBoy6leAWCcOfHtcexnp+UsBFDlItG5nRdKrDSxSH+Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "1.4.0", - "fs-extra": "^11.2.0", - "pug": "^3.0.3" - } - }, - "node_modules/@jscpd/tokenizer": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@jscpd/tokenizer/-/tokenizer-4.0.4.tgz", - "integrity": "sha512-xxYYY/qaLah/FlwogEbGIxx9CjDO+G9E6qawcy26WwrflzJb6wsnhjwdneN6Wb0RNCDsqvzY+bzG453jsin4UQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/core": "4.0.4", - "reprism": "^0.0.11", - "spark-md5": "^3.0.2" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", - "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.2.tgz", - "integrity": "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@types/sarif": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", - "integrity": "sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "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/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assert-never": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.4.0.tgz", - "integrity": "sha512-5oJg84os6NMQNl27T9LnZkvvqzvAnHu03ShCnoj6bsJwS7L8AO4lf+C/XjK/nvzEqQB744moC6V128RucQd1jA==", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-walk": { - "version": "3.0.0-canary-5", - "resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz", - "integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.9.6" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/badgen": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/badgen/-/badgen-3.2.3.tgz", - "integrity": "sha512-svDuwkc63E/z0ky3drpUppB83s/nlgDciH9m+STwwQoWyq7yCgew1qEfJ+9axkKdNq7MskByptWUN9j1PGMwFA==", - "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/blamer": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/blamer/-/blamer-1.0.7.tgz", - "integrity": "sha512-GbBStl/EVlSWkiJQBZps3H1iARBrC7vt++Jb/TTmCNu/jZ04VW7tSN1nScbFXBUy1AN+jzeL7Zep9sbQxLhXKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^4.0.0", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "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==", - "dev": true, - "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==", - "dev": true, - "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/character-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", - "integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regex": "^1.0.3" - } - }, - "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/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/constantinople": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz", - "integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/doctypes": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", - "integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "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/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/end-of-stream": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", - "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.4", - "@eslint/config-helpers": "^0.5.4", - "@eslint/core": "^1.2.0", - "@eslint/plugin-kit": "^0.7.0", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", - "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "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-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fs-extra": { - "version": "11.3.4", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", - "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitignore-to-glob": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/gitignore-to-glob/-/gitignore-to-glob-0.3.0.tgz", - "integrity": "sha512-mk74BdnK7lIwDHnotHddx1wsjMOFIThpLY3cPNniJ/2fA/tlLzHnFxIdR+4sLOu5KGgQJdij4kjJ2RoUNnCNMA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.4 <5 || >=6.9" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-validate": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/html-validate/-/html-validate-10.11.3.tgz", - "integrity": "sha512-wKUq9iR6bukMgiHhs/ORThZzEbQoFiiPNN7aZfQ8dlmhttPb2sM2Ji2p+Fy5Xj1aH7QHJ1biT2SUDw7A01P2oA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/html-validate" - } - ], - "license": "MIT", - "dependencies": { - "@html-validate/stylish": "^5.0.0", - "@sidvind/better-ajv-errors": "4.0.1", - "ajv": "^8.0.0", - "glob": "^13.0.0", - "kleur": "^4.1.0", - "minimist": "^1.2.0", - "prompts": "^2.0.0", - "semver": "^7.0.0" - }, - "bin": { - "html-validate": "bin/html-validate.mjs" - }, - "engines": { - "node": "^20.19.0 || >= 22.16.0" - }, - "peerDependencies": { - "jest": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-diff": "^28.1.3 || ^29.0.3 || ^30.0.0", - "jest-snapshot": "^28.1.3 || ^29.0.3 || ^30.0.0", - "vitest": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.1" - }, - "peerDependenciesMeta": { - "jest": { - "optional": true - }, - "jest-diff": { - "optional": true - }, - "jest-snapshot": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/html-validate/node_modules/@sidvind/better-ajv-errors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sidvind/better-ajv-errors/-/better-ajv-errors-4.0.1.tgz", - "integrity": "sha512-6arF1ssKxItxgitPYXafUoLmsVBA6K7m9+ZGj6hLDoBl7nWpJ33EInwQUdHTle2METeWGxgQiqSex20KZRykew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "kleur": "^4.1.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "ajv": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/html-validate/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "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/html-validate/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/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-expression": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz", - "integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^7.1.1", - "object-assign": "^4.1.1" - } - }, - "node_modules/is-expression/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/js-stringify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", - "integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==", - "dev": true, - "license": "MIT" - }, - "node_modules/jscpd": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/jscpd/-/jscpd-4.0.8.tgz", - "integrity": "sha512-d2VNT/2Hv4dxT2/59He8Lyda4DYOxPRyRG9zBaOpTZAqJCVf2xLrBlZkT8Va6Lo9u3X2qz8Bpq4HrDi4JsrQhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jscpd/badge-reporter": "4.0.4", - "@jscpd/core": "4.0.4", - "@jscpd/finder": "4.0.4", - "@jscpd/html-reporter": "4.0.4", - "@jscpd/tokenizer": "4.0.4", - "colors": "^1.4.0", - "commander": "^5.0.0", - "fs-extra": "^11.2.0", - "gitignore-to-glob": "^0.3.0", - "jscpd-sarif-reporter": "4.0.6" - }, - "bin": { - "jscpd": "bin/jscpd" - } - }, - "node_modules/jscpd-sarif-reporter": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/jscpd-sarif-reporter/-/jscpd-sarif-reporter-4.0.6.tgz", - "integrity": "sha512-b9Sm3IPZ3+m8Lwa4gZa+4/LhDhlc/ZLEsLXKSOy1DANQ6kx0ueqZT+fUHWEdQ6m0o3+RIVIa7DmvLSojQD05ng==", - "dev": true, - "license": "MIT", - "dependencies": { - "colors": "^1.4.0", - "fs-extra": "^11.2.0", - "node-sarif-builder": "^3.4.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jstransformer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", - "integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-promise": "^2.0.0", - "promise": "^7.0.1" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "11.2.7", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz", - "integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "dev": true, - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", - "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "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/minipass": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-sarif-builder": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/node-sarif-builder/-/node-sarif-builder-3.4.0.tgz", - "integrity": "sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sarif": "^2.1.7", - "fs-extra": "^11.1.1" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/playwright": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", - "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.59.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.59.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", - "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prompts/node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pug": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug/-/pug-3.0.4.tgz", - "integrity": "sha512-kFfq5mMzrS7+wrl5pLJzZEzemx34OQ0w4SARfhy/3yxTlhbstsudDwJzhf1hP02yHzbjoVMSXUj/Sz6RNfMyXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-code-gen": "^3.0.4", - "pug-filters": "^4.0.0", - "pug-lexer": "^5.0.1", - "pug-linker": "^4.0.0", - "pug-load": "^3.0.0", - "pug-parser": "^6.0.0", - "pug-runtime": "^3.0.1", - "pug-strip-comments": "^2.0.0" - } - }, - "node_modules/pug-attrs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz", - "integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "js-stringify": "^1.0.2", - "pug-runtime": "^3.0.0" - } - }, - "node_modules/pug-code-gen": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.4.tgz", - "integrity": "sha512-6okWYIKdasTyXICyEtvobmTZAVX57JkzgzIi4iRJlin8kmhG+Xry2dsus+Mun/nGCn6F2U49haHI5mkELXB14g==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "doctypes": "^1.1.0", - "js-stringify": "^1.0.2", - "pug-attrs": "^3.0.0", - "pug-error": "^2.1.0", - "pug-runtime": "^3.0.1", - "void-elements": "^3.1.0", - "with": "^7.0.0" - } - }, - "node_modules/pug-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.1.0.tgz", - "integrity": "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz", - "integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "constantinople": "^4.0.1", - "jstransformer": "1.0.0", - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0", - "resolve": "^1.15.1" - } - }, - "node_modules/pug-lexer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz", - "integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-parser": "^2.2.0", - "is-expression": "^4.0.0", - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-linker": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz", - "integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-load": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz", - "integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4.1.1", - "pug-walk": "^2.0.0" - } - }, - "node_modules/pug-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz", - "integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0", - "token-stream": "1.0.0" - } - }, - "node_modules/pug-runtime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz", - "integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==", - "dev": true, - "license": "MIT" - }, - "node_modules/pug-strip-comments": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz", - "integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "pug-error": "^2.0.0" - } - }, - "node_modules/pug-walk": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz", - "integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", - "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "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/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/reprism": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/reprism/-/reprism-0.0.11.tgz", - "integrity": "sha512-VsxDR5QxZo08M/3nRypNlScw5r3rKeSOPdU/QhDmu3Ai3BJxHn/qgfXGWQp/tAxUtzwYNo9W6997JZR0tPLZsA==", - "dev": true, - "license": "MIT" - }, - "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/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "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", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/spark-md5": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spark-md5/-/spark-md5-3.0.2.tgz", - "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, - "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-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/token-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz", - "integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==", - "dev": true, - "license": "MIT" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", - "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", - "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "dev": true, - "license": "MIT" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/with": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz", - "integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.9.6", - "@babel/types": "^7.9.6", - "assert-never": "^1.2.1", - "babel-walk": "3.0.0-canary-5" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/package.json @@ -1,22 +0,0 @@ -{ - "name": "loop-bench-a45vhkn9", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC", - "type": "commonjs", - "devDependencies": { - "@eslint/js": "^10.0.1", - "@playwright/test": "^1.59.1", - "@types/node": "^25.5.2", - "eslint": "^10.2.0", - "html-validate": "^10.11.3", - "jscpd": "^4.0.8", - "typescript": "^6.0.2" - } -} diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/report/jscpd-report.json @@ -1,144 +0,0 @@ -{ - "statistics": { - "detectionDate": "2026-04-04T06:54:48.175Z", - "formats": { - "typescript": { - "sources": { - "src/tetris.ts": { - "lines": 826, - "tokens": 9320, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 826, - "tokens": 9320, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "javascript": { - "sources": { - "dist/tetris.js": { - "lines": 668, - "tokens": 8906, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 668, - "tokens": 8906, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "json": { - "sources": { - "tsconfig.json": { - "lines": 12, - "tokens": 80, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - }, - "package.json": { - "lines": 21, - "tokens": 132, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 33, - "tokens": 212, - "sources": 2, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "markup": { - "sources": { - "index.html": { - "lines": 128, - "tokens": 924, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "total": { - "lines": 128, - "tokens": 924, - "sources": 1, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - } - }, - "total": { - "lines": 1655, - "tokens": 19362, - "sources": 5, - "clones": 0, - "duplicatedLines": 0, - "duplicatedTokens": 0, - "percentage": 0, - "percentageTokens": 0, - "newDuplicatedLines": 0, - "newClones": 0 - } - }, - "duplicates": [] -} -\ No newline at end of file diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/src/tetris.ts b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/src/tetris.ts @@ -1,827 +0,0 @@ -// ─── Constants ─────────────────────────────────────────────────────────────── - -const COLS = 10; -const ROWS = 20; -const BLOCK = 30; // px per cell -const HIDDEN_ROWS = 2; // rows above the visible grid for spawn area - -// Scoring per simultaneous line-clear (classic Tetris BPS formula × level) -const LINE_SCORES = [0, 100, 300, 500, 800]; - -// Frames-per-drop at each level (lower = faster). 60 fps baseline. -const SPEEDS: number[] = [ - 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 0-9 - 5, 5, 5, 4, 4, 4, 3, 3, 3, // levels 10-18 - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // levels 19-28 - 1 // level 29+ -]; - -function speedForLevel(level: number): number { - return SPEEDS[Math.min(level, SPEEDS.length - 1)]; -} - -// ─── Piece definitions ─────────────────────────────────────────────────────── - -// Each piece is represented as an array of rotation states. -// Every rotation state is a 4×4 grid (flat array, row-major). - -type PieceShape = number[][]; // [rotation][cell-index] -type Color = string; - -interface PieceDef { - shapes: PieceShape; - color: Color; -} - -// prettier-ignore -const PIECES: PieceDef[] = [ - // I - { - color: "#00f0f0", - shapes: [ - [0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0], - [0,0,1,0, 0,0,1,0, 0,0,1,0, 0,0,1,0], - [0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0], - [0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0], - ], - }, - // O - { - color: "#f0f000", - shapes: [ - [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0], - ], - }, - // T - { - color: "#a000f0", - shapes: [ - [0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,0,0, 0,1,1,0, 0,1,0,0, 0,0,0,0], - [0,0,0,0, 1,1,1,0, 0,1,0,0, 0,0,0,0], - [0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0], - ], - }, - // S - { - color: "#00f000", - shapes: [ - [0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0], - [0,1,0,0, 0,1,1,0, 0,0,1,0, 0,0,0,0], - [0,0,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0], - [1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0], - ], - }, - // Z - { - color: "#f00000", - shapes: [ - [1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0], - [0,0,1,0, 0,1,1,0, 0,1,0,0, 0,0,0,0], - [0,0,0,0, 1,1,0,0, 0,1,1,0, 0,0,0,0], - [0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0], - ], - }, - // J - { - color: "#0000f0", - shapes: [ - [1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,1,0, 0,1,0,0, 0,1,0,0, 0,0,0,0], - [0,0,0,0, 1,1,1,0, 0,0,1,0, 0,0,0,0], - [0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0], - ], - }, - // L - { - color: "#f0a000", - shapes: [ - [0,0,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0], - [0,1,0,0, 0,1,0,0, 0,1,1,0, 0,0,0,0], - [0,0,0,0, 1,1,1,0, 1,0,0,0, 0,0,0,0], - [1,1,0,0, 0,1,0,0, 0,1,0,0, 0,0,0,0], - ], - }, -]; - -// ─── SRS Wall-kick data ─────────────────────────────────────────────────────── - -// Tests for J, L, S, T, Z pieces (non-I) -// Index: [fromRotation * 4 + toDirection (0=CW, 1=CCW)] -// Each entry: array of (col_offset, row_offset) pairs to try - -const KICKS_JLSTZ: [number, number][][] = [ - // 0>>1 (CW from state 0) - [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - // 1>>0 (CCW from state 1) - [[0,0],[1,0],[1,-1],[0,2],[1,2]], - // 1>>2 - [[0,0],[1,0],[1,-1],[0,2],[1,2]], - // 2>>1 - [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]], - // 2>>3 - [[0,0],[1,0],[1,1],[0,-2],[1,-2]], - // 3>>2 - [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - // 3>>0 - [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]], - // 0>>3 (CCW from state 0) - [[0,0],[1,0],[1,1],[0,-2],[1,-2]], -]; - -const KICKS_I: [number, number][][] = [ - // 0>>1 - [[0,0],[-2,0],[1,0],[-2,-1],[1,2]], - // 1>>0 - [[0,0],[2,0],[-1,0],[2,1],[-1,-2]], - // 1>>2 - [[0,0],[-1,0],[2,0],[-1,2],[2,-1]], - // 2>>1 - [[0,0],[1,0],[-2,0],[1,-2],[-2,1]], - // 2>>3 - [[0,0],[2,0],[-1,0],[2,1],[-1,-2]], - // 3>>2 - [[0,0],[-2,0],[1,0],[-2,-1],[1,2]], - // 3>>0 - [[0,0],[1,0],[-2,0],[1,-2],[-2,1]], - // 0>>3 - [[0,0],[-1,0],[2,0],[-1,2],[2,-1]], -]; - -function getKickTable(pieceIndex: number, fromRot: number, cw: boolean): [number, number][] { - const tableIndex = [ - 0 * 2 + (cw ? 0 : 1), // 0 CW→1 | 0 CCW→3 - 1 * 2 + (cw ? 0 : 1), // 1 CW→2 | 1 CCW→0 - 2 * 2 + (cw ? 0 : 1), // 2 CW→3 | 2 CCW→1 - 3 * 2 + (cw ? 0 : 1), // 3 CW→0 | 3 CCW→2 - ]; - const table = pieceIndex === 0 ? KICKS_I : KICKS_JLSTZ; - return table[tableIndex[fromRot]]; -} - -// ─── Piece (active) ─────────────────────────────────────────────────────────── - -interface ActivePiece { - index: number; // piece type index into PIECES - rot: number; // current rotation state 0-3 - col: number; // left edge column (can be negative) - row: number; // top edge row (0 = first hidden row) -} - -function pieceBlocks(p: ActivePiece): [number, number][] { - const shape = PIECES[p.index].shapes[p.rot]; - const cells: [number, number][] = []; - for (let r = 0; r < 4; r++) { - for (let c = 0; c < 4; c++) { - if (shape[r * 4 + c]) { - cells.push([p.row + r, p.col + c]); - } - } - } - return cells; -} - -// ─── Board ──────────────────────────────────────────────────────────────────── - -// Board includes hidden rows at the top. Total height = ROWS + HIDDEN_ROWS. -// Each cell: 0 = empty, else = color string. - -type Board = (string | 0)[][]; - -function createBoard(): Board { - return Array.from({ length: ROWS + HIDDEN_ROWS }, () => Array(COLS).fill(0)); -} - -function isValid(board: Board, p: ActivePiece): boolean { - for (const [r, c] of pieceBlocks(p)) { - if (c < 0 || c >= COLS) return false; - if (r >= ROWS + HIDDEN_ROWS) return false; - if (r >= 0 && board[r][c] !== 0) return false; - } - return true; -} - -function lockPiece(board: Board, p: ActivePiece): void { - const color = PIECES[p.index].color; - for (const [r, c] of pieceBlocks(p)) { - if (r >= 0) board[r][c] = color; - } -} - -/** Clears full lines; returns count of lines cleared. */ -function clearLines(board: Board): number { - let cleared = 0; - for (let r = ROWS + HIDDEN_ROWS - 1; r >= 0; ) { - if (board[r].every(cell => cell !== 0)) { - board.splice(r, 1); - board.unshift(Array(COLS).fill(0)); - cleared++; - // Don't decrement r — the row at index r is now the next one to check - } else { - r--; - } - } - return cleared; -} - -// ─── Bag randomiser (7-bag) ─────────────────────────────────────────────────── - -function newBag(): number[] { - const bag = [0, 1, 2, 3, 4, 5, 6]; - for (let i = bag.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [bag[i], bag[j]] = [bag[j], bag[i]]; - } - return bag; -} - -// ─── Ghost piece ────────────────────────────────────────────────────────────── - -function ghostPiece(board: Board, p: ActivePiece): ActivePiece { - let ghost: ActivePiece = { ...p }; - while (isValid(board, { ...ghost, row: ghost.row + 1 })) { - ghost = { ...ghost, row: ghost.row + 1 }; - } - return ghost; -} - -// ─── Game state ─────────────────────────────────────────────────────────────── - -interface GameState { - board: Board; - current: ActivePiece; - next: number[]; // upcoming piece indices (first = next) - held: number | null; - holdUsed: boolean; // can only hold once per piece - score: number; - lines: number; - level: number; - gameOver: boolean; - paused: boolean; - // tick counters - dropCounter: number; // frames since last gravity drop - lockDelay: number; // frames spent "touching" the floor (for lock delay) - bag: number[]; // current 7-bag -} - -function spawnPiece(index: number): ActivePiece { - return { - index, - rot: 0, - col: Math.floor(COLS / 2) - 2, - row: HIDDEN_ROWS - 1, // spawn in hidden area (row 1 visible = row HIDDEN_ROWS) - }; -} - -function nextFromBag(state: GameState): number { - if (state.bag.length === 0) state.bag = newBag(); - return state.bag.pop()!; -} - -function initState(): GameState { - const bag = newBag(); - // prefill 5 preview pieces - const next: number[] = []; - const tempBag = [...bag]; - const extraBag = newBag(); - const combined = [...tempBag, ...extraBag]; - for (let i = 0; i < 5; i++) next.push(combined.pop()!); - const remainingBag = combined; - - const currentIndex = remainingBag.pop()!; - - return { - board: createBoard(), - current: spawnPiece(currentIndex), - next, - held: null, - holdUsed: false, - score: 0, - lines: 0, - level: 0, - gameOver: false, - paused: false, - dropCounter: 0, - lockDelay: 0, - bag: remainingBag, - }; -} - -// ─── Renderer ──────────────────────────────────────────────────────────────── - -class Renderer { - private canvas: HTMLCanvasElement; - private ctx: CanvasRenderingContext2D; - - constructor(canvas: HTMLCanvasElement) { - this.canvas = canvas; - this.ctx = canvas.getContext("2d")!; - } - - clear(): void { - this.ctx.fillStyle = "#111"; - this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - } - - drawBlock(col: number, row: number, color: string, alpha = 1): void { - const x = col * BLOCK; - const y = row * BLOCK; - const ctx = this.ctx; - ctx.globalAlpha = alpha; - - // Fill - ctx.fillStyle = color; - ctx.fillRect(x + 1, y + 1, BLOCK - 2, BLOCK - 2); - - // Highlight (top-left bevel) - ctx.fillStyle = "rgba(255,255,255,0.25)"; - ctx.fillRect(x + 1, y + 1, BLOCK - 2, 4); - ctx.fillRect(x + 1, y + 1, 4, BLOCK - 2); - - // Shadow (bottom-right bevel) - ctx.fillStyle = "rgba(0,0,0,0.35)"; - ctx.fillRect(x + 1, y + BLOCK - 5, BLOCK - 2, 4); - ctx.fillRect(x + BLOCK - 5, y + 1, 4, BLOCK - 2); - - ctx.globalAlpha = 1; - } - - drawBoard(board: Board): void { - for (let r = HIDDEN_ROWS; r < ROWS + HIDDEN_ROWS; r++) { - for (let c = 0; c < COLS; c++) { - const cell = board[r][c]; - const visRow = r - HIDDEN_ROWS; - if (cell !== 0) { - this.drawBlock(c, visRow, cell); - } else { - // Grid dot - this.ctx.fillStyle = "rgba(255,255,255,0.04)"; - this.ctx.fillRect(c * BLOCK + BLOCK / 2 - 1, visRow * BLOCK + BLOCK / 2 - 1, 2, 2); - } - } - } - } - - drawPiece(p: ActivePiece, ghost = false): void { - const color = PIECES[p.index].color; - for (const [r, c] of pieceBlocks(p)) { - const visRow = r - HIDDEN_ROWS; - if (visRow >= 0 && visRow < ROWS) { - if (ghost) { - // Ghost: outline only - const x = c * BLOCK; - const y = visRow * BLOCK; - this.ctx.strokeStyle = color; - this.ctx.globalAlpha = 0.35; - this.ctx.lineWidth = 2; - this.ctx.strokeRect(x + 2, y + 2, BLOCK - 4, BLOCK - 4); - this.ctx.globalAlpha = 1; - } else { - this.drawBlock(c, visRow, color); - } - } - } - } - - drawMiniPiece( - ctx: CanvasRenderingContext2D, - index: number, - cx: number, - cy: number, - blockSize = 20 - ): void { - const shape = PIECES[index].shapes[0]; - const color = PIECES[index].color; - // Find bounding box - let minR = 4, maxR = 0, minC = 4, maxC = 0; - for (let r = 0; r < 4; r++) { - for (let c = 0; c < 4; c++) { - if (shape[r * 4 + c]) { - minR = Math.min(minR, r); - maxR = Math.max(maxR, r); - minC = Math.min(minC, c); - maxC = Math.max(maxC, c); - } - } - } - const pw = (maxC - minC + 1) * blockSize; - const ph = (maxR - minR + 1) * blockSize; - const ox = cx - pw / 2; - const oy = cy - ph / 2; - - for (let r = minR; r <= maxR; r++) { - for (let c = minC; c <= maxC; c++) { - if (shape[r * 4 + c]) { - const x = ox + (c - minC) * blockSize; - const y = oy + (r - minR) * blockSize; - ctx.fillStyle = color; - ctx.fillRect(x + 1, y + 1, blockSize - 2, blockSize - 2); - ctx.fillStyle = "rgba(255,255,255,0.25)"; - ctx.fillRect(x + 1, y + 1, blockSize - 2, 3); - ctx.fillRect(x + 1, y + 1, 3, blockSize - 2); - ctx.fillStyle = "rgba(0,0,0,0.3)"; - ctx.fillRect(x + 1, y + blockSize - 4, blockSize - 2, 3); - ctx.fillRect(x + blockSize - 4, y + 1, 3, blockSize - 2); - } - } - } - } -} - -// ─── Sidebar renderer ───────────────────────────────────────────────────────── - -class SidebarRenderer { - private canvas: HTMLCanvasElement; - private ctx: CanvasRenderingContext2D; - private renderer: Renderer; - - constructor(canvas: HTMLCanvasElement, renderer: Renderer) { - this.canvas = canvas; - this.ctx = canvas.getContext("2d")!; - this.renderer = renderer; - } - - draw(state: GameState): void { - const ctx = this.ctx; - ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); - - ctx.fillStyle = "#1a1a2e"; - ctx.fillRect(0, 0, this.canvas.width, this.canvas.height); - - const W = this.canvas.width; - - // ── NEXT pieces ── - this.drawLabel(ctx, "NEXT", W / 2, 28); - for (let i = 0; i < Math.min(5, state.next.length); i++) { - this.renderer.drawMiniPiece(ctx, state.next[i], W / 2, 70 + i * 64, 18); - } - - // ── HOLD ── - const holdY = 70 + 5 * 64 + 20; - this.drawLabel(ctx, "HOLD", W / 2, holdY); - if (state.held !== null) { - const alpha = state.holdUsed ? 0.35 : 1; - ctx.globalAlpha = alpha; - this.renderer.drawMiniPiece(ctx, state.held, W / 2, holdY + 40, 18); - ctx.globalAlpha = 1; - } - - // ── SCORE / LINES / LEVEL ── - const statsY = holdY + 90; - this.drawStat(ctx, "SCORE", String(state.score), W / 2, statsY); - this.drawStat(ctx, "LINES", String(state.lines), W / 2, statsY + 70); - this.drawStat(ctx, "LEVEL", String(state.level), W / 2, statsY + 140); - } - - private drawLabel(ctx: CanvasRenderingContext2D, text: string, x: number, y: number): void { - ctx.fillStyle = "#888"; - ctx.font = "bold 12px 'Courier New', monospace"; - ctx.textAlign = "center"; - ctx.fillText(text, x, y); - } - - private drawStat( - ctx: CanvasRenderingContext2D, - label: string, - value: string, - x: number, - y: number - ): void { - this.drawLabel(ctx, label, x, y); - ctx.fillStyle = "#fff"; - ctx.font = "bold 22px 'Courier New', monospace"; - ctx.textAlign = "center"; - ctx.fillText(value, x, y + 26); - } -} - -// ─── Input handler ──────────────────────────────────────────────────────────── - -type Action = - | "moveLeft" - | "moveRight" - | "softDrop" - | "hardDrop" - | "rotateCW" - | "rotateCCW" - | "hold" - | "pause"; - -const KEY_MAP: Record<string, Action> = { - ArrowLeft: "moveLeft", - ArrowRight: "moveRight", - ArrowDown: "softDrop", - ArrowUp: "rotateCW", - " ": "hardDrop", // Space - z: "rotateCCW", - Z: "rotateCCW", - x: "rotateCW", - X: "rotateCW", - c: "hold", - C: "hold", - p: "pause", - P: "pause", - Escape: "pause", -}; - -class InputHandler { - private pressed = new Set<Action>(); - private justPressed = new Set<Action>(); - // DAS (delayed auto shift) - private dasTimer: Partial<Record<Action, number>> = {}; - private readonly DAS_INITIAL = 10; // frames before auto-repeat starts - private readonly DAS_REPEAT = 2; // frames between repeats - - constructor() { - window.addEventListener("keydown", (e) => { - const action = KEY_MAP[e.key]; - if (action) { - e.preventDefault(); - if (!this.pressed.has(action)) { - this.justPressed.add(action); - this.pressed.add(action); - this.dasTimer[action] = 0; - } - } - }); - window.addEventListener("keyup", (e) => { - const action = KEY_MAP[e.key]; - if (action) { - this.pressed.delete(action); - delete this.dasTimer[action]; - } - }); - } - - /** Call once per frame to update DAS timers. Returns actions to execute this frame. */ - tick(): Action[] { - const actions: Action[] = []; - - for (const action of this.justPressed) { - actions.push(action); - } - this.justPressed.clear(); - - // DAS for movement - for (const action of ["moveLeft", "moveRight", "softDrop"] as Action[]) { - if (this.pressed.has(action) && !actions.includes(action)) { - const t = (this.dasTimer[action] ?? 0) + 1; - this.dasTimer[action] = t; - if (t >= this.DAS_INITIAL && (t - this.DAS_INITIAL) % this.DAS_REPEAT === 0) { - actions.push(action); - } - } - } - - return actions; - } -} - -// ─── Game logic ─────────────────────────────────────────────────────────────── - -const LOCK_DELAY_FRAMES = 30; // half a second at 60fps - -function tryMove(state: GameState, dc: number, dr: number): boolean { - const next: ActivePiece = { ...state.current, col: state.current.col + dc, row: state.current.row + dr }; - if (isValid(state.board, next)) { - state.current = next; - return true; - } - return false; -} - -function tryRotate(state: GameState, cw: boolean): boolean { - const fromRot = state.current.rot; - const toRot = cw ? (fromRot + 1) % 4 : (fromRot + 3) % 4; - const kicks = getKickTable(state.current.index, fromRot, cw); - - for (const [dc, dr] of kicks) { - const candidate: ActivePiece = { - ...state.current, - rot: toRot, - col: state.current.col + dc, - row: state.current.row + dr, - }; - if (isValid(state.board, candidate)) { - state.current = candidate; - return true; - } - } - return false; -} - -function doHold(state: GameState): void { - if (state.holdUsed) return; - state.holdUsed = true; - const idx = state.current.index; - if (state.held === null) { - state.held = idx; - spawnNext(state); - } else { - const prev = state.held; - state.held = idx; - state.current = spawnPiece(prev); - if (!isValid(state.board, state.current)) { - state.gameOver = true; - } - } - state.dropCounter = 0; - state.lockDelay = 0; -} - -function spawnNext(state: GameState): void { - const nextIdx = state.next.shift()!; - // Refill next queue - if (state.bag.length === 0) state.bag = newBag(); - state.next.push(state.bag.pop()!); - - state.current = spawnPiece(nextIdx); - state.holdUsed = false; - state.dropCounter = 0; - state.lockDelay = 0; - - if (!isValid(state.board, state.current)) { - state.gameOver = true; - } -} - -function lockAndClear(state: GameState): void { - lockPiece(state.board, state.current); - const cleared = clearLines(state.board); - if (cleared > 0) { - state.score += LINE_SCORES[cleared] * (state.level + 1); - state.lines += cleared; - state.level = Math.floor(state.lines / 10); - } - spawnNext(state); -} - -function hardDrop(state: GameState): void { - let dropped = 0; - while (isValid(state.board, { ...state.current, row: state.current.row + 1 })) { - state.current = { ...state.current, row: state.current.row + 1 }; - dropped++; - } - state.score += dropped * 2; - lockAndClear(state); -} - -function processActions(state: GameState, actions: Action[]): void { - for (const action of actions) { - if (action === "pause") { - state.paused = !state.paused; - continue; - } - if (state.paused || state.gameOver) continue; - switch (action) { - case "moveLeft": - if (tryMove(state, -1, 0)) state.lockDelay = 0; - break; - case "moveRight": - if (tryMove(state, 1, 0)) state.lockDelay = 0; - break; - case "softDrop": - if (tryMove(state, 0, 1)) { - state.score += 1; - state.dropCounter = 0; - state.lockDelay = 0; - } - break; - case "hardDrop": - hardDrop(state); - break; - case "rotateCW": - if (tryRotate(state, true)) state.lockDelay = 0; - break; - case "rotateCCW": - if (tryRotate(state, false)) state.lockDelay = 0; - break; - case "hold": - doHold(state); - break; - } - } -} - -function tickGravity(state: GameState): void { - if (state.paused || state.gameOver) return; - - const speed = speedForLevel(state.level); - state.dropCounter++; - - const onGround = !isValid(state.board, { ...state.current, row: state.current.row + 1 }); - - if (onGround) { - state.lockDelay++; - if (state.lockDelay >= LOCK_DELAY_FRAMES) { - lockAndClear(state); - } - } else { - state.lockDelay = 0; - if (state.dropCounter >= speed) { - state.dropCounter = 0; - tryMove(state, 0, 1); - } - } -} - -// ─── Overlay rendering ──────────────────────────────────────────────────────── - -function drawOverlay( - ctx: CanvasRenderingContext2D, - w: number, - h: number, - text: string, - sub: string -): void { - ctx.fillStyle = "rgba(0,0,0,0.65)"; - ctx.fillRect(0, 0, w, h); - - ctx.fillStyle = "#fff"; - ctx.font = "bold 36px 'Courier New', monospace"; - ctx.textAlign = "center"; - ctx.fillText(text, w / 2, h / 2 - 20); - - ctx.font = "16px 'Courier New', monospace"; - ctx.fillStyle = "#aaa"; - ctx.fillText(sub, w / 2, h / 2 + 16); -} - -// ─── Main game loop ─────────────────────────────────────────────────────────── - -class TetrisGame { - private state: GameState; - private renderer: Renderer; - private sidebar: SidebarRenderer; - private input: InputHandler; - private mainCanvas: HTMLCanvasElement; - private frameId = 0; - - constructor() { - this.mainCanvas = document.getElementById("board") as HTMLCanvasElement; - const sideCanvas = document.getElementById("sidebar") as HTMLCanvasElement; - - this.mainCanvas.width = COLS * BLOCK; - this.mainCanvas.height = ROWS * BLOCK; - sideCanvas.width = 140; - sideCanvas.height = ROWS * BLOCK; - - this.renderer = new Renderer(this.mainCanvas); - this.sidebar = new SidebarRenderer(sideCanvas, this.renderer); - this.input = new InputHandler(); - this.state = initState(); - - document.getElementById("restart-btn")!.addEventListener("click", () => this.restart()); - - this.loop(); - } - - restart(): void { - cancelAnimationFrame(this.frameId); - this.state = initState(); - this.loop(); - } - - private loop(): void { - const tick = (): void => { - const actions = this.input.tick(); - processActions(this.state, actions); - tickGravity(this.state); - this.render(); - this.frameId = requestAnimationFrame(tick); - }; - this.frameId = requestAnimationFrame(tick); - } - - private render(): void { - const state = this.state; - const ctx = this.mainCanvas.getContext("2d")!; - const W = this.mainCanvas.width; - const H = this.mainCanvas.height; - - this.renderer.clear(); - this.renderer.drawBoard(state.board); - - if (!state.gameOver && !state.paused) { - this.renderer.drawPiece(ghostPiece(state.board, state.current), true); - this.renderer.drawPiece(state.current); - } - - this.sidebar.draw(state); - - if (state.paused && !state.gameOver) { - drawOverlay(ctx, W, H, "PAUSED", "press P to resume"); - } - if (state.gameOver) { - drawOverlay(ctx, W, H, "GAME OVER", `score: ${state.score}`); - } - } -} - -// Boot when DOM is ready -window.addEventListener("DOMContentLoaded", () => { - new TetrisGame(); -}); diff --git a/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json b/dashboard/public/artifacts/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/tsconfig.json @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ES2020", - "moduleResolution": "node", - "strict": true, - "outDir": "./dist", - "rootDir": "./src", - "lib": ["ES2020", "DOM"], - "noEmitOnError": true - }, - "include": ["src/**/*"] -} diff --git a/grid.yaml b/grid.yaml @@ -4,8 +4,8 @@ defaults: runs_per_cell: 3 timeout_seconds: 1200 budget: - low: 0.50 - high: 5.00 + low: 2.00 + high: 10.00 axes: model: diff --git a/results/index.jsonl b/results/index.jsonl @@ -23,8 +23,8 @@ {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:24:31.353521+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:28:08.059700+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=off_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:27:54.919444+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:28:47.034212+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:28:30.319457+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-04T08:51:19.169046+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-04T08:49:47.576163+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:36:54.110927+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:36:43.094997+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:37:39.835213+00:00"} @@ -41,50 +41,19 @@ {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:14:26.851817+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:11:09.488782+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:12:36.135542+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"opus","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:24:54.853923+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"opus","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:46:58.211270+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"opus","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:45:56.829277+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:51:19.154372+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:51:31.823472+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:54:35.253518+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T21:18:27.572349+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T21:26:24.350727+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:26:49.884606+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run2","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on","completed_at":"2026-04-04T09:41:44.388070+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-04T08:31:26.255450+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-04T08:28:47.315460+00:00"} +{"run_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-04T08:32:28.236448+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:03:41.571216+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:05:07.170256+00:00"} {"run_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:09:11.887288+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T21:00:13.805001+00:00"} -{"run_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T21:01:15.715313+00:00"} {"run_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:50:12.863462+00:00"} {"run_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:52:07.304632+00:00"} {"run_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T19:54:56.953646+00:00"} -{"run_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"sonnet","cell_id":"tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:52:15.455125+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T18:49:38.321463+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T18:49:48.529132+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=high_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T18:53:35.752453+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:40:57.297570+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:41:10.072835+00:00"} {"run_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3","task":"tetris","model":"haiku","cell_id":"tetris_context_file=provided_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on","completed_at":"2026-04-03T20:38:44.044823+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "haiku", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:28:47.315460+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "haiku", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:31:26.255450+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "opus", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:32:03.736289+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "haiku", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:32:28.236448+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "haiku", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:49:47.576163+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "haiku", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=haiku_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:51:19.169046+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:54:00.833091+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T08:59:49.595714+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:04:03.169981+00:00"} -{"run_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:17:48.150479+00:00"} -{"run_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:21:21.713056+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:21:23.215891+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:21:27.378605+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:22:22.253160+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:23:06.354217+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:30:35.563317+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:32:39.853208+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:33:44.883116+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:34:06.164569+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:35:35.999585+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:37:26.539475+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:41:14.143593+00:00"} -{"run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run2", "task": "tetris", "model": "sonnet", "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on", "completed_at": "2026-04-04T09:41:44.388070+00:00"} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":857143,"duration_api_ms":88468,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","total_cost_usd":1.03488045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":67714,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.03488045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"d17f6d07-c7cc-41f3-81fb-585b3fc58b31","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true, - "note": "not applicable for javascript" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 7, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.67 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "javascript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.563152+00:00", - "wall_time_seconds": 857, - "exit_code": 1, - "completed_at": "2026-04-04T09:21:27.378605+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,7 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "javascript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse JavaScript (no TypeScript)."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-oldyixfl","session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"0f3c1a2c-76c4-4bb1-a34f-e51fb09f4c55","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DHZey2vA1B3V7VL2RxgA1X","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser using JavaScript (no TypeScript). Let me build a complete, well-designed Tetris game with:\n\n1. All standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls\n\nLet me create a single HTML file with embedded CSS and JavaScript for easy browser use.\n\nI'll design this with:\n- A canvas-based game\n- Nice visual styling\n- Ghost piece (shadow showing where piece will land)\n\n\n- Next piece preview\n- Score, level, and lines display\n- Keyboard controls: Arrow keys for movement, Up arrow or X for rotation, Space for hard drop, P for pause\n\nNow I'm building the complete HTML structure with embedded CSS and JavaScript...\n\nI'm defining the standard Tetris board as a 10x20 grid and setting up the seven tetrominoes with their distinct colors and rotation patterns...\n\nNow I'm outlining the control scheme and scoring system where clearing multiple lines gives exponentially higher points multiplied by the current level, with difficulty ramping up every 10 lines cleared.\n\nI'll build this as a single HTML file and structure the code around core game mechanics: managing the board state, handling piece movement and rotation, detecting line clears, and updating the score and level accordingly. Writing the HTML/CSS layout... Still writing styles... Writing the HTML structure and game logic... Defining the piece rotations... Defining the rotation states for the remaining Tetris pieces... I'm going back and forth on the best way to represent the piece rotations—I could use coordinate offsets, string encoding, or matrices. Let me just settle on a matrix approach and write out a clean implementation that actually works.\n\nDefining tetromino shapes...\n\nNow I need to think through the coordinate system—the board is 10 columns by 20 rows, and each piece occupies a 4×4 matrix where I map the filled cells onto the board using the piece's position plus the row and column offsets from the matrix. I'll structure this as a single HTML file with clean, organized code.\n\nSetting up the UI with a canvas for the main game board at 300×600 pixels (30-pixel cells), another canvas for previewing the next piece, and HTML elements to display the score, level, and line count. I'm going for a dark theme to keep it visually clean.\n\nFor rotation, I'll implement basic wall kick logic—if a rotation fails at the current position, I'll try shifting the piece left or right before rejecting the move entirely. This makes the rotation feel more natural without overcomplicating things.\n\nWriting the complete implementation... Defining the Tetris piece shapes... Defining the remaining Tetris piece configurations... Defining the game state variables... Setting up game initialization and piece spawning...\n\nNow I'm implementing the collision detection system to check if a piece can occupy a given position, validating against board boundaries and existing blocks.\n\nSetting up piece movement controls that check validity before shifting the piece left or right, and handling soft drops with score bonuses while locking pieces when they can't move down further.\n\nImplementing hard drop mechanics that instantly move pieces to their lowest position while awarding points based on distance dropped, then handling rotation with wall kick offsets to allow pieces to rotate even when partially blocked. Finishing the piece locking logic and implementing the line-clearing system that removes completed rows, updates the score based on how many lines were cleared and the current level, then spawns the next piece...\n\nNow I'm working on the ghost piece visualization to show where the current piece will land, and setting up the drawing functions to render blocks with color and transparency. Writing the render loop... Finishing the ghost piece rendering...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4729,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","uuid":"f9efd4de-f970-455f-be0e-e3d3255bc0e4"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CezgtXj1iYybgsNWREhifs","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using JavaScript. Let me build a complete, well-structured Tetris game with:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z/X for rotation)\n7. Game over detection\n8. Next piece preview\n9. Level display\n\nLet me create a single HTML file with embedded CSS and JavaScript.\n\n\nI'll structure this with a canvas for the game board, a side panel showing score, level, lines cleared, and the next piece preview, plus a game over overlay. For the styling, I'm going with a dark retro aesthetic with distinct colors for each piece type. The JavaScript will handle all the game logic—piece definitions with their rotation states, game state management, keyboard input, collision detection, line clearing, and a game loop using requestAnimationFrame.\n\nNow I'm defining the seven Tetromino pieces with their colors and setting up the scoring system where clearing multiple lines gives exponential bonuses multiplied by the current level. The game will start with pieces dropping every second and accelerate every 10 lines cleared. For controls, I'm mapping arrow keys for movement and rotation, space for hard drop, and P to pause.\n\nWriting the game code... Setting up the game constants and piece definitions... Now I'm thinking through the rotation mechanics—I'll transpose the matrix and reverse rows for clockwise rotation, with the opposite approach for counter-clockwise. I'm also planning to add wall kick functionality so pieces can nudge left or right if they hit the edge during rotation, plus a ghost piece that shows where the current piece will land. For the full game, I'm building out a complete HTML interface with a dark gradient background and polished UI.\n\nWriting the HTML and CSS... Still writing styles... Styling the start button with a pink accent color, hover effects, and monospace font, then adding control instructions below the game board...\n\nBuilding the HTML structure... Writing the game logic... Defining the tetromino pieces... Defining the piece rotations... Defining the game mechanics... Finishing up the wall kick data for the I-piece, then setting up the core game functions to initialize the board and spawn new pieces with proper positioning and rotation states.\n\nNow I'm reconsidering how to handle piece spawning more carefully. The key is centering pieces correctly on the 10-column board—most pieces fit in a 3x3 space while the I-piece needs 4 columns, so I can calculate the starting x position by centering the piece's width. I'll simplify the piece object to just track the shape matrix, rotation state, and position coordinates. I'm working through the spawn position for pieces — starting them at y = -1 (one row above the visible board) makes sense because it matches standard Tetris behavior where pieces like the I piece have their active cells positioned so they appear correctly when the board row calculation happens.\n\nActually, I could simplify this by just spawning at y = 0 and triggering game over when a newly placed piece immediately collides with existing pieces on the board. Let me set pieces to spawn from y = -2 to give them room to emerge from the top, then write out the complete implementation with the standard rotation matrices for each piece type.\n\nWriting piece rotation logic... Writing collision detection logic... Writing the collision detection logic... Writing game mechanics... Still writing rotation logic... Writing the render function... Writing the cell rendering... Writing the piece preview renderer... I'm ready to finalize the code and make sure everything works smoothly together. For line clearing, I'll keep it simple and just remove completed lines instantly without animation for now. I'm also implementing a standard 7-bag randomizer for piece selection, where each set of all 7 piece types gets shuffled and dealt out in order.\n\nImplementing the bag system...\n\nFor piece locking, I'll go with the straightforward approach where pieces lock immediately when they can't move down anymore, though players can still shift them sideways before the next gravity tick. Input handling will use key repeat for smooth left and right movement, though I might skip the full DAS implementation initially to keep things manageable.\n\nNow I'm thinking about the visual polish—adding cell gradients with highlights and shadows, grid lines, a ghost piece outline, a nice color palette, and maybe some effects like line clear flashes. I'll use 30px cells for the main 300×600 board and 24px cells for the next piece preview in a 4×4 area.\n\nWriting the complete implementation...\n\nI want to make sure the core mechanics work: piece rotation with wall kicks, ghost piece rendering, hard drop, line clearing with scoring, level progression, 7-bag randomizer, lock detection, and a game over screen with restart. I'm skipping sound to keep things simple and focusing on visual feedback instead.\n\nFor lock delay, I could implement a system where the piece waits before locking after hitting the ground, resetting if it moves or rotates—but that adds complexity I don't need right now, so I'll keep the simpler approach where pieces lock immediately when they can't fall further.\n\nThe game loop timing works well with gravity ticking at intervals based on level speed: slower at lower levels (800ms at level 1) and faster at higher levels (125ms at level 10), which naturally gives players less reaction time as difficulty increases. I'll add a score multiplier display for line clears and maybe a \"Tetris!\" message for clearing four lines at once.\n\nWriting the code now...\n\nAdding 3D cell rendering... Writing the cell rendering function...\n\nNow I'm moving on to write out the complete HTML file with all the final decisions locked in—a 10×20 game board with 30-pixel cells, using this 3D beveled effect for the visual polish. I'm deciding between the classic Nintendo scoring and the modern Tetris guideline system—I'll go with the guideline version since it's more standard. For the drop speed, I'm calculating a formula that starts at 1000ms for level 1 and decreases progressively, capping out at 50ms for the highest levels. Writing the complete Tetris implementation...\n\nNow I'm thinking through the next piece preview canvas—I need to handle the different tetromino shapes which have varying dimensions, so I'll normalize everything to a 4×4 grid and center each piece within it. I'm settling on a 120×100 canvas with 22px cells to give enough breathing room around the preview.\n\nWriting the preview rendering logic...\n\nNow I'm thinking through the complete implementation and realizing I should skip the hold piece feature to keep things simpler, but I do want to add proper keyboard handling with DAS (Delayed Auto Shift) so the game feels responsive when holding left or right—there'll be an initial delay before the piece starts auto-repeating, then it moves at a faster rate.\n\nSetting up the keyboard input system...\n\nI'm realizing the DAS (Delayed Auto Shift) implementation with separate timers is getting unwieldy, so I'm switching to a simpler approach where I track which keys are currently held in a Set and handle the repeat logic in the game loop instead. This way I can manage the timing more cleanly with just a couple of counters for left and right movement.\n\nSetting up event listeners... I'm realizing the DAS approach is getting too complicated, so I'll simplify by using the browser's native `keydown` event with the `repeat` property to handle continuous key presses automatically instead of manually tracking timers.\n\nSetting up the complete HTML file now...\n\nActually, I'm realizing the browser's native key repeat is too slow for a responsive Tetris game—it has that initial delay and then a sluggish repeat rate. I need to track which keys are currently held down and handle the repeat timing myself in the game loop, with a shorter initial delay and faster repeat rate for smooth movement.\n\nSetting up the key event handlers... Writing the input handler... Writing the complete implementation... I'm reconsidering the line clearing logic—the splice approach could mess with indices, so I'll rebuild the board by filtering out completed rows and padding with empty rows at the top instead. This is cleaner and avoids index shifting issues.\n\nNow I want to add a visual flash effect when lines clear. I'm tracking which rows are full and setting a flash timer so the cleared rows briefly highlight before disappearing, rather than vanishing instantly.\n\nAdding flash effect logic...\n\nActually, that's getting complicated. Let me just clear lines instantly for now and keep the implementation simple—if the game feels good without the animation, I don't need it.\n\nNow I'm finalizing everything. I'm storing the high score in localStorage so it persists between sessions, and I'm structuring the HTML with a title, game container with the canvas, and an overlay for UI elements.\n\nWriting the complete implementation... Still writing styles... Still writing styles... Building the game interface... Setting up the game controls and constants... Defining the tetromino piece shapes... Defining the Tetris piece rotations... Setting up the game state variables for board, pieces, score, and timing, then grabbing references to the canvas elements and their 2D contexts for rendering. Still writing initialization code... Setting up wall kick data for rotations...\n\nNow I'm implementing the rotation logic, checking if a piece can rotate by testing the new rotation state and applying wall kicks if the initial rotation fails. Implementing piece movement and soft drop mechanics... Continuing with the piece locking logic...\n\nNow I'm handling line clearing—iterating from the bottom up, removing any complete rows and shifting everything down, then calculating points based on how many lines were cleared and the current level. After that, I check if the piece locked above the play area, which means game over. Otherwise, I spawn the next piece.\n\nFor spawning, I'm creating a new piece from the queue, pulling the next type from the bag system, and resetting the lock delay and drop timer. If the new piece immediately collides with existing blocks, the game ends. Then I update the next piece preview.\n\nWriting ghost piece logic... Writing the rendering logic... Drawing the placed blocks and ghost piece...\n\nNow I'm rendering the current falling piece on top, then moving on to draw the next piece preview in its own canvas.\n\nFor the next piece display, I'm clearing the preview canvas and getting the shape data for whichever piece is coming up. I calculate the centered position so it displays nicely in the preview area, then loop through the shape and draw each filled cell with the appropriate color.\n\nAfter that, I'm updating the HUD to show the current score. Writing game initialization and end-game logic... Writing game loop logic... Setting up the input handlers for game controls—checking if the game is paused and routing keyboard inputs to the appropriate movement and rotation functions, with special handling to prevent repeated inputs on certain actions like rotation and hard drop.\n\nNow I'm realizing there's a logic issue with the lock delay system: when a piece lands on the ground, I'm decrementing the lock delay counter, but I also reset it whenever the piece moves successfully. I need to reconsider how these interact—specifically, what happens when the piece is grounded and the gravity timer fires simultaneously. piece. This is correct.\n\n3. But there's a conflict: I also have `dropTimer` for gravity. If the piece is on the ground, I shouldn't try to drop it via gravity. My current code handles this with the `if (onGround)` check - if on ground, we handle lock delay instead of gravity drop. If not on ground, handle gravity. This looks correct.\n\nWait, but there's another issue: if piece is NOT on ground, I handle gravity. But what if after the gravity drop, the piece is now on ground? I should start the lock delay timer then, but in the next frame, it will detect `onGround = true` and start counting down the lock delay. That's fine.\n\nActually wait, I need to re-examine. Let me trace through the sequence: piece falls via gravity until it hits the ground, then the lock delay countdown begins. If the player moves or rotates the piece while it's grounded, the lock delay resets, giving them another 500ms window. I'm initializing the lock delay in `spawnPiece` and resetting it in both `tryMove` and `tryRotate` when the piece is on ground. This should work correctly. Refining the lock delay logic...\n\nI'm realizing the lock delay should only count down when the piece is actually on the ground—when it's falling through empty space, the timer shouldn't be active. The reset behavior makes sense: when gravity moves the piece down and it's no longer touching ground, both the delay and reset counter should reset so the piece gets a fresh lock delay window once it lands again.\n\nThere's a timing issue though—the drop timer keeps accumulating every frame regardless of whether the piece is grounded, so when a new piece spawns after locking, that accumulated timer could cause it to drop immediately. I need to reset the drop timer the moment the piece first makes contact with the ground.\n\nActually, wait—I'm already resetting it in `spawnPiece`, so when the next piece spawns after locking, the timer starts fresh. The accumulated value from the previous piece doesn't carry over. This should be fine.\n\nBut there's another concern: when `onGround` is true and `lockDelay` is still counting down, both `lockDelay` and `dropTimer` are ticking. Once `lockDelay` expires and the piece locks, `spawnPiece` resets `dropTimer` to zero, so the new piece gets a clean slate. That works.\n\nNow I'm tracing through the game-over flow more carefully. When `lockPiece` is called, line clearing happens first, then `spawnPiece` is invoked. Inside `spawnPiece`, if the new piece immediately collides, `endGame` is called and sets `gameActive` to false. Back in `lockPiece`, after `spawnPiece` returns, `gameActive` is already false, so the function just returns. Then the main loop continues but should stop processing since the game is no longer active.\n\nI'm also verifying the scoring system—soft drops award 1 point per press and hard drops award 2 points per row, which aligns with standard Tetris rules.\n\nFor line clears, the point multiplier scales with level, so the scoring formula accounts for difficulty progression correctly.\n\nLevel advancement follows the standard 10-lines-per-level progression, which checks out.\n\nNow I'm reviewing the rotation kick logic for counterclockwise rotations to make sure the wall kick offsets are being applied properly. I'm realizing the O piece needs special handling since all its rotations are identical—I should just return early and skip the rotation logic entirely for that piece type. I'll return early for the O piece to avoid the undefined kicks issue, then move on to handling the I piece kick data for counter-clockwise rotations in the SRS system. I'm working through the SRS kick offset logic for counter-clockwise rotations. For CCW, I need to use the negated kicks from the next rotation state—so when rotating from state `rotation` to `newRot = (rotation + 3) % 4`, I apply the negative of `KICKS_I[newRot]`. Now I'm implementing this in the code by selecting the appropriate kick set based on rotation direction.\n\nLet me verify this matches the standard SRS spec with a concrete example: rotating CW from 0→1 uses the kicks for state 0, while rotating CCW from 1→0 uses the negated kicks for state 0, which gives me the correct offset values that match the official specification.\n\nNow I'm checking the JLSTZ piece kicks to make sure they follow the same pattern.\n\nI need to verify the coordinate system—whether Y increases downward in my implementation matches the SRS documentation, which typically uses Y positive upward. Let me trace through a concrete rotation example to see if the kicks are working correctly. I'm checking the coordinate system against the standard SRS documentation to make sure my kick offsets are correct—the wiki shows positive y values going up in their notation, but my board uses positive y going down, so I need to verify whether I should be negating the dy values when applying these kicks. I'm realizing the coordinate system conversion is tricky—different Tetris implementations handle the SRS kicks differently, and I'm getting confused about whether my y-axis negation is correct. Let me just stick with negating the y component like most implementations do and test it empirically to see if the rotations actually work as expected.\n\nUpdating the kick tables... Defining kick offset data for I-piece rotations...\n\nI need to step back and think about what the I piece actually looks like in each rotation state. When it's horizontal in the initial state, it occupies a single row, and I should verify these kick offsets make physical sense for how the piece moves through rotations. of the matrix has all 4 cells.\nThe I piece in state 1 is vertical: column 2 (0-indexed) of the matrix has all 4 cells.\n\nWhen you rotate from state 0 to state 1 (CW), the long piece goes from horizontal to vertical. \n\nIn the standard 4×4 grid, state 0 looks like:\n```\n....\nIIII\n....\n....\n```\n\nState 1 looks like:\n```\n..I.\n..I.\n..I.\n..I.\n```\n\nIf the piece is at position (px, py) = (3, 5) in state 0 (so the I bar is at row 6), after CW rotation it should become vertical. The natural rotation center is at column 4 (0-indexed), row 6.\n\nActually, the I piece rotation center in Tetris varies by implementation. In modern Tetris guidelines, it's at an offset center.\n\nThis is getting really complex. For a playable game, I'll use a simpler wall kick approach that works reasonably well even if it's not 100% SRS-compliant. I'm implementing a rotation function that tries the new rotation at the current position first, then attempts several wall kick offsets if that fails.\n\nImplementing wall kick logic... Defining wall kick offsets... I'm verifying the O piece positioning—it uses a 4-column matrix centered on the board, which places it at columns 4 and 5, keeping it properly centered. Let me finalize the implementation and stop second-guessing the details. Everything checks out. Now let me verify the S piece rotations I've defined—I'm looking at how each state represents the piece in different orientations, making sure the block positions match what I expect for an S tetromino. I'm applying the transpose-and-reverse method to rotate the S tetromino 90 degrees clockwise, which transforms the original 2×3 shape into a 3×2 vertical orientation. Let me verify this rotation is correct by checking that the four cells still form the proper S pattern in its rotated state. The classic S piece CW rotated looks like:\n```\nS.\nSS\n.S\n```\n\nIn a 3×3 matrix:\n```\nS..\nSS.\n.S.\n```\n\nThat would be:\n```\n4 0 0\n4 4 0\n0 4 0\n```\n\nBut my computed rotation gives:\n```\n0 4 0\n0 4 4\n0 0 4\n```\n\nThese are mirror images of each other. Hmm.\n\nThe issue is that the \"standard\" S piece states can be defined differently by different sources. The important thing is that the piece looks correct and the rotations are consistent.\n\nLet me use the \"official\" tetromino states from the Tetris Guideline. I'll map out all four rotation states for the S piece: the initial state, the clockwise rotation, the 180-degree rotation, and the counter-clockwise rotation. Each state has a specific matrix representation that I need to verify.\n\nNow I'm setting up the rotation tables based on the Tetris Guideline specifications... Defining the tetromino rotation states... Defining the remaining tetromino pieces... I'm verifying the rotation logic by manually applying a clockwise 90-degree rotation using transpose and row reversal, but I'm getting a different result than what I calculated before—the matrices don't match, so I need to figure out where the discrepancy is.\n\nLooking at the actual Tetris Guideline specifications for the S piece, I can see the spawn state and how it should appear in each rotation state, which clarifies the correct positioning within the 3×3 bounding box.\n\nThe issue is that my naive transpose-and-reverse approach produces a different result than what the Guideline specifies—it's rotating around the geometric center of the matrix rather than using the specific rotation center the Guideline defines for each piece.\n\nRather than trying to derive the rotation mathematically, using pre-defined rotation tables like I have in my PIECES definition sidesteps this complexity entirely by explicitly defining what each rotation state should look like.\n\nNow I'm looking up the standard Tetris Guideline rotation states for the S piece to get the exact configurations I need.\n\nFor the Z piece, I'm working through the clockwise rotations—starting with the horizontal orientation and rotating it 90 degrees to get the vertical form, then continuing through the full 360-degree cycle to establish all four states. I'm working through the Z-piece rotations more carefully now. Let me verify the clockwise rotation from state 0 by transposing and reversing rows, which gives me the correct state R configuration.\n\nLooking at how this positions the piece in the 3×3 bounding box, it ends up on the right side, which seems odd visually but aligns with the Tetris Guideline's rotation center definition. I'm realizing my computed rotation state should be mathematically correct according to the standard, though I'm second-guessing whether this positioning makes sense in practice.\n\nThe wall kick offsets from the guideline are specifically designed to work with this rotation center, so using the official rotation states alongside the SRS kicks should handle everything correctly together. I was wrong to doubt the transpose-and-reverse approach—that's exactly what the Guideline uses for J, L, S, T, and Z pieces. Let me recalculate all the rotation states properly by applying clockwise rotation repeatedly to each piece's starting position.\n\nFor the T piece, I'm working through the rotation states by transposing and reversing rows to get each successive clockwise rotation, then checking whether my computed state R matches what I'd expect from a standard T-spin configuration. CW 90°:\n```\nT..\nTT.\nT..\n```\n\nVisually: the stem of the T was pointing UP in state 0, after CW rotation it points LEFT. So the CW rotation should be:\n```\nT.\nTT\nT.\n```\n\nIn a 3×3 box, the leftmost column has all three T's and the middle-right has one T:\n```\nT..\nTT.\nT..\n```\n= `[[T,0,0],[T,T,0],[T,0,0]]` = `[[3,0,0],[3,3,0],[3,0,0]]`\n\nBut my computed result was `[[0,T,0],[0,T,T],[0,T,0]]` which is:\n```\n.T.\n.TT\n.T.\n```\n\nI see—this is the same rotated T shape, just offset to the right within the bounding box. The actual board position comes from the piece's coordinates, not the shape matrix itself, so both representations are valid as long as the relative cell positions match the rotation. The Tetris Guideline specifies rotation centers and SRS kick offsets relative to those centers, which determines the final placement. I'm working through the coordinate transformation for a 90° clockwise rotation in a 3×3 grid, mapping each cell's new position using the formula new_row = col and new_col = (N-1) - row.\n\nVerifying the result against my transpose-and-reverse approach, the filled cells at (1,2), (0,1), (1,1), and (2,1) produce the grid pattern `[[0,3,0],[0,3,3],[0,3,0]]`, which confirms the rotation is correct.\n\nNow I'm working through the rotation formulas for all tetromino pieces. For the I piece in a 4×4 grid, I need to apply the clockwise rotation transformation where a cell at (row, col) maps to (col, 3-row), which should place the horizontal line of four cells into a vertical column. I'm verifying the rotation transformations by checking each cell position. When rotating clockwise from state R, the cells at column 2 map to row 2 across all columns, giving me the horizontal line pattern I expected. The math checks out for state 2 as well.\n\nNow I'm doing the same verification for the left-facing state, where cells at row 2 should map to column 1 after applying the rotation formula, creating a vertical line. Both states match the expected patterns, so my I piece rotations are correct. Let me move on to checking the T piece.\n\nFor the T piece's second rotation state, I'm applying the clockwise rotation formula to the right-facing configuration, which transforms the cells into a downward-pointing T shape.\n\nThen rotating once more to get the left-facing state, I'm verifying that the cells align correctly to form a vertical T with the stem pointing left. I'm getting a discrepancy between my rotation formula and what the standard S piece should look like after a clockwise rotation. Let me reconsider whether I'm using the right transformation—the standard orientation shows the S piece rotated should be taller and narrower, which suggests my current result might be flipped or using the wrong rotation direction. Let me verify this rotation formula by working through the coordinates. For a clockwise rotation around the center point (1,1) in a 3×3 grid, the transformation should map (row, col) to (col, 2-row). Testing a few points confirms this is correct—the shape rotates as expected around the center rather than the corner.\n\nNow I'm visualizing what the S piece actually looks like after rotating 90 degrees clockwise from its initial state. The original S piece has a specific tetromino shape, and when I rotate it, the top-right portion moves to the right side while the bottom-left moves to the left side, creating the rotated configuration.\n\nI'm considering how this rotated piece fits within a 3×3 bounding box and realizing there are two valid representations depending on positioning—one shifted left and one shifted right. The key insight is that Tetris uses the center of the 3×3 box as the rotation point, which determines the final positioning of the piece.\n\nNow I'm computing all rotation states for each piece by applying the rotation transformation repeatedly, starting with the S piece and working through each state systematically. Now I'm applying the rotation transformation (row,col)→(col, 2-row) to each cell in state R, which maps the original positions to their new coordinates. After sorting these transformed cells by row and column, I get the grid representation for state 2: rows 1 and 2 contain the marked cells, with row 1 having columns 1 and 2, and row 2 having columns 0 and 1.\n\nContinuing this process, I'm rotating state 2 to get state L by applying the same transformation to its cells, which gives me a new configuration where the marked cells form a different pattern across all three rows. Continuing to work through the Z piece rotations by applying the transformation formula to track how cells shift between states. Continuing with the L piece rotation, I'm mapping out how the cells transform and building the grid representation. Now I'm working through all the Z piece rotations to establish the complete set of orientations.\n\nMoving on to the J piece, I'm applying the same rotation transformation to find its four states, starting with the initial configuration and rotating clockwise to determine each subsequent orientation. Now I'm tracking the state transitions through another rotation cycle, applying the left transformation to get the next configuration with cells positioned at (0,1), (1,1), (2,1), and (2,0). Continuing with the L piece rotations, I'm applying the same transformation to get the R state, which gives me cells at (2,2), (0,1), (1,1), and (2,1), forming the pattern where the vertical line shifts to the right with the bottom extending further. Continuing to apply the rotation transformations to get the L piece in its next orientation, mapping each cell through the rotation function and then visualizing the resulting grid pattern. I'm verifying my original rotation states against the computed ones to make sure they're all correct, and it looks like my S piece rotations were actually accurate from the start. I've verified all the rotation states for J and L pieces match my calculations—the original rotation matrices were correct all along.\n\nNow let me check the T piece rotations to make sure those are accurate too, and then I'll verify the O piece as well. I'm verifying the O piece spawns at the correct position—columns 4 and 5 on a 10-wide board, which matches standard Tetris. I'm also considering whether to use a simpler 2×2 matrix instead of the 4×3 approach, which would still center properly.\n\nWith a 2×2 matrix and y = -1 spawn position, the piece would start half above the board, which is typical for Tetris pieces. The 4×3 version with padding would also work, but the 2×2 is cleaner and achieves the same centering result. With y=-1, board rows are -1 and 0. Same issue.\n\nActually, wait. All pieces start at y=-1 in my spawn function. For pieces that have cells in row 0 of their matrix (like T with `.T.` at row 0), those cells would be at board row -1 (above board). Is that intentional?\n\nLet me reconsider the spawn position. Standard Tetris spawns pieces at row -1 (partially above the board) for the top of the piece, with the active cells starting at row 0. For example:\n- T piece (row 0 is `.T.`, row 1 is `TTT`): spawns at y=-1, so row 0 of piece is at board row -1 (invisible), row 1 is at board row 0 (visible top). So the T appears to have the bar at the top of the board.\n\nThat's correct Tetris behavior. For the I piece with y=-1, the empty row 0 stays invisible while the four cells in row 1 appear at the board's top. The O piece is trickier though—with its 3-row matrix starting at y=-1, the first row with cells ends up hidden above the board.\n\nI think I should use a 2×2 O piece instead, which would spawn at y=-1 with both rows visible starting at board row 0. That means calculating the spawn x-position as the center of the board minus half the piece width, which gives x=4 for a 10-column board. The O piece would occupy columns 4 and 5. over detection and wall kicks, having the piece be smaller (2×2 vs 3×4) might change behavior slightly. Let me think...\n\nFor the O piece with 2×2, when checking isValid, I check all 4 cells of the 2×2 matrix (all are filled). The boundaries are x=4 to x=5 (board columns), which is fine.\n\nFor wall kicks, I return early for O piece (it doesn't rotate), so wall kick data doesn't matter for O.\n\nOK, 2×2 O piece is fine. Let me update the spawn x calculation:\n\nActually, I realize I had it as `Math.floor((COLS - shape[0].length) / 2)`. For:\n- I (4-wide): 3\n- O (2-wide): 4\n- T, S, Z, J, L (3-wide): 3\n\nThese are all reasonable spawn positions.\n\nFor the O piece at x=4, columns 4,5 are used, which matches standard Tetris for a 10-wide board. ✓\n\nNow I need to finalize everything and write the complete file. I should use the SRS kicks since I've verified they're correctly defined, but I need to account for the y-direction convention—in SRS documentation y increases upward, while in my code it increases downward, so I'll need to negate the y component of each kick.\n\nDefining the SRS kick data... I need to verify my understanding of the SRS coordinate system—the x component is the column offset with rightward as positive, and y is the row offset with upward as positive. To convert to screen coordinates where down is positive, I simply negate the y values, so each offset pair [x, y] becomes [x, -y].\n\nLet me work through the conversion for the 0→R rotation state: the SRS offsets (-1, +1) and (0, -2) become (-1, -1) and (0, 2) in screen space, which makes physical sense for wall kicks—the first moves the piece up and left when kicked at the top-right, and the second handles floor kicks by moving down. Now I'll compile the complete kick offset tables for all pieces. Verifying the SRS to screen coordinate conversions for each rotation state—the y-axis negation is flipping the signs correctly, and I'm confirming that the offset values map properly across all four transitions. Verifying the coordinate transformations for the I-piece kicks by converting from SRS to screen coordinates, accounting for the y-axis flip where negative values represent upward movement.\n\nNow for the counter-clockwise rotations, I'm using the inverse of the clockwise kicks—negating the displacement values from the target rotation state to get the kicks needed for CCW movement.\n\nBut I'm noticing a discrepancy between my calculated kicks and what the standard SRS documentation shows for CCW R→0 transitions. Let me verify the correct kick sequence against the official Tetris wiki to make sure I have the right offsets. Verifying the formula works correctly for CCW rotations by negating the CW kick offsets. Now I'm confident the implementation is solid, so I'll write out the complete file, though I need to handle the O piece specially since it doesn't use rotation kicks.\n\nWriting the HTML file... I'm settling on a 300ms lock delay to give the game good feel, then writing out the complete HTML implementation with the canvas-based Tetris game, styling, and all the game logic.\n\nWriting the HTML and styles... Still writing styles... Writing the HTML markup... Setting up the game constants... Defining the tetromino shapes... Defining the remaining Tetris piece rotations... Defining the wall kick offsets for I-pieces and setting up the scoring system with points for cleared lines and soft/hard drops, then calculating the drop speed based on level.\n\nNow I'm setting up the DOM references for the game board canvas, next piece preview, and UI elements like score, level, and lines counters, plus the overlay for game over states.\n\nSetting up game state variables for the board, current piece, and game mechanics like score tracking, timers for piece locking, and localStorage for the best score. I'm also initializing the bag randomizer that shuffles through all piece types to ensure variety in spawning.\n\nImplementing collision detection to validate piece positions... Writing piece rotation logic... Writing the lock and spawn logic... Finishing the hard drop logic where I accumulate rows and award points accordingly, then I'm moving into the rendering functions to handle drawing individual blocks with support for ghost piece visualization using transparency and stroke effects.\n\nNow I'm adding the 3D bevel effect to solid blocks with highlight and shadow details...\n\nRendering the game board... Still writing the rendering logic... Now I'm setting up the HUD to display the current score, level, and line count, and checking if we've beaten the high score to update localStorage. Then I'm initializing the game board with an empty grid, filling the piece bag, and resetting the score and level to start fresh.\n\nI need to be careful with the piece spawning logic—I should draw one piece for the current active piece and another for the next preview, making sure the sequence is correct. I'm realizing the piece spawning logic needs to be clean: draw one piece for the current game piece, then draw another for the next preview. Now I'm thinking through the game loop timing and how the animation frame callback should handle the game state updates.\n\nWriting game loop logic... Still writing game logic... Refining the game loop logic...\n\nI need to handle the timing more carefully—checking whether the piece was grounded at the start of the frame versus after gravity applies, so I can properly initialize the lock timer when it first touches ground. Let me restructure the loop to track state changes more accurately. The logic here handles the lock timer correctly—when grounded, it counts down toward locking the piece, and when airborne, gravity takes over until the piece lands, at which point the lock timer resets. I'm thinking through an edge case where `drop()` might not actually move the piece even though `grounded()` initially returned false, but that shouldn't happen since both functions check the same validity conditions.\n\nNow I'm realizing that at very high levels, the gravity interval becomes so short that a piece might need to drop multiple cells in a single frame. I should use a loop that keeps dropping the piece as long as the accumulated drop timer exceeds the interval, breaking only if the drop fails—this ensures pieces fall at the correct speed even at extreme difficulty levels. At max level, the drop interval caps out at 50ms, which means the piece drops roughly every 3 frames at 60fps. The `while` loop handles multiple drops per frame if needed, though it's mostly a safety measure. The `Math.min(dt, 100)` cap prevents huge time jumps when the browser tab is inactive, which would otherwise cause the piece to skip multiple rows instantly. Now I need to finalize the HTML file and make sure the best score display is properly initialized.\n\nFor the pause feature, I'll toggle it with the P key and show an overlay with a \"PAUSED\" message and resume button. I should also render the initial board state so the empty grid displays behind the overlay when the game loads. Before writing the complete file, I'm double-checking the spawn positions for each piece type—the O piece uses a 2×2 matrix spawning at column 4, while the wider pieces spawn at column 3.\n\nWriting the complete HTML file... I'm verifying the S piece rotations by working through the clockwise and counterclockwise transformations manually—the state R rotation I have doesn't match what a proper 90° clockwise rotation should produce, so I need to recalculate which configuration actually corresponds to each rotation state. I'm confirming that the rotated state is correct—the grid `[[0,4,0],[0,4,4],[0,0,4]]` matches the visual representation with the piece rotated around the matrix center at (1,1). The SRS system uses this center point for rotation, so even though the piece appears shifted within the matrix, the positioning will be correct when placed on the board. That confirms the S piece rotation is correct—columns 5 and 6 with the right pattern. Now I'm ready to write out the complete Tetris game in a single HTML file.\n\nWriting the game code... me double-check the spawn orientation one more time to make sure players see the right thing:\n\nS piece state 0: `[[0,4,4],[4,4,0],[0,0,0]]`\nAt x=3, board columns:\n- Row 0: cols 3+1=4, 3+2=5 → .SS\n- Row 1: cols 3+0=3, 3+1=4 → SS.\n- Row 2: empty\n\nVisible pattern:\n```\n.SS (row 0 of piece, but starts at board row -1 since y=-1, so this is hidden initially)\nSS. (row 1 of piece, at board row 0 = visible top)\n```\n\nSo at spawn, player sees SS. at the top of the board, with .SS above it (hidden). On the next gravity tick, it drops to y=0 and both rows become visible. This matches standard Tetris behavior where only the bottom part shows initially. ✓\n\nZ piece state 0: `[[5,5,0],[0,5,5],[0,0,0]]`\nAt x=3:\n- Row 0: cols 3,4 → ZZ.\n- Row 1: cols 4,5 → .ZZ\n\nAt spawn (y=-1), row 0 is hidden, row 1 is at board row 0 (visible). Player sees `.ZZ` at top. ✓\n\nEverything checks out. Now I'm writing the final HTML file with the complete game implementation.\n\nWriting HTML structure...","signature":"EoD6CQpbCAwYAipA+FMXCox7P3yAgDD7jHdNnl7dMBUDYFYr+nSI32VqFmDMPds7iHYhEgNuvlLeNOeuhdLLeV/Uxo5l2bGjXmvM5DIRY2xhdWRlLXNvbm5ldC00LTY4ABIMoPrLQqr9NgkkRLBvGgxPPfMICrjsovtd+6YiMKYt5y+UYZajXh8Qb/wd+9WRJxvwPoI45QZCWtQjnO60lJCZl/yoZA9UiZjfRZ4WTCrR+AlHDZ0wQ+f2d8OFy1ZZrzU/tLiejpa9t6I+TI04xT2wAxO2K0wjfV+T7mFuvzv+O17JmGfnwwQpOyPwct/PiXvPcSIQAXEib/7Z/QFrIOWNBCxx8Qu03EN4E5Pt9UL8zJ7C5eZDvwP2nYd7HEJbYc2LiRS1RGIP48gLqpnPTENIZtsfhsAfxqMAxJ4JEvDY4fK+3wFDWQVfLscvPChURxX+BEgU8V+I18DFoMl2EZhUWEuwlGkEMEL38rA2423Baap5oW3rFU5MaGq8kzMXPpaFpHIt+SjXvjf2KPNveBswUPk/PvLmmSJbDjArrIe0t7xNTDzIifz/ZtHZJZarlWJLRw2mgluhn79z46EpuSKASXxLNNGeMvWupswaZbnrnAfd279QgxNbsjE3lzH9EEeEnryDnZii93kvSa4LUh4fTjg78BqDs/vOYO4LkCZQJnnGleNIdE2N1kpW7UiKV9/A7MZFIZRPx9t0mi01r9+koRwmu1MTTSwblmG2CUSe860ZI5+r6rK0YnseqHt7RVSNloh2MZjoOATPBoS1Zk+FvwXvBJJUxSDD3YatBv9bI7yy8JODvbbvi8/uih8YiBF/gJkQHiYBRVvX5LKbzYs7ucRYrv3Dw4TRY19Vx972G+lFLU1beYpjh6wBfSIeStmB9iE5Gor29bVn+7emZ5mWY7FV2twjPWJAEhh3SZvdM/DdGWf+dBC/5Hnznl+c8J5T2SKM5NdidG7Ea45kUGB2gEfYmkxxn1fFDsqx65FUDLTJpabxo4jWtB2IXqdXQF5ErBLfvj3zP3O0sBHV7LuC/uYTvUIgdelt6R0t8Hie+3y/qJe1H5V2OD5l8CfjnZhn8bOvdvcdxEfocP8xPMxeV9RYqJFlRPRdyuAZS7yItphUesk34b/+TkWf+nz4IpfMQFqGmHfaoW5XXRN8S3T8XLiq5Z13rsgZ5KfrHRnZi1Dw2G5j8t0Y56cxizMSNZCtIv+t0nQmYHrF/0w8ihKExkyzmh90kEzH1IrhIUaoGpruw7AGK99GQcbQwlfzCNyPzmDlpSU9Yu/Dhvn5sznqGm5cIs5JpQ1C4/Ad7NePWfbsCvz6sGUdtIIwzfxeyQjLGfOmlzkzzU4Y6583eFH9Eefrl1nUoLUu6JYOLiwvOG7AGoR/pbcG+JIsJOflRy45hrUPWcUE5TJpd6MuUN/d22lMO1bLqFpUKLl3ihC44kTrg7VH7Kc1vr0rhuu7qcfz45eW4Jx4cj5EE1cs1NcB882pyfQBn6DwcK2zQMAA9+IfL/LD6etv/OPr47RqYq8n68n5Rp7Det7FJlfdRmon1UKUNve9yua+urMhl7vIWiMIa056+Z18e5qRD1Tfh3BpNYbpt+j+AbRVGCPQk9paJLzl/5WEaXo4s+hADrpggKd/i2GUz7XmA9IjmW2TjfMEbp2J3OWYE6i+hqtTNKmdTSkXGkn45g+FHAoBFu2VpVdkn9OSyOEZsTniJT5d4NMaIigOkqcDJXKqQAPdKfJRwGdeiUc4FN3nEpQjSUMhnpqDB76NNR6W0IdPqrZFsx15eC0mQXAuBw97vkA+ExsXJ444Nnnl/vTdXozrVBLjE13mY86iVdIrLoMhqHTEMN5J/NG921wSfXuXW1xIcqQl//fBgmuk2mzVtkyjRQTqny0kRgyzLcQkh8tkGvbdW31F86MbymVbvZFz/jgodbsxzWwlfnLzaGC7/qsERLHh4EaRWzDrubM4mcmXdyqJmYL5dZPAeHbkVKi3a6IUHbzGOxWtO0uGrR0CfGuHzseRA/clPcKqEkJOvm7PAW8ev35DXPwyzV0f+w6hBRn0Fw2BiepaQirJK6uYsnE+EIqHnuTCRyqOC/pwN1dyd6HeZrEEI+7omPW2RkgWn7nc7f47INUzy9Ew+z5H1Pk02kh868Vw+G6nYM19cmHZC36VrIoV6t2N7cjXkcl7+O+XZhQDPEdwYOuDdKZKwGt9W7bas8BUSjt0AhnXnlgiKdHpbTMCiQT7+t/dz4pXpeUV47k2sggZKXZtc/UkalKK0oazclHDsCut5JTJjNS2nytRxBatYJ4+1ORqufECfTaB5AYtEXrHozxC22YRhVuOMmJj0xjtgZ5hwlVLrUJpggCxxphXWprTylZyCSOwHrZlVvzgDY0Vr4HzqRJGK7+8TJwXi8nTcXoRuk1/I0NTMp3nyuqjBtCPvaKtnsPCq0fPZ0R0jkCrEXr5pqslZsl+S8OepNQEv/5GR+9ZRSO2RISoqYdwRkysIlv60+n36XqSZ9Yx6okE9q+Iu6EIsdMU8cvevq8YrjJha75n6Ml+m+9X0f7RqFSam4KuqhRP63GHdWALbVvHih9nCyZsxx+wrAcxGndUTupdv4tsVYTFbNjbSwIrWQwr2ClGoTgAzytQOOzwmtz+NnGkQ50MwjHdYBc91cnwlmAD8yajOmi3wNIF6w7TdjPoYP+DLbLriEB11xi22nMkiq9J2X/XXaRKGM9NOKtIR9hUyEfmfyD55YR5Z8Qt0UAhgqbs6NZh2Z9lmgQyCWg4Nfc0I9kCevG4oe6AkjEEIsSJGOtF8LOMLV+XYpb0fu186Ud15v1wxD/WNqbCCVV0e1RNRqCcx8dJXlkwQyEjImD7OuybE69t0qh7/qWmwgpSyIVlwA16GOsTsX2uddgs8bihV71mLhKUBWnU2D9IGYayLje5QzYCFRQpQFbbyVMBx4EewWtFDaN5ZYBNAd4QyBcI8j0olcLi7s9SJwBs7bkkz5woy0sal2AV0yedxszGLiWwEamRyL6eaMyG9UoSaTwRpcGL9WVwGnbtfaRUZEAj39v8KQIspw56bo4bU3xP+St1S4+QzLggeig58ckJDj6vMjq7ePL/N3DIdd1niZ6JRnQjLjDMU/0dlxXI+2eTBNUW0CoFKgKdD29HIksBmTFxKD9jgm61TIRqk2RHjGGACg3wv/RtljHhxupvs7isQAidt80/1srh/fAqQsgQwNE4awqqntYbfbulvigV+DkWicsMhlAExe7LkP0aHjSczoHowgtQw/6NL34nyfmtr10TvXDstDIdGMtgSY2/MP4XosVK4InJKrPx2JA6lN0f+0zeOHlNfqPTEPwbNNIg1UuQ6bO5uF+IdtqCNLQSa7zzyWdyT9OQEB9Lhv8LkRjhpnn8yiioBp9jwk7nixiNQHDDEfGvfNxWCopvfC6IoT9b6DsxD0u9sdzSpr5PV6WXldKLoQTOuBnvSTWkopyRypXFBMDGq3x01fv0eRV+NkIY9kdE1hMfvBZQEEcT734tPo9ouriRgQPabMw2yqyb67StoVPLiQSfPohLdBUiWSoJHSf5+ZY/+MiLlXe8kM4eOtpa8Mos+JZ20vehzaDB0R++aK76WxBx+3Lgf9YPP2INZ27q7bGSIOfQlebmC85WCKF+41n1bzMI3oUhwjI2uiitkBe5Nfbm/0v3WfL3P+hDakFv6PCkDcP9VduuLu39YNVufQNnmSClMrxnYMpMB1sjqRpL0hRgsswvtqO3PI/UgnetKJ5u/GBsWp/8IJF1OmjyogNnzI0RKJah3tCDID3zqHPqCeT5Uz2Y4VwX+AqHjwRAEeSOVamGDISYgbGlFqSSvXMwYcyyNFfazZ2UUSGU8cffkw7wNMH49OmjrhGO+v8NSLHYAaPsw2NLamUgqKAw6l3KWPjabra3oBzghMAsj88WOIJdtdMOvEP7a+O1GrHeIgpL3M0MdyB5WRUbnkkF/2LZGKeP/avHA25oVX9aar7vNQswY67LIojJFVq1K8UtUcNQdM8F4ArAOJYm6njxrqDldN6sUs2HEbaz+Xg3/bv+9LKnsqBVi5sWmlIO9hxA+Lf2AWrdMn5xiw5c3iOalVBemGehluxCjzEMyQi2tqhvHXFiTohQK+c5RnsVt/1FIcYxSuPU5YJFxUioF2WQKUdmqNo76TLefkNrDRxSO6Cz80fRzmsqK5o1Eryf/Lti47xvMp7kqE1dAm/lapiSMCH/xp8NBf6MZMC/z3SzM/ntzb1Cyu9YNs4hN1UC18xYq3+MkRWzJHf1GzkZx4dJq9GDb5ELrMDdfI1USa81WECZXlNockMxI0suHjRKlCIk03y4+A6xmy08Kyns2dXBxe76wQYzq5yzBdTUZhsbvdlP0diDKiil4v6aINx0O25SuoaSAaNDP0Q70NLMle01cXHYTDxJzHd8Hwa9gq5bZM/q1+8IQG1anyBRnUtO3r4U9yuh7cdemA5i1pg18FT7ai+uwPAN9/XpNrUcWKAGDDGAQT/kP6AtxEqJXd95m3Y4L6FIulvmABJmoGyu8frSIe3T1Yu2BRwcZdWAzrY4H6jMhP0vu8ljW5ykWh/LwC7keq2/AQTdC48V9JoqN4+xwZdkVEN+aBXYQvS4+etAsrxJgNQUwRhLpoTHNQtsrnq/wIacfUHd1jRbDexBcts0z6DMDpLCHWTqRPvNYHAhIvgWRE6D/aTUtLimV6Y2odvxckHz4+pUN5PE15qVUmP9l1BvVbffKGd0pUFe+U9p0bULSWbVYWeIEhlyFxpxd/ZT38aVPadK1/2yb0GKx/iPiUdlXHJwvTOe4lBKT/WQ9Yei4aAqnFyFmgoy/JiyxmIr/jXvcjVWVNpj8JSMXNnGxKL3pNe2/oqqt0BSlR7R3nr1+sy3Rdi/xl0dUlMajcJ5P33+77vCnpyT7RPUUo1o3GBQKDUeljbaLpE7PKCV02PLqzpZ9P6pk0KmTkHuBs6ulPGrmyFTefs9KGPtvgWMsE2eleQC9FuSK4C/ceja/GqFCvoCbb9WyoLBwugpQrlnqqpK48r1vQKhUop/tncMiAIfoImmHadVxJzP6HTz4O5UNR6LNVbjPyvnriWWQcbiXQ7vEgPbjEgth/pTu1G2Y1/f51oah+hlH7WMrTW4tSwMzBB2xvi1aYO1i8QMB+IrXGYDIDvm+ViaKrnN9DgKv0fK1Ln9YofRBY5SwiiCkk6AGLGgH/Bcw4Do9Qynd2l24QwNOrLmrTnsR0r33bd1R4msIrvtzomZOlzP0HzdTFhCp5GwwEwEEshQurKJf+xWtOox01Qy3bq4RwoIQIcrrom9VMSXI/OoQ80+serX3/vfKBgkz3WzIiktBS1zlSFpqUz//OKCFzylurK5s9fa14OFOJU3EC8Piffyb3KcB3rj7+PvMQgg5oIY4nYliYyupak7pQBa6qj6OUNnLEmyiJDOYvGzxN6wtWseVWgPLLFKQRItwrimWkY50UMqH3jqrXbnVh0LdECSGxJ1ei4eK2TSOBbK7Day6YNM6bWaQODvtqaN+j76qtT3UgmAmKucJNXbmDOO4i+sXCU48kVd5c7zyWocqz2cFFqoyNWAMFOmqZakdEwck53NgpdxS2KXq4pCdTyfrNmR3w+rDg3gJCbBQnIrfGq0FO9okuwEwDorq/RmDeVbCgp+w3oaLDI5kcbqjlf4AsLFX3RR3LQ5PFRX4MSHSa6JMUqTaHuVYm5hNLBeXfl+bp7Oe8GcIFS1xRCpPOka4NmUdbWx2uFCkzJoCyGxFg5vL5apWgtWFKs3NbpB3zSgBH0cqNykz9K6Bpn+0D23lbDtY2GBQlSTJYlgM6WRb5yeIsSrw9TqWP6t7/UJb/qYXKfbbfufEo/AGXM9G09IPAXz0FAldrG8+7zZCupLUjdp+mttClOrDl0I7PQ5Y0j4Yv3uYsGv/sXFAvXmczKUwQCH4qKmR0dPDi8V23BcrMGQiYmn0tNsDCLy8qw5fCAFI6BaQjTkWH/66j9Iv/r9C/6ZBvFVrlD3aofTLH4HZ3Qop3SS+uefl68E5mHmh53kbA/EvVUhh6ZB5vCh9IafDg+GYP9Xk9uy9e0YZqWWI0gqRF2iKcZcYOfR6sc8uAtKitZUrHt6N3m17SsM0Li+i0v1PM0dDhJzEjOw45KkEDeM3jIdoBEMtYjePcrghwp75GyWoPlhLDymdF8D7CZ+WBnoOrn9OAcyxy8C/TgNDq78Bc2CM5OLlxzVahOKZ4KnhRC760JQehk3fw+4dWZDF9zmyXvwhNj91lLYSlQTRi7R1LOVLU2ice5ESzvkd5TpvTrj4enOak0OrhJmUqvOFA9+QljSrcRfNSH7VH7n0+XggEM8QB0ZsI5lEkouG/zwMdUriZhTTFz46YmKeFCSQzCXy9MwWxXy4Qe+nVqQdxQ3xNIw/82aLSyeHrfr914j+6cZ7ks9P0A9PA1XqQIlAQUF/QOT4Kn1cLoybTx5lPETh6+yuB4EcsBE8wm6FKDDwf3wwxzfzkJRC3QFOOhIEvpt4M14JBh7gOO/fTO+zTcjUPadvc2PpU7bfYzCWoHVbim4jprfv/SHVZq5H5TTpefhzxOJKdFOGfvR4YBe3HvkzopY3hN0tdeoIRtxq26W2W3uWZUa8gLnQkcR/aL3TCqfy1uLJovEtT3F7ZQPgSk3JfnXZNh44Oc4yNi6VVbaWccvXEuoMgYkhxFVpriP/SYwMl1Tz6xuR7tRepc3sw2CNDM+mXt1cukH6UdYysOzJtLLDOaXBRzc0fZvm+um8ynoQbiGH6TghuMY5H3Z+7N+oHwV+mHQ12ps+L2k2hbxyM5s156nv4UkLcoSw2SXwVYwF0ifu39r67GY2Ts8Ry8a9wElh3R38b46wOhUgbRwpHliBb9JmRu/mfINhOw3CJGpPhGektqSy3NFgMptyu8gvR1j1iVv/JE99p11+H5OaE1Zs7w//457C6iNmGdQWbDARzGk6B13O/x4t96vUvE7eQwipWdjLyYsea1S/dCg6ZMszB41dik9kFipB9wIUrtzl4LcHDfoA7vVA5WPHkvZKCBXWAXiPr2xZMSRIS4E7tgK2/pOaXH5kw1//381m78AUwQvnrmeptVArVWYpg+Gs+6G49/8okxQoudxMqzoAPRPgk4GCAcLSrGBfhq57hXrRs9qDTzyaN4Bf5tAHio24mWwQkZb2l1XfE0ts1DJivRNeyi7LWgg3ujlfh00QPl++c+wxCoiPd+N0qf5/G1U2tVpYhTHI2AHJ70Pl1FqkwunvkVz9a8x0FAYmtlxL1RxUh7NwUKkjUaTI7LKGn6z6CHMbqd4hmqmfHkIcMGt5KgMSltaQpb0HQXKIrJtbenbwc4+ymwPPvt3eQMqfrrjZK9145Srwyq3DmyV1IYAnTbCkLOitjxL1ih2uV05dWX4GHgnbPFbQKRp27weKgw5Z8fh4pIxS2xUoN1QWTF1n82W3zhFKdZfHd0GQ59fsEYisDKVqVIW0qFiGl72GXki9irOTbCmdC5kRJLktnfRLsj8Ah933HGH+mY2w57FFlWUpAPnHGeTLBWljPcrCvkfFOEa4Uq2u8lYCWxOS/wTOuHNHmlSn3rBGKwN31SGzpuFemyRHG+G2ix997Xm+3O343lZMKuzC36W7AWuKHbJpn6k/zfhnQDamsgivLrWKCztC1e+IYbiyd0KA9OG/C+4suwNfYUCOatL9wcVuhp+7lBTL+Ju8cvGRj4UWiO9F2sIg4HHpRZKHbKm2+po1/SEfArVJVlUc4VKQueYXfLXlgBVB6KXmKo/ulgCqVQlvR4GQaVOLzdn/80gNU1s/HmNL5vIfVK2r61FpvX7e/nsQzJgqAN1v8DP4SPPpm/TRfWpXQ9Nh/NKfZeg4D2vk5oQ06LNpGxyOHzyP4G2GgYxPRpAEsEaZF2fpWEM97s7m+XsLFhYXraJ/XM71F7oJirgconT5nbeQXWfjgT/heeVmplcvKbVzhiz4GYqtq+6+a6s29jb3t/EtDdHPg8HHMoSMb8iKHs6S+ikGTaxREz1Eo0xRhu/ULH2mD+K4Ht0gRQy7Ws4iOrUy0vknkaxvdaxZYo1GVr3aPHnZhiroksF25ZvCMH5acl7lG7weOCapOpCtHvsqwq/fhhyo9REk40viddIallzaNoQAC547pc08euQGa7VZiuFcJNSaIa6Ukp+kIdnr5+7wTyNbcwE8C0xZrLe18HDdzkOvOWM4PNweZrH9VCjox86miXfnRsprEA3EQtZbsyOsiaWV2A3KOiUEBijn1jGie6P2o71aA2RlykgRnm6XoZtgSCH0yFjkEPqt828tyFc4YxUgx8H4DFCasCVb5BPaHutGD15ocePy9xtS8vShtGBJjPgbxb6LUp8UtpcrBIk3nbsQZe2jCVQWKZuXT0DIQDY9fYjfjkn3rqdfhXdGx0aCk8UBpES4uc1O0I9C4/e4DxhL4+UOaJ4J/UrMWfGo+t9/hAr0ni+ttJzVpza6+qPL51cP+k2GdGt/IWhaJLD2sdaCP215xHosyxl1S/nH2vm5Vrs9wt0Jafq4inT+8lXoIAW3iciQkGR5UAkxw0AbVHXkmWOm/FTCpZaDw8pMHBdGjAyas2FJlRQ/bL19jSlFnenU8e3gqlMnYj0lvIuPtKFHiZyxnmx+sj6B02DbcWBvVYJqfnkOLWZ5jC7a4QYYxs6bSpsmE2Prn4y9Kcig1IoTsuYPubtBzr63G487PU3nl9D+Hfa2oj1U/7VK9MTBSO+Cde77HFUbnKhcyuTHoXWh+6Acj9DIprbGRupShOpZ/qfrPaLQ/yN3fudJrkU7UqKirdI0k3Ji935qhTuzXB7FSOFj7p7cH44CWhgNRLoa12J1DvHKMdjm5L/ijNNoKJgYqELeOBjenS3dkONkCmtdqj4yYSHB9Iku2Mtb1WRn93AssJ4YX0mUt8zUXLqGlKmMqonhIEPO85prYUwINcBicZpaLlVvyA/dATq0zob8BW+QoateIeX/JeBj5ifaARwKsxJwmeAO3/jOClVD4mUNtZDMwqC0y1yt+0YY82iawXPlgHbf7OjUG6pNOLOF4CdDF+xCDKi8L2xI9CcEMsAhbllOBxiQAfsZSU9Pg+ts2r/H0OLZ0gP5lBJNhM99Tz1b46oMrBLZQqwdck6YgnNGSlEuFlipbLQjTXzRQvuc3FzWXdul1IqubLhruDFI4pmICg/PZtwjkom0OIGUP6uyoolBypZBJLcii9bkfONDjsbLBC2uRAgGvA2a4bSyl7I0fdSQRh4+MjM/jV6On4yZ9GO1tNG57gBL02hckZM/alEQBRzhxkiX6qQ4WJWJcturRr4+dgibYmnIPqJhF/npaxIcPelDrDLxcHquSETBZJlOdnp1zLuAOq6qI8+Up+a0OjzQvKBf8i0HI1S8sFCKqRSqOZX1oOfogpF812KHzZ83iRRaZpTtAMeczeuYmAjKm15CtqA5ZXWMbZn7xAgu9QASe/DmYCJsFKIShG7UPCf1GL1Sin6E/RG3+Y8v3LsGhs3gUZyVLrUuFQgcdwzfzJCQW9Te8qY6NINlIgO43IubtifUytfDJZw9xLInzk5HgeIvQQba28nBFQR6Ce9rUpsOLd30HeikQ8YpIoQHhTz74LC714/uCy1wlHqH+ft40DBg3i9YdlidIN2cICVf7pPX7bcCC+F3iRa3JuJHuE4X5N9fEHMo4a8pHwkxEmDMuNWxIjlTtyRhxhaajFf8V6J7KoE8kxDNn7R611i4tYH/HTAJ1awfKH99WnQHN5NjEm/55L6vgAaBgI1ha9rsKz3qUTrgNwdQFBlRzQZ8fAPyzGOmy3Bf/SA2ToWaHaldyRCeAHmPs+1EwMZTvadVW0K0Kobp/7lUBFAjafPGXmdogjEM/XWEfGznvYDHonUa58JwgdvJpLMFNQsh2OTZ+cIBoRtTdKHvZDDpSQoq4Xwr2yBBrqvzgYIcge0+4LXCmkBNqHFDXZoQMIry6XDMMlvdZq6onI7CncoccJxmG2bGVnBNa0GLDMB0TdO6LNmrm7jPVGkdjLIfySBIpdfQxg7CNimyNCGmlHuqyJO3BkneQc7J3KiXY8mj6ET9AdAio68UA2a9DAz/EImEcBNZdBGJZ1LHkcNUZO/ev18qe4hw037Ed8exvbHk7idkSMoXupwx+8rqCdmYrLDVTf6aENfouEPMu2xMGL8eYDd8u1XJt0fvfVKbR/MboIkSsVAQ5mu8r41EUAWADQKOtCL8acTdu5W9GLy1JZ9xqJOgFVZnoDW4PEgxeuKJDHDHuPyMMjaPurdKZBmrJhN6kLpRM/PdVPrqQN2QIPinOsqskYuYa3TTQir+RxIMN85eAra5tyVCo/qZrEQZHdRDGPqO/MMHz7WI64+2yGDe+4e58lgvfvRYla+O0DUIs8UBI0EyvNZc4afBsma17n+cNyVdqYY03FZDn7Rq+B+Sr/x+0XUqgDv1rMkP/ssjOSjVq0yEY//5+8nN6yb0rBKVYGkbTxJowSEpa3zeN2X3LP1bYfQP/czkqgKgNACpFoIKv8u1DB1vpiyhAqTlS2Etij88g9av9rOBFehgZKMbKFm4GKmoWCUjCRobhA0rFKVeKj+xYfbXyRnf5acMwIqdB/tnzj0qfaWdFqShKOgVV+CayJKzVeb53UFU2mP02XGSpc6bxM7WfZ2PAmuQKCjVc/b4tmX6ISun3lZcUithRWK1Lyi/CPSjqFBUGed5wBKzp8mDFJEVhNrcQa0lPZUTs9D8irfpLwtLnZxV8hOltrcJzeAc40Bk72IuDUomfj10RptgSDJIjgs6wCPGf8KYzvB78AO/BwfehXxJjMVm1uHaDa+NnR4mlhBOed3s02Kxk04N0GZ4eYVZG159jt6QeF+Rm6J9PDbIxCKDrWXtQVdn1LvvrSJOvgzXg12I27GVjAAIn/qA8qX5v4coxlEBrHqOkNoogwNOYEazlmmi/zjJZkyqr1eMuPi6RMQdRh/vS9OniGJ9mOrYhT0pgeCVymKvr+pi7NHZgJ+nTsCf09KY+eUyTpNXXDaYFFdTqvNmo+Y2areakKJaQXpixHP7gS0SZmP8AxS3SqSpSb9Cu+Oz4Wj/P1jtAEAbPYJlrQ7qYQyucWINYrH6UEJ3Ui/ocnOLuPI0bbnu6i+IZsu1etB2jzY7rxblr/ackcHZyQbqd7lqGW7DElAuUEDKHWg7tlZs0TOzhTzhmfb/VpCFKTwFcgCWXlyIicLLgqfOErkKP9Fsq2JOl+pi5rlaRML3KYgHLc5X2/PZa1krj8HJtqTOR5jcoxB0mEtz+UFFufQnkJ13WS9NMzzT9sQs2aMu0MUW/C2jL/fzTrPO28WeF/mmTV91qo9+dK/++YdP1YqaaUTE7HIzqTNo05V8PYvzgCYrSPAMUV4ZpgsXBlW0Gl7H9p/KuIr/J9Sngbi9aLOF4ECfN9MsRdnUs3j9VbFdww9J3C4b8YnlBoUdoi8GgvQV+LUwX29g7GLevdPx4rhrRrGn0yTN66buKWi1Un0xPSxSsBQXnF9wrto8L9plx3Z3JHiC+WFJ3m7yk43BSLFbhK15n2t2eHAxTHr4+84mWx4T2HWf6mhC+2KiFnOz8WKV1AlGR7cg/f1Y/xLOAmci10c4yxyyz4MhVlQoQvOXU3mR3lnk5wpcd2taCGyDZo5fPp+GuFOEeFrtn1NZr1+h+jJqrXtORNxZGKJFWt1kqmi0lsEWDo0H9gklGMkDnyK1XSVei08/5HfOkGWCEBpKuMbLnzPIgIVdqUYAVgPTquZrXhc5XtrUrfnJNdixLxNokOcfTn6vDuRmy3E1oyi6+gBp1GRuLCCT6PF/20MAOlpt+hOIL52qBdX58iEF3VZQvhwd2+02lMo4u2mqXyRTwXBjuob/w2mpeUrA9SuyuvPcdvj/ks6MurWXOuVER0yN183UQZ3OM7rmPGMj0F/yADZu/0nsAxpA7E4edtHzA5Nno+P8mjOrgD70mKvbfGx84sivmjQhIilXLZB5d3TBx7Lo8sQl+VWQBK9hAyVX7+m69LxN4Q2hoBgMM5OjyN0c4/W2hjqyR7fp/a4Bc04XNVyftSe5Uyxlbidq4b5OuAAOBseuQBZ9TmSpKRm5vPlY1asTgDT0+auaXbJNaA/F45+D1ngEJGsMcKwm10cxwpvBEDsuNUgLWCwMCJVHRr5m+v0JzQj86XtgVU2lWyGK2cVdTo44JNFP7iGUzTkBYZ+f9qAGuR+F8T6ZCqEknvmSxh8I0UJqErX2zF+zecqtP71LEXr3ap8Zbl3aRM43UwLFyy++KLqXZyzPIt7CHFz0MCs7kOu4U9vqG5u5m8NzLWaXcPpJ7d1cGsZSKjFXHXiRJkID0eYT9Y0lAXpD4K2aHjT1jAihdjAA/Pt8tivcR5+ojTLqGFmqzEvY1Kz1GP94I3q7OwRoFxN8PYS+C9enbWhKqQi+KVMjwr5MxKVYkXi9h9/+t+XrY7duU4wqjs4DtQP2Es/4U/6sQaqfpAaw9i5X8aMQP85850WoZihouU3agg8ILYYSMHFkvo2QlH9l4PcoWUZdpO6f69oNOREjWrNdLn233f8Z9Tw98LQeWWozkJidtxm2Lwj5YALKOlLo54wnms2WrNdhbWW3gEa5EP+/YlYrZyC/cmRRbiYZBlAZZ/C3arZvWXtwm7lvJSIzxC+yoEKEKF/6kGy6Z7RXUUllkuWvxXo7scJZ78lFPfaW2gXlR4Tvj3THnTCXHdgcMhYi+2P63L8yD/Rhn9DpJYz9QhCjbe9H7gmUBh0ONSc8I6ygcntNcbg4sWDZO4PtmhJ7UoZ1xbqdsJxybGGNR2P5onPElFb0IR6ZRar+BXthUwj4ZLMwZZCzzEJoqSFGbNS1SRkXygUXMThG2ePX+mOVxxegRXrIFDyGL6vF5PidPgeIBgifhsIVqK2EWEFwg42OGKc9LwhF8oIICYPNS8cBx/VTQ6E+yFxTBN4uI9PUTNyXfnLnQ31uHpdDlt5ETTm5lIBjErZ+uqKeFRNmK/0eJQwI1MQfHFfpfBWji/EdYx+j+1aQxp1mNaQkE+nJmSXU1+qtRs9O/fDkwU1WkNXYNUoWSR2JKgF4vuF6cNvM1xn5/cUv5jIe6uEOrDLXxIrf25m+4C4f/NJ/HJ0J6PhQ5DKEvXZCaEGUWvyziJtDh397ExUyKyRRO0S1Wd10CVc0JKj/dnXfcu4/6MlWXXozQIjS6TBSS5JHlJ+wkLoCxRynFkm+0WCikpORjOeIwnlmb2JhKLlxtMzY2g93w2QqykbV8a3W3oNGYemIl3qjeRQNh9b2GXNI0HESnCksugX+UEeOUHiqSmF/eGRrvVGxjblLotE+AdR2pwUQn1E/91ykZ+T3939mSpUNfJndJ0TCQbbqXZ0N5Xg6x5dFtdo4hBowJx5FO3Q0+iP9+dnftOK2SNK5zpxR9LtAem8CxC9K3+BaDNrW5QEC8Kjl+oWn04410xsLdcKcQ91vED8uV9OdSTm0eN4niDRD+wRAPNu+NGsuLCT0U5XFvnl0ooe2Wm1zFv7MK51Tc1rRSHzO5IfYxAqYNU7xIn1iccuNNjFPHATiA4DzH/bzfkarLzPfpPuTzcATgPZ0U5xnfPSmm7Rb6wi1lGTqBfWp11tMWLG4xc9hpgHxB+ecHuaNZfVg1pvjI3sf65BfN+7T70XEaXNt/0ujibH0Z8MEVNduKiPx7J5NpdnSo2iS56aUKJtgXpesgxQP0L5gN8LNb7NrEoDtfGE/LB6TCbCf5Mptaaa+c2YdU1J7k7LEOZWUNYQXf7lNHN2WPMNzrPRpjaqqJaEUaUfWMxu7ckzrqIuzUt3Po+MGXzWf7AYFze04m0jzwTxw0eJA4jdqox3C86UNwG+w8mBHM+I7daDu+LdeKOaQruTRGS5KqB+4bmKqsEnqqq1j0zWvyKQjKgRVK90Jk6ogaRs9s2ZQiZaPy066/AHaTevRdGig/Tr7dPZuF99N+lfDBVmKbp5KEaZYHRzaOcy2QPHXzEJVUtKyud2jPuZna6zJ9Sig1UdGme34RU8X9dWKywgyZlBWRn070BldAyt7sTXWFKS3j3V7JZWjzefK4Ei0xyDla3oPrsyY3QS7c5hlgX0fal3AKyz0LSr87t8dmjJT6NaSdhKxX4OMDyNN+Zg1ZtrEywZe/fko8jhSJTZnyDozSoz42O+JJinejVyx82sRb+LEi+w2T5hGkyWmQAfKFdksslwhymDaUTUBVyt7JTs4IxpMKe+h5qcuo1Yq2Tx2qqkrJ6K29wN3EeS9THgnBXbBbjmYRCeCeWFJnwS2FQb+kQjH9v8drLYZjBAQEe5TlORml17NLIYMEaEArymo/tNM5NcQCntStAapnz7muW8JNxKzPLRE27XUVwsw47i9WM7AK4QGeZ2+2Tug00WFdNM/dP88HeWHm2bKcCGaXYMjNuRHeMDEIRB9KMTdX6N+J/TD9k6zn76KhbgO3PAtYp8mbM7whWhlolYknLj/O+nwdubc/484zu/HUOUPGGw1LciHnhoA79rvb9E72aeAXZ/5BBqnKnY8JAwTxAD51CQUsvM0F4ofSdpoznEq28j8Ci74nQ9m34ct2B8Y/E15JLtMx5e2W1iUvD5QLGHJrF3mfkOQabUs8hERvWppt87/C02ukfc5T0CRZCyqXJ/mAH8ZXqTAijF5cFXw9IWz5IQoWgzML4kAchioQ13WWC2kvKeQq+ps55+TKWzLrlwI6x6awkAEuickNPEm9VCb3JlqPOTCoJpR6Qh6GX1w38RRZm8J4EOiMTHmTYDRYUhR8VXL35GeFGF5ZKY1EYcd/+5BjI2BcgznHdzsouwlHCKR06d/OrkVgtlfthtLLjMtdIoO7ZAnSU/lr9zpfb89L28CJjJj6ewLPwm8edvhLY12IH8pcx7SP33zs9uIQ773lF6PEcySxRnDWPQNIFXsmy+NyrZ1yagXTX18fAyvSmzKKHzJF8RaQ1VgkMgFlslIDyJWoG0f8HzUtm/ExB+xFaISx1d7ybGxBYInPwTWK8c+R6cdpemAUGokRwIKlfv29M/bzYF8XsR4xY1/QV+q0mXPM0hB5TcDjSO9K9M8P3Z6EiGy2uFA8gb/yPN+DSpR/aCQbVkcV19L8DHvDGXc/UHpZH/l+8evmbQB4BTOWn0Q8tEP6Yo6zqCi06AxREIPF4suSEQ4EWDKWbST6mIlB2kIpYQ83G2lZka0f0APyhRQkZZd4N6oakO64IAJpwQ2nk9DyCnz3XiN7tDYMPo+A0v3IKFFq/DyQlpF0dHrwvn+hd85vXarlyLdz/z2YaEATv9yuC7V/sjqZWYKYQTnplj13Rby928iqDnOQ2ZNfmAqf3J14Y/TN9Ih2SS8h5XtxVAtmzM5E+xvFrDltfLSEomzcxq4XP67mRTbRNU3SRqi+lM1DEjZHSzfscMYM0sG+QwjP64NN5a8boquIsmwCesiF6gPxm+IeuimBl6b581ayBaHsI3kdCLdiwYfzLlBi1EZhzKEEFjBZF6ZkBzA3MzYlWK+qTXOCyksBeQbe6D8L71pu9+E9uo42vctV9hKUFFCNN+8Ehd6BSEvX8/+APw1rZ+QQkiScNTzy3iTB+LcatH0MDRTK4Aer8QAJLamf2VTqQqY2qp4V9boKzEPjOuTegui66XDpndMfNhyZBalRb42XBWIq4rvyQdAACkG2C9yixBW1vweRabGvp2YYhBAk75GP4luXJqnuqKkYhcqOP9F7kDKPLitVvAgO5VdV3ibmMB9xKWHdmJQM0bGwOxxZ3nr4KMaaljSLvlvo1Nf8nvLqIc1izEzKDY1WZujKxnrOqqmesOq250UHnd2u13hBD/Hph1RrDY3gCsIkmED0hnioLQ3eNfBm0HgVfP1aYRnZvcecptWhdXwgZohGNi0UJFHIT5mVZbBrAN6CrNZvoPNV/R7ne0pgXVN3jcqJuqbOG7nFwPEKXKmQh8u+rZ3fWvdOt0YOzVh1zzmO/3JJOJmbewYd/R55YgW5MVy+X22p6Xab9bKOsgXablfOFcDTqO68eYaR7eVOzgabQf2jEqU5QW+ihLf7e7/yevYEq4ZAqU7jT2PutlETnhIHdwYDu6NeW/EqZm1+iLrEqH8NZyTCB9GF36ArzUQhZDI9Yh+yBK8m+0dLEjtD8eDrvEUign5yWODe+T+zzGdo60WK8WT9T6f+cpgg2D/1SLMwvvk1OEsYcks9ZgtV5aPbHaYoHcRieNzL2UB8GtUBjru19ja8BD83Uc+fPNpTqn8yAYk/6AMpwhXJj9tEQ2RA4RCDOO5yp/eq1kcrdeB92NUrmWj9aSjuz+I8wWPr+TGmri4WACqmlZHhuQrL7GCDn05f2zI8xXhfnxkDNrQRbiye5pFotLhdldk2Yvas3rkZUGHd3IkR6odIZeBtRhkX2usoXcVTzNzEw9btSR0m9zavvga4Uf7mhmWY7d6nAcjBH4C62mMGF4fDGh32wVKTB0idS1K4ietp6boVCR1Q633WUlZjbZPq9Y8OM4aH1bA6YZKzVqd7lsy9WX+is63PeZEyxD77eqtQ8YIUeC5xsLUyp1UdZIn9kl+H0qApguP46EFhmwqwAtfOCbgBLzl2KaYUfeqs8Pum4BpJVOy9RnG6N/e1ovPqX4nH8Oh5VIKNPs/oSGzzqSqdT1Rgc8vbczRcvzSSEIxLTJeZjuke99WABnV8D+9lJ6Vk54n71wuWOO97xW7xPsUqMTZcELckCdbS1rvKF/w03Ay7qy6aQ1uXjHIpuDSjMEzWiKHAgX570vMZTkQSpWc+RV7yqhYtDi9z/dnOffEyXseRS5zQKPeXITDRF7FAF2CLRfLpEiSS3VkR7gxze7udRHtKszBo4821ESD7MvfnN664oLdinP7v1OGSzYz8kUAwYOUqWriD2hamenH+DxBOy+lrEpmBXR1CkifJUNk2lZnQ1pDIKqMQT5kTM+oy9hfjkeZ191svGkHAdkmokD5bbh+OJ0M5Ma5Jc5Z5fu6PKzYqQYEPHKmymfBqSDrMvIW2t62j1AH4kn/8fl6url+9v7V6yCWawAGgursACy+KsgaFlVGfaooMMsUDVdmiWgoiuB5toWXax3AaUy2YYehCXcW7XJHmd2WpPoNx+M3WNw9nto28rNiW3O4Tinpf7NpT1Ax9oKAdE8DJxr4DDcVnkrjdwF3BvbLrWK7bLfkpIzZse7OwLDy3YSHsbI6JhUDjNbEiv6gnm1bzIRQ11KwP/diz28KAdkUaQOrE7BnBrjbqT6dP9+lIoc+JCASiOixfpdx5+s3ZZjj/n/d4hTbW+kVEhBK7Oc5qendUcXmPCO+DxQem1ZlK7OneQTUXjRmTSA5prFfqNn75YP86F4Oze95uYPF1XsYoaoz+nrj40lDdfawmw9doFNyJRVn4gUrAj69+j2Ju4skubAh6Lxn1R0aq7+N40CynvwzsXJx8aXZoThvDzXSaJ16g9hrUCVi9MP3syMaRkz5tPjGjncp+LMJbT0rl1/9U8xGrS01A9ZSgNNpRlKv/jn0JdPB7tmwni9fSwfScHLWicqSU3CT69lMc3EbGd3NXH5wbjGQjhZuAb2r20JI8zSiyheGf5SN4RDueCYw/yimLxjSohbaSf3g5sWAQJSjxs25H6jXIy2Byy3N0bUgl51UGbKbkHJP09bVA3yp3knDj3ZDW8+ZIji1qvh/mv/Qtb/HnThAamd6IfdDYXF7nSvWgsfJk2A07zZPyfPZJAHxQisdJxeU9ePT6JVstDNxwUqdzh2aQF4Hx8Pw6acneTULTWRJ1lxRV3/r2S/PyqJDOd/HexxpSrnt56xfC1BYSvvQQR5hwCrcZQa82kXjAHfH3tTxm5alkJOThFstqxiRiFmSUSi2cbzjbxDcSllPUI/odfj7DBmldIBr2SosxQCQi7yITzsGa5PLl+nBfPPMJ8G0AGcPXIHV2nyRgOZdyov2bb5swYLR3ytmyFPUPQ8ul2dIQ7cfuEdCAORN5RMQUgGEw3mbkVHUAqDc26XhoN7wGYsBScnYpRHzAGxpV26koEy9edz/3cxYaMIxvh3Ljo0yci4sWWk69QXeBPaf1v4qjqjbozFzTZFmAtRVhWPIuQQI0wKLTEonqxHCPTS0KduTDiW0IIt91RyJyDXDalI2g5KnrjStSknBD3tEuS+KrJTqe8vWy0m2vo67P9Mc2pm+Dw1U2xAGIJcGczg+dFcq6p7ql3JhGTVKPWK3aG1IMEXmvJUUlfEMNxlveDS9uRtB4xFLU2hufCYdUNY8MC0G3nZwB3ThJ158MVu4D1XdHemNyBAkW1cDUjvsWxgzn/qhrdx+l6tUsNskVGt2ZOnCbsWD3Biwr83SlCxwTL4MOORty9FG/FxtS7t9t+mzyHR4QQ4KG8ffQfkfmx3H9dDsqyEYsybMQFdFla177GUd3dnji6lxjsV/+xB/jm6UhtrNcNnBnOOPE5U+s/WQbe7sUY30N85IhH7eWLV7Hl1pluWFZiRAHvQG7M5YT+B02Pz/1xcAQl2QbmWLbShN59FR7KZYQi3iqqLgT9ngbzC0vrGz1tZ39c5Y9RJiUEbgP5ZNqtxFUhKRue1ZYBrV6dOBjLBzr8cmNDMQjORFvfPIVkaYARaDzDCt6D+y8+3F+YKzH/xb2IuWcDLLZfccAm3LYnDGytk/4m1FiuyvPU6sV22435yci2UIhrlWDsKFny1AVtXpP3ZrBwR9sVgdMtogt5MoaXe+FMWv8FnyosUF+YFFdFztLvRV1SeiUrvsx8oFFzgQZdImNu6ISgR8CRHmJE18xcBbCx9x/4CSAd3/9AjXjXB6e3DqZtVuFHcTaR6mU/fLk4XCue4tYIFraPLtb/WbTnLhurmYGuM8IKyMhDIZf2ya9MzVeFei81wHnEOe52s974/y5GUm84stvvuWSAToxzVFvzeiZv2Ms+FoZtSOq584sOm0S12KX25NFnbuj0Jn47vm5z3ka5kZ8HXhGGhPLmgYSyaMgbfgaQsN0sAooj+B510YzBxpZ48+hdBSgzyQrVVrq3SAj/nMXd3evIRDd8hPSBcvQ0NJmlJvUdMQyu7dYQMGtxXO1RwHdE2ra1cIVMWaA1v42F/rM2YRomFhfoiEuKEBJpHwhBn9QAs1rBg59hbBXqllrODeoX1MHJaBNbuTJXUsC0PZ/Ihtgi2synZHrs/ijecCP5LcO9Iw/SHQknHar2JYrmyubp9j1BuAhAd45p4ypdmmjMUqphbgpiSROf4ZGR3kQ+ZMfLAl9pIJWwyBxTVScZEgEK4jR6CgnDk+rW6HFt5DS8lx3Cb2LurLM23pO9ykYwY8Z7DYGdLEtnln030WKCcDBLHQfqEke9nYKzVemm4ZDXOkKv5THtpOOQrSp2l6Kbmf/Tiz9uA4TKjYkglhrvg5FiMra8HQ/P2XglierTnfcT0/5ufZT2MSaOpGc34o9oy9EjRdxyAg/NU0f5xtavDdd7BIr7StAJRPoybioGsM6pahKmBE3Y/7ovhJ4eEsmR/1LKccCBBneAEthw/wm+COviUImNNacZ3IaxLPU9RdRhlymq/j3qjqCbdLSr5oTtSUyT/4rBEGdpT8pB6LGN4qnv48Rf/VQh/rpMnyiW8fKIWwcvrHPuq7mLUhpbmuz/JohfujOPWrTzOcq36n/6TdnxFe4kLdraZiFqsCyUD7IgXFkpEAFrwsmH/UQ2prSWgf4Cqo6Ro/8z3cRzkZngFNfsqsxRL4v40DkEp8fj6q+E6WbuzOrVZeNJsnNhM0d0tnpHOHU24364AVSeM2aPU02MUF2+oNpZfxgUmn/jyug1qoaLS+vDucmDPyyjOlWdEVYyJlmRYEzl0xrP/cVg5SKPnca6jyftrTLUzsRvLPBvUNyjIE2aawWMdADg08QF5fKJBjEKoq3nalHDfD0GlmpmytS0ltwo+KJ/KvRoJsxhcDtcBU8r01IhiYYjq1buoSKMC7v59eXDXiWHChcTCdohDdzTSrlcjfaOeKhpwiaGL6S5YFgK1ShfRuvqBlyhjNO7RNFoHFb4lpvjfeZqakU9N7FLKkDXMsCnDhAwe8gG4FPFxMMOMYPY4d4re9mqjVnJ6OweEfqeAhYeoVxngn/YaWOem+cx7nD4sLeLr4wWVSSckgyZtXqBeskjUNQPnYChzlamq1IYKx4xOjojBiAAg/Jhwa1Y/7YliNv8eDGANdyBxpmJONTlamSI9VhdJWJxsKnwGb4Jq9k+XyYI28ZZ5zukBLhvXBmds5UNGBf8oGjv1Z3CPQknXhOjZ0fVAryo45OnWyCnztgnKfDPwu/rASW8IBg0KaPtGkehMcM/mjsJ836mj1JOOChDh/CVJA5HvyTcofXi6rVer6K1s7cV/pyoxxu1klwm4QAJJmgYXuGZm8Uw5gLrVQLNeSPBIK5XmOu9Up+h0iuMd9C7V/wId9WHqosh3rxSEmmhuEpO6kwFXPnWiTt05RZ7pDSJd26LJL078fbdtAKklhWrg2Xo42870d5VBjPsQ+0NsUSAnYyUEmKLqkhVead69kr6hyyXNFG8LBsT8rVeyqJjOvpKhowUa442bnKmxhAMTnc6JHszL49v9vVa5LkPRV0+1CT0l8Om4398tE6d9NdVL5znB9JAykk9b/9L5vCtwD/47d0/EBp5RjUV+2Ih/LS2lwaG0zfpd3tkLK/GgsPi8UT+8ck1y6jDeJ0sL7irWKcrMwp+lPDKZh1y2QwPwbYh8kRMgkaU1KkSYAVqz0PWnYBOjgloV9CarWeSH5CNQHWwayFy0Aca4uZ7iBmbflmyS5hERFHjjSh/uilYjROspG4M7fem20Q3S+QaapnVy//0E7pjnrpS+aeMAwno4F/p/UM03AFlKapNNJ1TT9du0GDWZt72b5POQ8sHm4m0zcH/oy0nl0pk2GFjc8iDlvpBAL0A+oiMav7JU/9eqQYlhLsfMUoIIvOnU2vvJVZrn/0HwcyhliDJwegKfSa5t3ZyhdyLRn4WtHGsAgBWcMTuwRgMAf163xK+yzhyB6aI3ygYjFeCig59qMi8QLmltSApCpdr9Vk1W2AoCQgBWe8TOyFeH9+xq5n087CyPSD97ookii55ukKSphZHWPa9e8yNA6pxTJixP3w6A7ARhYxvdKqcNUs3VVnAs2nx+HKtM8w8iMngMOFNX2BVWKhd29p3tFDhkmRhZZfTQFJdCFTPhtQNj86ffxqhZ08yNhEg7mkxDTmpAywYMgshj/+g/qwlK9GemqyMHz81TVSa6f7zGezy1NtdDDeSJO2k0ApWxBNEYwSKAf8X0dFzVve35UZ3M6KwRAqk48Z3G2GdI66C5hdrrxB6LzY6NPXuMS2UcMcOv8w84dr/SFTu9bR21rq8m05On6jVrMPxZn8zcQ/rRi+YRib1uf6FL4GumbI/WR1ot3kpAzl8AEHeCkpnC3yOxsUhszIvd1IqLcZBW/Wqgy0/6FMrqo2OqrB5QCI5MrIeLGI4mPVjOF2JOAdCnLIGlTScJVdFsq1MZZ2mx0xIIe7meawxHyJ7dl/1rj5FBJvOs8h4ACgaKHmlibxG2+DJ8aisk7valBEqS4cemiePHe1MPC+u8feQGRBB9eAUDQvqe3dl58LlFzBtaaHEwwqjjxVUamcC2mHdZxFWEUsh1GMZvFp286G1fQHyAFf2Sfep8s7lDZqAUQirzoUPRY9i8EVRG1rTPjc4K9j7VDXfhtCc1xt/yY0SHNgt3pkHAgg2VMnqj5Mgqt2/q/fwmPrXpb5umTD23TaaPGewUrF5IWVvNQXXdnHc7u0jwXv8+cnpTE+8RX46W3uolImHT0tHPh88kgJlQCczDMdX2KsE0V7HcN9OHwH+vQeFoeNPQgnKC5CPakasnu6nnrwdxQfyn2Z+51/wl8Fl5exkejd6rJ4kk4uX6pgbjQH0nL1gBlShv/DAJwMq2LeqJiEJI1fIFPBcG0BQZVamL8t9Q69ieUKfJjlu7JHwHLuuY/PCMCHQQU3e7X2IXkCPaEpxC7T0oLB/Liiwk2N3GpoIqzN70J2c2Kee82gDkDaJiWtzfT6L8MxgnrC+iRPAmAGR07KZx2hBd14aWSSop8BHyp46DVcAjm4m0sb5Op2sKQf/sqBXDB7787Ri4o7DJADAKlD43R9kCXKj27y4PrNY1+MCofCYSHWaRPU8SpeU/f9PmnzmSE6U5M+KkzKcQCDFRVOCUvXHNFZCHubM5IkYN8Dg1/A4ElWT9sq9iQG5q0/gH2E8n7F8v5vIXAGQJdv2u7RW7K02VbMQ1EgS6jzSDxpMObCazQPZ0Y2MbSY5GvNtnrzM5sIQtSIBcnMWa39V4HVVSqjt02dg+JxRmVNGA/n34li1A/jFhrgWwNau6B2qUYjfJRTz9wa9Hz9W01xXChXRPcaSnZ9z0MB2Yy069/Ui4i6muOaP0p9x2K+oAEe7aGJDnc8Y9peZhOwm3K+H5s+kbWD1Rz5tlHvSl7L/iGQRmpRQcdpG4MOx4YUUlqcnFs7y2QF4LQfSSlcBkxQf2XAX4sR+z1gtp4HvbEtpgoep8TUsOnP1xIswq4H/7RDsZNXkM7XNTvwfwXlpC9j/QsptVER/yiTshj3QSt32ztO4Bf0QxLoi+RhaNdiAi/SoTCNxqu+p7aBz26Wl8bNpkpvV5JJMP2/KL+u1KHs1CNxY5VbJ1MSopGwFIapuP/3NI34VjKdkQ1QPspvqZGg/uVV1sViJn7hUOzXKBmwqhHdGlioFvaa35m1i9+RGroATlGOBkxcwkiPEROaTxYQba2xUW3Irl5PUKbJYDCUY9s27SYysoB0LgXVHtOY2qArgvWLXvB2GffP2PPFVr+wzOWZLGoBni18OVpFXVfPkL9YR2dEK3b9bG/PJwS/df2wwlrbe2WV0eQfwRRvzkbklDR3gfyPAN9x6D6FO87gpY8S+O4yEMh2cQuLwtO+pNfU5A09oCYFJfGa7iPgcQ34RZdELBZvYfIUxmHJbTGvGdl8y57SK4ERcissrHJsV3fwxIaW8b+Fx6ETdlU+vPflgeVi0jawIkKKrho1F67pIqAKROJarJwMtkKXNXLuLinZqOZe3dgn/pn0YX0pmv1rpntVps3ZFTm3mB/iICJcEjlxD/pqrMEYunzVZV9NwbMTxH/tg00E3pkvbNwXs48M+zP3sZ8oTQpdHiDY+zAThcZ61YpHsTNOPU+k1f2Jd1xa5/bY3uSu3Z3+zKBog8Yp0AbuhDOw10iHZlxjgiAQFeA58y7XpJ6RjWhhCvG2R6OP8XS/hT8fM97TSx/o/5eRY0Tvofov/9C2t9yj8MVfD8InSKPeoF+T37lLGul8LkVs2pMTALkRYqRmU81F00yyuARjm+gGugt9OatMNARAsweQlWA2Ze6Ue+chDi7rXtSvs18dF2+cyOYxtbVKHsZEUwWhCm8HfTJZmCfYlt9JsAN0bzbaJLvtHurwddg9j4DOMyxPhX26pd+aGs04sX+9il54Vdf5q75/FfktFXdDht0I4p1IHhgu980u0FxrhNZY3PbQfKTEGOClxUhbanMeBDd7CKgIqZVmGztsMp+C0IZUvJQKwiF/s8C9RAJm2iaypVBlKluj2opj6UmHh950OETzXFnkUKSc41qX1jLN+5wbv8pNTCJeLtltdUDlKota7rCxlz3Ml8dGYT+tWBsNSykOXet2MIwm6/z8N18cF51idD6ffmDyCT/hy4vPs/AfComec6e7Gxe2lULc/FhmtHyxLqNL3WYn69c4NC5xPH8W4q07qTU5thPJDi1vBnQuKegCCTqhULTmRwO6Oxcx9Ok92lPsdvD3rVxf53eQcieBbo3qsA+dLc65tooDdMMlWju2VToNl1jv36Th7vGLbsJcWWUYKuUV5rUKIcKxq83yxTQiYgsi8OiNdzwo30+86RCXC46KDvpWmE2w3fIqMV8szVg0e34t4grOmeBb7L3YsHlSBjUj22jY0E4UqrKT2ozji3SK+mA2Iwi3Fh1LXdHHZY4+/uhyUScnTkPDQMav5yuVfxOl02kiVB/teYgKi/2wKBc54Cgb54Er4rSzByg296adKG69vLwrmy/Z8Ev6kPgq+XQFBZzudVWhOE8yfYxHidudGEOAs11y31u6sOUK4Xn+YkEdDHasoi5Zh5AYNtebzMHv8eZAjUar6wSzaa416TBzs6sDaWLTqFHOI8PE6GvsJxeQk1p9MSEI0iEqHQq6TYkF/2QE/Z8LYuww+/2xinypFqvVjMU7jFsAHZI7QKO/cY09GG5mRIDE79QybmDptUuVXh4CYDVPNNp6223EEi3CmKtGM8YFlLeNcT4OYYrn6ZGnCjiHdiXAWonBson59a7Fo8fX9BLAu51VU9/QMZD3C0ZmuemJNB1Uf4s6NLvrM47TRx3XacLp1Ch8paWc9OwNcz4x2I+aBefoVWy8E4uhGGn1FaTyvGsnUMyS3196ZFhrQsKtgVuMlvloofm1CVjSP6nf+qo/TUAqQ2RMcSXpzIAf27NtC6njyJERFTI8F8d1+j1NRhsEM7s5Ni0wv6EZIYghY6ucv2l0uTd2FnKAfxypafJ1xt1aVH07wIgyYxf7PSNfoz4oVjrLzkDVZ9Bez02lCgdqi/jO15uPaPz2pd7tE81yQVo86GA54TgQDN9MKZbbYNSx/IvlZO79lUt9Whi1WiAtW0DbvtcOf244sVSCtxAUCuY/fr59MM0uGZSTW/7cPJw9WIhEaegOhWwXIc84GNrLPwCcZ4WBJApxtV9iwLfSKvpDZILqMZ5DPmzxB8uC43GlsE1Bg1bKlat5+Lje8UGub6/XsCbicXGLfY+zQJ1NWfjH/R1SYdDKUjRzbPfDDpsUrq+og6ABDEVGr3DsE4sVHgLwAYZETQltKwiGhlitO5rw3+LTisx/hq3Hu78yT4jLT3WsPiffwucWL/Tish8WUgFYmfJw5O1uRxi8VfV0ExZV3fS38uAN59dz3X4LOIpl79LQZELn7leamf/x01K3su8QoeYsE2l/m9rNMW/yGV4BPCbLxHgb5bm/E4OBFXkhfeNZX9bI3R4v8g4rdO24zNcnerTATNnW1F9xyB4A2xQS9Vg9eQ1SM1x2EzweVDvIBVHNU+QWoBPzkQXUWXZnctZMKPZnylthhun3uDzfOxkFLSuWFe+Si3oe/d5RbqomlcRHBXJFYPF6oZOHQZbZ8uRhdkf6eSQutK4PWHKQSlLSvxXkG7UIh/HhLfgtEsHJ0Lx/t5D1QaO0BkrWkxrrMyNSqqsbH99D6iBzLQyhPmsZocXOwZ1AUBRkRlFnWbXzK/6fs8LrQFZhrU7wXfBpxPCwv8jVPrgHB/+Duwzd0wvn/SB02b2Es9+PmufUFj4zRN6pryLqlTkZWsTVzBr024PMZS3MFSBSeCd/ZK9TTxN+F3cBkz3DOTLn/IF22BkX+NjaT/C+eQDimnAG13LfGxHamXGaYLKtuzsCXQKxikpXAMy3R8UhHnkPhFSB7rAmoN3VKmuQR3X6GUQauTnVCNwF9bTwSr4kJ1sgQo5L3E6EVmXSITi+opSVhwfu7OpX9Et16tRhdwn2Do+Fh5JkgaVc+pYwYBtvKXrcqlpD4TqE08F7aXiulpNwcha9cwS98iEpqz5XHAQpwyuo2YmMbi58L/h6tydfR+j2JQ4AU8Nt4XGU4oWWKyqKzBuwv/5PPKA1oQM3uqEOpuLmyIV5nMYBu/es7469LrPDzQTG9efD2LzU9OIZ/CiyF1hvkRkkyzNNZzVQilHl9gTgLY503xYmTKw4kLVOeGsCAJP7BIIapLGKod3zzC41LpeAmbj9d9QPc/pDwXsCfG5Le/MRyFX1yiEyrfcdWY6AHP1T6dL9EXxL+Jh/DTXoF1VLtI4HUqlRJ6SpeuML6X/QQ8ckAB4UWu9WZN2wfg5APt0roB9UFY8hkFMKsLq31MpNtQ6ZiYvHutLy7D6maeqDC2dkKB7NoYNLb1Q3AhodC+2QFuO3WUJMoY2YC2bR5lA1oKCOHPhMJdnVPsjsAuigGITsbpThlcKX6q2f+i0on4FRzzKCPVBpal9F4FtIZTy7tOIYun9T8KgtFuhUphxnj1wj8+8qP9UtQKzqvRu9dQru/Wt86ZaMd+wJd5TwgU0wB6CVrD0kqLwwIh7OUKcVWmrBwG5KUd2wpR0BAPjoM2UMxA1YdPfvbPDGftO8g9HgxT8pxs/kdrb11LVot6CHWqSo3Y77y7IB1nqgDQydrcxqI4MD2RGtMXk3yhiEvGSk04qtzw88R3oceG38qI99S1st0q7Ub8Fp1OjceWMtWSmkfJsWAHi6mHom4Js1LQACULAb+BheliGNYPC142FOl8cDObOiuvH4bE3BnD1RZCrK4Nn1Ilj6B21d6wG/aAeUUdTC5Th1KKcomWEq+JOJ/n9T26fKZoJJv8jqsYLmHj5+EpvqkwcW0KVocZIHsd2EW05cdagfbASaPOpNsVH6mmiO/JezMUAEMLZzRT3qu1KtCYbDZjlQKfY4d55v3IlKI82pWGSq7Zh+jg5RcxztfDrTt7y+UHRxAVutC7aIbg7vlA//d48MdIDoXBMmSe41kc8Tn7mU3Ml12qE2ci5x6S5+eaUQLbhM92R6GyCYXW+Z4+Gi/sBNV9X3droW74aqFGfPNHTmuLO82vXNSThTFEimAUe2uqsWW0waCLzJWWUVw29qZJygQgp7BbLNv7YpPWxDyEWuUzvBgj86W+KKesJ1H/vcdgS/A7LgM2l9fUtCUnaWQkMU8siEM8e9NLuheIBXi/MK3qY44veXQgIra/1JDskbrF6BcPAHfjGfetb8JtMsu2xd75OeMhy6DD841cfcS9ryM3UkNCLysak+ZjuMd/fWPOz8E8Gc3lZt1nRGml8eXvlXQkjYUEPUuR8CW2j5jKFGjNL0S+auHtclrDoOsqXcgWXdRx5VVnm7oJUtvuz4EAShespim6dlpbper1ZY710p4ootU2H9Kb2XI8ubrgdYxnVW014QxY15oHLYlMA9LQBcCOcvkpqYAzMVaGgdHf7bczbhA70s8CLWADB/8YX0GNiQNCn+yog3rV4rSl5QxizQFS+jsiXEKuZnHGVZZuV953s7sbIwPUuTrz3GoGDFCqGhNzibP45HcZBhfswOYbcdrVIVFnyX2qQECwNX+HZcPduDv1FOlIzM5XXVHpPoW/2klLmfuH9e5iHsJ/Xl+lGqBv56D3LIT34/wL/cYEVU4I9ZkbZANj6Id1lRuVF2yUQ8VxQr+huIsZyci+4WnreIKkigg6kL7PBLBlD/KT6zj+B788QQJmmcQf5/CyXZuaYccYTrTOG/aVwwPZPZUNt0eicYZozpeJLd49mKldBPtAtjUwWRRc4wG0TOP4/6vK9zpEzwJT/Mt556eBGErnl6P2YUKSHdJHaNvYaVl6wRlOJYJ1QVxFRYiuqoKUJGVv+7sPMpFEg/U3BeF6NjgjNEhYSIKiUvDL+lLqhKs7B183oHdXNevLQfZ4f2ev6JgBniJeM1Kz3q3c2VWHucjTu0tC273wDnOHTLQQTI72WmuIoaoDR4qN4h9HcndzOvyXHMgV7zZwyBm8Z+oi3OJ2A/hgcxZcIQquF+G8RdbdrMqO7X0oqqUxAEGumjWwbXTY96OJVjz7a0B9YNCdXauIhclkapS7ZZtoma1/Xo9tlSvo9/gG8GR38U2DE1VRs5gdEL3w/a9vL8cQQ6jsQwbED/Tngh2sosJbaAOMQW2tUF5SRWXIYNH+PgS/aWc4lyUumLM7hPGrTIMIQzT5I+Q7j16Sv5UK6oyr7aSMKpfFe3uKjcAJUTX1rCN9RRy0VMRwpoVTj7Ytz3fPycGNzLorSgvI5+GKpG7fGKWcGz2v0Nt+OiLkHApunOSzgq60ZD3CCe5dt9LnwBnl8XLY2F1Wygm63knzpkYrqiSQep5Twq0kY/ze8/huPn9HAivP6/J5/Am5BJfYXN0tvCon7ozYhuCbVNauxcJOlwwaTvn0QVTbwktnY09PQRbMJZPENQ+1t2DxDMKifDnbT5KVUo++B2JFZtU0z2CMSI0KbzxNZiUNrv+omhcMfVq3DVrRV+u37Z9GpWvvQ88kNhphizOS6tRvHS4oUHOSF39NlGMf/8MC9T5axJXW/HMOGtWtO9j7CKEcwZTKxkjFMmikh8TxbBt8HSexQZM9UWWnnT6ONv7jcpf8iOQYcNe1dj067BFU9upCpfdueyDA1Njw+HAnpXLeoe7693rpuUURvqhNPEjdr+WQXtrb9p7b4wLZFaG9kqyEyU3mYnZ708C3S9CGXl5z38bltFOWiRZAM6qOsSfjf4PicF8dP3/pSnLkN5oYQB6nsrHu0K0pQ1Jngw4dAJR/NaRzBNh4DCnmEDXZpRwsUDGiuIA9xI1yv8HuCdUO/GexUD75dPxlxE3wpihOMYM0AS78TUa7cWzxfzWek/WlOIMHHSN8TKT3r2utzb7vhQ6ucfOjxGtiN3Nzzim1/Wcy++efsk+5Anbg1gfBcapMPBwIr2x898nuKtKRJUsbY3JTPqpXOFbs5Z3IhQt5PJI4GkEYpRWvVc3tECxheqQvyPAiaDpt1eTEHV0j8DRhh+CSEHYHyyE3KEtuGPsf0/j68YLbo9U2qNZITZZgzRYVnWWyRmSDO91mRsaZwOkjVw9oAFxRCblqWsHv8rqMkVc6poHE/yrfqlgi4VbtzlDdnMQegPw4nsXuDoof4IJ9qQU+IsKVvnvN42/mgr8tKqma6kvQjZ6hRU3JBNMJMR5LMBcDaCR1hQAyFD5mSIZqZHuNQ5STwym1juwf1szUbWMWHOgJbygam9Nm5WDXTuIq3lccSzV6SQNHtAAtmCrfo3cf6tLx8AGlTbmYbwucVcybB/aDWesyY7GWD7t8WhMZFlrw3jW95sO+QGFU1Sb7w6hE6NHqSXrebwrR889Pq1IW4I085YVcbl7J7o5hZGBXUWH/W4U55BDYjs8Lssw6IrB2mHrEgwh5R/zDuniQFOknGQNliMERJH4zturvDmNpYbwPjc/VDqnNWkaSRFdl8p4irkEp2pEl1yggkogZElSiCK+BSkRFpgIo9uuuORxi4/N8l6gFWNvH5xaTpxVnhhFz2orO8/emR9NQmrSDrqmztEYw4/yhppO4zQe3STofYxgJWef2H5W6Ch3q3ub31aa8m1NDwJyi3E+ULkyr80qE2GaGjjKX8NKQPjw3LN6rKdsbFx6xJ6KBz77ezJSKogtiy/l9AbpkvbSyHvucFRvsXm8KzKeNWFruURaFqKrIHe9Sw0gZ6YuMFHbdEZmjZ8wDkXoZ4ggxownY9uPXMtGmyEDiqee3eHSk5zS9nC35O4BboOOFcG25rc4sI78bRqu+mADirUS1wLT39sMaYS4iEs4T90agwOGc13xSdYyiNz7cZoxK5awo5eY9jKPp30S/zQgKq0Zb1d0y0RvYNPHQ3IStsTJ8m/tWZPmEHOhkHC5pA10WCgb1afkaxRnPYFtaKWlymiuah74SwyHvLi5O6fZA2QEfAU6zTl5pa4kCGwyy3P3mhY8NsGVfeiHUFyxf1My/KmBUTMbEWEGuWSYXLt8e+J+/J/W4/q5Mjkkz+RmJVNo57K5CrfUDfTFJs4gkQ+KQ6ypGNy+xVMl6bcU4/P8hOTrlHxq84LU9W7EicaWQn9kCvDQMQnNQ5FL8HvgvyMdLXwjEniMeB0cDje/INQL8hesPCZ+9IV/RQIftZseIfTKBb0rQl7G9ouYoBZaLlSBkgom+WMw52ICTF8YwijIw6J3DLR7CsZ7x99Boog/3uQX540dTz8mNMjqx2+NP+YhhUlgErKX9QONfNt1wdICGEFniVjzsQIvOEGANz+DmlThDPA6NVFrqy0KLX4q1BpyAAbwYMBdYA+oPkWPcl7wAAtPttmo3+43p0su+C42771bEXWA+ZmM1TBXeqbts2XQNRiXNxS26YADPUyoXof3MfThf+aL6jyC/iPMGNbE9zBThWRMtxqR6oJ2Bs6s5+w1ccw0FPu4BzvDzU6QfFqEpHOS8rDMN6ej1fnGeLXo+g/vgD/ig+HUaRXr+bmlwb7+5bOke389LuiaAafN3P56Fygm+FGBOz8jQqNGkj7cnnUASdmf/R4PGpOMMCeQsoIOU+Pg8sZgIfp5skgfxU+7NP1gIuMt2OiqbO4LEnEkxEIgHNtR/WQ2M1N2umeGhy5LDG3pNOO8j1NwkK1liOlvcOPrLJ1VAg5TL1Hq631o2dpEURjK5Ky0ZRQ3nQJaRMdE/BXNOdVPpnmLTCIghDtT4+WXnVNUpgrII3dg0T+0EsiaZvbFqJI0+rWaoEy/FoIzCaRGNkxYBQ2pAWAuhbgS86KTTJYolsSF+hOx0NqaWnUURqKamaoTTLG71W+qtLgZzg9zkUHpmf1qoYC2RReKI9ZI8lCsP0k8oOGSY+Ld5WX1cV2tgKxGSudIQwEw/mopTf7VIMFtg04uT/LCJUrUYLxciHvzN+moSXJBd1KuTJMpRsiA2u9NvzwPw9nfK6mS/55ky/zN2aRCWKp8nTxCtYld6p2i/oZmG91bQ6YYYaOsc2awZ7tb/XgfKBMC+K2bcftcPkWK44NyJtMzyIQJLTbKxZpmPh/+aHp+lW7JR6d7rwONx7UPRgI021yx7SR6N3R6JpiksVluFoKZwY9S+vFmf5D5bzU67r/1waqcO6zo2cPHNl1StEC5laYJnLNA+p1YWFhhZSV7/JuA9KndYk8yahT9VOxY/aA7NV62fucmrZ/6Ll+uHekHnkg4IWhvaHUSW8LSnIFxbadxV6/AQGeDr4Tqc5T2mdAyFbj3hOQxtpbbzNYZzQKLS7gvJ0PtGmErO2eU7sDOUlISRFlXJDNIoLpLBA+k13HMm/mrOWcARd0qIUafJi7iR8rD3BHU4O+zjJuWpGw9mJSGjCqQm332Fh5RWRjsE1XWKRYwgGlgJ+jUzW6AW4aWt5H3yKW/mKDJ/h1aR4M7ZgwQ5zWOXl0wAzeOw/Tbui748E7Y5DNFfwakfu/Oscz2ObqnLlvRi5wB+ivGIKG5rWbvSCDdfLau8relfw5Mu8/F8i00PSBMPm0EdxHUNmqTqS0ncm3ly5lPxfq3Rp53MeVsexF9jkPQC6bb7mMZADcO+fW0q1rgo8M3Ckf4qzmZR02RCzFxoMRaUwhA8WHz6usuc5ucZWvpsDzW/utsSoaupY+ai41ASyZxFWMQSXw4xBXx1csE2/4alZC7lelzGvhPTYKyP5oPdMn4M6grBv4573ufBx9XhzIl1FhCr9C+PxNYeFAZA5+Cijy3JL9FRch2/vXSyj+DAjHxZQaiiA3ONAWA2vtx/thVoCeNdMnZhbuE7UST4ViPsjNjUGD0L6NQ3KmDy+0h/qfSvOIz8ePXlJ59XghmzGPRqero7cccRh7OBotyhMpk6th4wgyNmHmvBYQ09G40+a7JUesf+/qzl/AWm2ixtd0DOgfTeWp3SnSDGOC7o5zQWmcyH8YtTdxMahbTFJNjbp4g5JfBTfRqECmbHMDEXGJRq1MVO81tFY7oQaNu+ruwenF8X4KIZIEm4i+PMBCpLoXFcHSav6tChLtSEc0ubgoLdYZaYyXY7FtK4r03VOdVxDQ0BWqHPj2mWHjFmOWrlunLh59Uvzuin1Brvvsl4i4uBrVkUUSFxtp9Spt8Y1Vze8I517qqwiEyhktEa2Sx+RcnUFeTDA2zLsg2SadBhxJYp4NME2JB3W4HCYOSfqfckZ/ZCtoN3WyBGOlKoouh50xwvSjFdXN9WohKsze125NLYm3mkhAPDJZ8ul+UKEvX4y5T9oH4kewno5EA15WXARh+DK21UFl+8sbWaJEF59kLwN9RUFpSeaMgqe0m8CENNxG3R39d/UZgu0dYeHV8eKMyQFFtwpjO4SZSUDyIAwtb+0AbIymYwIjhomE1O/ih1kz2WswaMFKtn/v9sYDBHBL5Vns35uNXj5KAsquiYKgauRZ9PN8gGU8Mo5auxe5TuKRHIuvt9GPShNe17iSVZk385jZ6TmREiaBGELkvVY1Q38vkpml7tEN77XkjTgsZ9VQYHRM3ItzAza9TxZgLwVNpAObR10h6KeKDLim5PX6Du2d/FjlInJqUBblL1SLda3WTisfQf4Vr45hs3ogOiUUMjDrJePN2WrKj5TiqZpvI9dQjIUA1g0sudFY+SWcIKM5bQmOqKj9asoq+0Wk/U6rLpBip01MW3TIXFuNBeO1vVhE0FFIWJTrYWX2ZvaiKcwkuxRgleikTmvDFY1gW8H5PkldsnAk5A5tsi24FDp0Q8Ie6XaNCCHJt9l2yQRMjxD0Pi1hPNBCbw96NOnrgwyfFHgTx+RAns0hQofYX+7Ad2RfSardS13kAPQ4aOWzC25I+XvIVrwn3yki822Nxms7FSw5TGNhy/9DrRQPVR1peF7zRMpep4tUuRpsPmu2ZnEh7m+qd0cov6lgjHiyBGc1EUqX/9pyWpQ5f6IHc/pej+OFmnkXQ6x0cs+w3oWDCeootFXlc93G52XXN92totRdzsWoZLNPHfnKrjAYGBJRKYQqnLo+LU2ysmWNGeydME73g+RmAZ62LPo/Zj/VJWogtgI5Ex4sdw2+h7ENgWGtjC5n6E3eXAPr86shvE0YDOMebz2x1LiRRB4dnJWzVlK+uSAWtrqusAiG6jM0CLmXC57IxSc8B+QTjd0I1RjR3OFsVDDF2mMisknMVB4rm535tSZNVdulZj5I4aCaVC3r2Qim9faiyDUUci95YbdqvWnSjUbRuDTiCEjmc5YS6sf8UPy+c+X4589c8O13vEQLpkhemHJoR9t9d7LGVc+Af8OCu47XPmaE7bVBtwEcEx9W2ELmU92WufsdawgkT4Wi/VBR5ki7BcBOv8wj4LspW7ixMdlrZngsgVATf3L4ZNFZoGnjl4eXOJ9RA8smkpuwPNhR3VGXkwsnVmFWc8qeUMs0UEGTy0S3DI/wVHLxDMLOMZbmle1TipdCI8dOAYvVpU7LluyS70dMWDWI9e8UXEsRfXagNOqgw47u1oO3crG07SVxUVyIJeOp2jIA2bz9zzAJPXBu/calyJajUeYGH+l93VdqsnRbZJ2+GH246JFHHZvV+3AoAlcaZRPkjUNRHxhsWI/XN9NgctVgLPCK7OXqlMTVPZ0WkJq1mq3E0d17bsBHryBi9yU0TC7JY7wBC4nKIeddkrmOJ5brzalItsJAFyUAD3ARwWV4jAltXJBDSEFO0an6uH20fcNxlDONXLk/XdpIGXh//9VzdRnX+dDrFQkJqv6elfSLoBXTpqPJS77IqXychXlNce98KKyTfw91QAfxDvRN3lzkMfH4w+kQTkqlrYz9HsmdKyt89KZU+ULbBc3OaJxJBYw2f45plVzrA8f9MN5PVrYAI3R7qusK+Fuoj8JNEv/vZ6kXeYxXfqEbgTS1V4NXonPWEMGY4/yXZ9smZqsdGsRgA8qNaSUSgifWRMHVqcnP6UqjwerA5DZ23FGoSwuNMD3aJFUx0ObPNRJlrmm3IwqYx+c/La67VWDOmwn78G9qyRlobpGkfDUPQUNN6YB/gFPThUdcFboqW7zVpSSf1nHPkToWGRR3zfi1jY68pyXVe8qPaK7bOrz+RLoPbqD37csU1TYSWnhyPf46OS9PdnVSGn5Fl0ZyN46VP+86lrnDxWaYj+l8/vOCfTJEdHtd30QQ6eS4dkO/9DLs/ZdDyBi+acKq4vapVoLhrD4gV64SQqn+g8yX8y5SKIrRBJKmooywjo1x8A880jCcO7eJgX8+cqEvpw27KDmj8c6SnEL9G2Q/reiI5jUXUHSN7Mgs+eToewRHSwI0RViVaOZhs/8qb1DS3U4TvssYRz7j2Tl632ZXW/nWMSr0ZFhkrlQwLcaHTMZCgbGSydq/M1C7balDuUgORTDPNr+mp+XeWR/lECvzYaIGS7KD6vgX3Mfq4xldIl2Vr7zo6THW3HdFadGHVAIXPwz4zq1voJBcYlv2zjN7d+U6qdKt3QIha4UQsXSutaSLjdrNcMCd9ljg4KHkRaUmEBIrs04MWa3y/1UedVwK8F+BRz5lsHuMzqhSvp3c8+CRCiiZXoWYuQ1jRYHKdXA2wZw560haHB5sE2ZynoKJIBFQsdoMOTXXJMhk2jDY40NjYt4zlf43CXips/nWFSzYhr/nIFhKRp7AwuUUbv6pb+IDrfve3Ge+j80Co4eICEJHxczFNT2QM8NzQ0bBN7SvF0qagST3bd9Ekem1m58CT0hzu41kc8WdDdBlI7b7xblAM814DXquNyYIIvtcMy6W54nml5RYVmbxB+JonjatvXqpu6OHxHxVGAqLJ5JxE4K8Car3nXLNdRS7xiIpUP2/lIgaps5pOFb2fN74dv0tbWmnZJCcT4L/HzA5By+uH2HCNB38a6entemN8fvIVC9dblxWP2VAuiI7keC5lYlPQw4GuQfoVzjGw19o2NbviEYJdG1XvHMNsBfQx/nxogQCjEnYYGGpfNTQ5DCq8gwx5V5Wo1m0+Vwa7sI/KM8/apFBxKAvImqbi8Wx/+i30MrhSfBCOvhorXg1ePY1e0mP+EX05vMMlsEkxgpDD5p06bdJgsGI+jk8r+6iJU+zZn7ra0vtTgoEtPEl/UhqxHy0bXFmY7PlD8vxh3rMY7FzkPsJl0bP4gE8ZfurkgM8oA/oI+ZArLgwdInj9IZy9iX+CQF8j+cfzGU5VQynFpxgOot/MfVqP6grHr1X6Nc83aRIbvCXAA/hc6Op+Nkt4FP/untkWgCGGF+NxQ4nsibXAxI7OKqOxtU1CX9pHa4US2Hfdsj6tcfJ8z/z8La8hFk2qrntkhyTZNNhCPl0oLOYLJQpTAWrmD9jJn7/x8iLjYVji/Cb/rHjTpZaz6fDyKg5SDRD25RAXcQwpILAG+y11aaP4H0YpD3vTWAHI5s5UkvzP62onK4ZC3ZMfUmcNCq+jN+8UEBm0EL0/ugu7TOSpI31Sb8ZzJGwzuted9MfiUAEoGzOuJ51YevCChIz67MnV90r52Ht0s3CgndDAuqdyEmfPsEVKXZvKxEh4WHYbQ39AgF9ka90s2SkbptKLCzWtnLNcdBKvOntqKGyBbnXeIiFyhPt1G8RkX0WnlqhqkSjY3+8buOWVeJxOX2IWkv4UMc37Ul8vOjwkleAjjfeuanU7DiA4Zn67EjxgcAsZIxka823kCttMTSn/0n5kviGlHusS9OEV6F0YNdWeuweI+UL6e9rvb/1QFeb1rAn9pQIvBTseXgORfctx0/q2o3zNkyu75Xjd5CGfsov+TKliAAdo68O1Agt761VBwKa/yULQMLzL9IyDWH6c3ZKqA7mnuxeNOIUcCs+XTTwyuTxEbpxc/azo4q/kPoQNKiCCUZC6uTKIvD+6xA0r7OE4Y+/fUKgApvipG5B+pquFSjmPI7cmMVQTJZw2ceuxLn9dTSOvcl3wHG0yhCpu1OVkQY3yPJx6UU1XgwANoTBgGV/kBZPAn6HycFHI6t8wm/7YtBWVmpA5828XRWnI36JO0IuBHsxLs+adrMzygxx1OB57aVaeQkYSJ6KrEo9Q5Dv7ONk2KqZcIybp9BxR3yxlj/+nk8iQCGEheA3NNrXsENQEM4ZuggtVT6JBfdeGEoWec04dsz2W86eHgaAcKeZZb937JkdgGw306OLiWV05c3ys0pdRR009GibMdiflG9jpEtKfYg9nUjLWTxa1HcF5xaQHHqapT1SskQzO6ta1ZlCJe8gBZdOkTTxv1MZ8rnMAOiCrbozCbDfWZbBp2tqI0lCnsLGgV22J64iv9xrMzumUnkCBag3fbXjGqrY5pppGM6VNPQRh4QJoZ7QUatxX8tQsUM5tealZUdMbJUa/SbbeTQC7Tc4KK7uTLcesChzKpzdfDtp0c4YTVZdWgR0jCHI0+Rk1pjop+A/AEDM9Vcu4rmUsmOucImN4d+NcD0SffWQdFpOoHd/xrWvlmJ/2BsV6mQHuzMcDHJCmREnIJiWI6CTb0bl3xoLeD4bLGiSop/v76yjvKAJxr6yofALfkRGFN3Zxcdn1zK3LUvan5YDAlEvG8p0hFBW6RRlu7hqPbyvE0BxUEZcAxMwQqsklphLDYhO2/01bwL6Z0F67ugeTKmBNx4ySrIdXGf6W3+qBUS2OBMJYliYiRCxO/oLYBd0vERWfeaI7L+AWb4RWdzG2JzIZI5/bDJBOCvhwFEmwAijwxNDOBNzN+d+8j5q/k67h3CMhkjnFQh5U41KHjTLYG6WOPwUZ3NaxoH/VeP6826ENiwLsuRf68Uxpp9Swd5dqYGNOVJZqnYae8G0+MxbpC3cjE8+kzohXw313JxyHs2OEJqenr7hQxU1t6KFqewgtgmElxS3pZUvzzQr+Tj48e/D4dE9jdCMMIb4YpefCg2IoyV4sKcgzHTjnz2i8x2kx3jux+Rp69vDwqNoLIJChbgt//Dehk39hi1DMvo0KUruABf0i/ZLrws8AeQp8zOVw27CbPQKFGpX4wGE2hYBT4Slm4kPAmSZYWK9myVmv5KB1gPyTJjzWmD7ypcrhdfGhUk3fGSIxpnrTdR+IZ2P5qM0aGN7WpXMLFDpUMRooKpiGePg0JWLHT2rWq1RuhpoqfVl/aG5BVYHADoNK1kytGeyPoysRZCty7ZUihDPmN0CTPsrKfKJ/hvJH8GOB4nHTaHjXe/39Ip/r1V5/h+wnqG5/+/v8We9L2TYnqDLaJ/widjV4d1gk21/vTgRmQf7SEKjzD686XaZIOb0V4357W6VH/stLMDnwkGYC7LElNyGV/uTPfPa8Ue9teCzzIqltQJ3//9drTuXCFc0i28rNA+XqOw73hlOfYk+uHVGTazH2r8D/ZLhFGzcUa86xVDBdB54xKQGltqi/ZDIvPg82IE1oIP8stIk+f4CwJFeUx6CbqQr//RkeNW0erpJ5gn/dByX+zNDSCrwknQQQPLQeyFgRGb5qgeK4+PmZBh0zPiY6wH4qtOuNpmzFm7aXXINy2B+nidN4nbeb/jd021OfOlx0ff6QBKuX04d8N/WRyJPqDOVXQBFfTVTjk3vBQIKhY5UJcttIvCXRo1Wp2gIZ4fti/7c2ZAHlI+1gA+nEVwADIeTvIk+Z6X1NcTK9IiKTh9py/z2DmaKWm5R2FkpbiYZ2E5mH8mmcU6S3oB+X2D9lgSSNlIyxK/Zr3Or2knB+EsD9/znjK6vGtvWqXMikiSVn+szsSY9q8WtSk56fMfbkzRbrZQCD4EXDmq7+ELao5Yh1q9/i61DnpnGiLy7BSQMZtcwZOELgr6SDiyipDt3nEPHkba0OvTLNkJJ19DDowBmz0H9CzKvCQUcjVVyGhE78GtrejcxDO7evThalwHt2SBtrw7mKGbRldnXlY369PvIPVP1L+g08uHwI59w7scKX5KyHDTgrAjkU9HW49h9MwRIisU2js6n4/eAu7Qhy+XwWJhZP2Yb5Ou+igzzx+ArwwocFX86muT89dGjyPZqmgF8aQ50Kkf+aYc3K+TAj4DE4MPyLq8YEWv++QtKBIkEAqS3+ySK/Y30I/5UNBydgk0doGC6a7QGv094BzWMOkEjX82kwS3SNhlV3ja206hRlPrXCfiMQKvjdfPVmTVi4MQflYman2cdbNB+skkg0AJFb2UMRz4LiOlm7DSRjlUYwJagLIjAelCsimZLXBQds8AH+L9jLlZDpyb1JQuQAKWjTGdL9yGQnBYR6HW1O/GJDFUvT4j8yn2Q8rVqKK902C5KJ7SaKSoHDbqSVKLOZSLvXlFsoMfGswsAV6lwIApT5XGQHFnP6faVBG1RSdaLzfOR89/wtVeXAxu87dCxFpwvp/XOiGdgQvy3x70lZfyDH2LzKB722UFosCxWR5Y+gXeVQla6HpeN3UOZBzMMeZxIoeljals0p51GxhXVyrUVb/kets9zVjy248Kn2GLBG1xjSTF56Quamwvsz4uWjWlo0bbudAFhMefEQFZZJ+B7bbJ+URl7bi2+4zXjEssEfDQhY4x72V6E4BPQ2JG07yUTZN00z8hoO4GhAbD7919LdzJxKxyPd6Zylond93EesOuuWghsQbbRnh+G0GpVwtnlOZYkjpvsraxvmC9MtggbL6UdvnaYSv5WqFRen5Ew6ULTzdiuOl2UHO8iEAijGYSVxf3dhK7dBq1uTDmyriaSwkInO9k06UUfQl4ePZkD+RTNGkgmpD8BVKCQXks1fRjWxuYFo89s0FoZUsWyluXai3GnTMKytbSIK3wAmCEEs1UYUBSBvuCF94yjHXitV8RfzCNau3HqhGpcUByhtAiInnUDS7Ttr8zUpWOWYMbCIwxwVsi0VDQ/EwITEoM0UxCqgrxKb8jjtcd3b3hzXBgE9A3cASmnZ4je5gfCHjMOUNQo8KLw99JmWBH3Hej/GxmRjzKctCCENxRo7VZJbH14g7XZk76r/v6gOrd9+F0kPhYTHs0Cognfid6DsflZ0o+xAqyTGBOs+0dUPR2+Yac8W2oW9E01geVqCrAXNJr9nYjqC9bHbB9bRwNdvt3VbhtRfs4tPpseECAPkuHOEOlCAj6/iAPlC9CFNCAGqGMFJdkY8M82GVXAtHtu22IQBf3QS+h7r7sSLtyMkOZvzv198RaVu3FJQ67rVfcDHTkRljrmj26VQSCsW4tC0bKdA/irIt3dB9VV29L5u5DQd4tFDfZ9pVO3k/xmkqeAGfajYlPmQcXF2o9TY2gUpvGREMILw7DFN68jspUItYDD4NqUZfuqZCrtveI+vSgVIgldCu+ZdSJnRFDB8QDNOYqL9aHblFg546vNTumPe1Q0+cd8jNaW5NEwER0C8BbwfVABeSBvdFPFjfg3d23/RSSfVFPejTCtGgXu742TD80QTLvE7kHKk4wZlQuCnfXIE5lOFm/s/Zx2lquZ72s/Zu8/d543tFNNHBCRajb0TmC08Ek5Vmjk1c0scOLp5lh7KSbqRqL+0e8SKct9g1bEXGziyMI9n9ftjCi9RHpr2vtK190duGbS7xq5FWwnyPaJZHivS1tJ9HEwzqsNOxnnbJNJn37VRt+2nebj3+aquc+HWKY9o5jg8zq0rOBRuCnR6Wb14Lgz1uPC+lM1b97zT477RONO5R5XF3j9hYo+Sk4pYTsd0duLcZ0IgqGzWDIEbAyHv1N5MEtSd/l9Afrqq4ZF0mcDjxm3YVrjfAbWtIiBdI3XfFV1qgzuT/NAmWi4MEz0fH9tg08bpmt2WwFeIzD0R30SlSlqExQfMK5qFp5fkogSRlhzUJRGR7jBipqnM77kQWFhMB5Ame+QaYSKae/wzpbEmkeOTyZFFeBWw+mPdNqFSJ6a1G1M1mb+P68ZDpFENwnSS6G/V/2Xdmm+eq/Q8PjLxWyiS4Ix38guNMS5DoM5GSXIZkXh5maW+5QGLfV6JaCTLjUPUMKzpjyHovshqlsm2MW4C9WT6oGNWu0Bfx4iOXuIwKTR/KkhVg79jmYLXDpFyjGMdkKy0x9TFg5YAq67lf0ZPrJnl0FbV9h9n3qV97tIEG2xs9L7+dGWtwOHfOzCIwYOMxp6nDdG/f62eR+uPkjagXAZBlQWzQiVuy7haTuGRFu0i0DT8q9y0BL0LwNWTdA4RH7mndOhZd2xtrvPtAg+MhWqnkMcCek061lHEQOsxcyQm3YUsQpjAhBkOZMYIQHKWQxs8ViBDFAXPPUUrQ7q5xvS6z1bmx5gUWDYXBJvl54BrQFFyERVrxgBySf2+ABkyODNmUEccZidsca24oErBtYkZunh+XBecNpMLpZ4cHztjj8B7IlSCpY9StZm1GIjt0TYPayLWpvv92TrxnNphWHw3oQnVDU+UIkMUnuNHwyZuyX0uJpzms2d3Ni5T/IM4Rcp9ioUawcGzOYAMqPdVTP/UrG9apY3+6FCZ8Cj0XO7XbxBQi9aPxdNFg16e/Psd++IPcAoEos9OxKXR0ZMmViE5pqBLPe/5IDarb3/8I9p0dHVPNUZ9Lgk91yVsdq1JbEgaogXluiwwrajmIpn15jeVa9TKonJuLCnoeSlot+76Jh0Xr52Rzvh/ZHSbPfoirwJiXTS7fSJBi276s6J9x/rM/he3FAjaDFwXzOspCuF7BzIqXrhGRMCvfW2p9IN0TuhN9ooUimf1acIpAPDaAFJ2twwz4s0TJduAqBqvDGLIHGYCoBwhjoUkuhjDYxF6QE9eMHN1nzLgi5J+B0vJH4c2Sfu1ZCgO4bS4qZunV6twO2j5C88cfIbj/6yU4Fv4LShxKpc9KHO99hM69XJrQkoJDTEJJtLgmErlrK+bvMUq3LyLPvl2Qe0/D46mvX3Q3Wj6kXt9TdSDDORsBfd370FXEZrd+0cwwMlu01NClSqA4g/AKPAVZtOeWdLu6faSr5o+zZHRcrlohcPMZ+2thmAma9lCop9isuMopG32bHGiXdFlfCxQlGIqVZp7m6Vr194XZZlJRbXznpCCozKcPbhT6kmYMoEsd4h/asC/pO/UuTbAccmJmYtjtQZ+F4b6DQob87WoolwYaZ5AuGf0p8CLuh6kLE/SkFlxbcp8+Ki+vWZTIWSVHw/lnUkdu5IelmZ6B+csWkwfCrHKMBdLKwR4qW6B9fzvO3lhmzZIyHRym2hP9BYFS1E2cDL0Ya+8URssKxqdsq9IzPCMexv5/edeyzSgxzB/dQr8+l9crYO0YEqBHun1t4Xmqb5PNZqErt1XkKXjpms1aaTexGaszXZhYcnMZd3RJEP4euiFfADSNwubiL8PcHpZCGBvfXGtjplVbKZW3L+cCmSuoMUCvA/UNil5fWyq+EYIU+20sblxRizspi7q/RY3zHNKUgF1g1fLeeKz50N5Nb/a71idxebn3M9kaS3fQuZC3jycd1vXzQGlsEzGiE6o6eQAQZzhf80fhBCCaLwv6sCT2e/Zwpejr7FUQs1Zx95EpBegwdJO2kKUS5nqiPuGUASswVezJ3+BxdR4KxSRUCBBiq2wOIYHTKHmM015XVuunx6fsoDTaJ58wGfdT0ZM4J79Q2msiUJaacvS5KSOXbv6AmDwSW84pu+6SDdD/O1Q4F9P0Ghyay0xWlKovyTEPIpcA3CvHU4cyrq309g8xdhX+0h7xpcD9z7Eg3TAI7rgPjgm2qAh9eH1ZoGsdJ0dyLpvSAjoxDlNm/On9sAdXg6p1kZmeWU/LWGBOzwtNi1Auzj+UlI/J3l4XQ2wxIIhjmvF3k8iqDdOWwZYDNS3qaW1PZTSTN6yrS3HpsxBg3GhGvx3S8apfsHwQSLCq5OyXTHsVV7KyORdUfaiXKfbka+uSHzdEmLCxRbp8+vRLr6alrybsINCDBHrD6Kxfr9UCavwDqO9fgkfX3bzht77G4lcgqxhQayT6wsSAgSNQ/Q5xhaoNJKk1j5AD3QlnJhxWvcsH39GsFflRAqJ9LUKhG8K4UwfjaxacQq/TxVmoqNq0D3JSgHS7awlQqP4EyYYouh/3hLULfGVLgCUhSpHejIhmqefiRIZk8ScuFQdJBuRWoa4j/81ACSe8TaIDqTLthWArei6+y4Y8sc+Fsd03XnlQVn0D1wB4wekGJZYjm9X2TMU5fQHvQ64jud+yPPlyLPOn/49Rmlwl1rBop9/TfVrX9COueK+awbfY8qcgIeD46rKYT3aYf4j/xNDr7+ZPK4RbnaZF4p9sPAy9JrFgU458ux/srwaA35ILc9sc/8tps3OzktQ53bdKqjYOqpuEXX2mldqIQIpuHC2LjO4gZGioESmqdsNimdEdDSKsCKmYFEZ1T2hU2XwaZ9lzThUUuqDNqHqX2F4PJXpeavo/VpxfocrpzQXoEYMZ4kgTerSgWwtfH8kfH7CTke+z7+iP6YL4uVN/A1GE3YNMoIyvka/I8aHFhoVhnEaniUo76Eaet4v5p4WJ7esR50pznIR1YIL31RTCb+lbBrsy1Bi1JXhKR1OHMxG9IaUvcbU8KBZGCLVa5LnFnVan4xJywjLqBqUe4OzlybwZefpfRa8I65aJLxzH7GQoTDt7eLG53pqP+NJsuRm9LV7ulk9fZ9E9ph06vn7sl30i+5dgnlDYLeQ4eUeaB8xE4KMd6ZYNSHMPdyvZuCp1nt7C6VZspbWk5qRxT/bKtQtfrDHhr4pNdSeWu2QsheFp2gNaI/iDXRQzFN+rwNehGG0vDuzkbA6B6IQuco65mn60tkagvK9mTuxNSFMdzV8ngwIY5mmCzd0wCiZLg2I+SJSGEuvi0193uewKiujY3+Jv0ajqQZRqJvD+JdF/nUAA8pP0qxoxR4av2jrHVoPSUGXrVKck9Ej00LkJMuYWiOMWQEYyJpgm0su7I9wGN60X3yVCpUIS+QVbWorpt0/JdW7kYYciChcE4hlryPJ7UQh505Cr9MKeF//m2HQN9iuFNU1GDt8tWf78MiknsR49TyLvAK1zERdpNOsQQdYHd3eYWdAzB1q0/V1sQh5dU6Xe/4RE8ubR8QFLaUYWoYukuDl1eU+SwYE4rRpGnLFOPT36yURn2AMEiPhdlykJvvNxo62EbRj2nMQD0EaIwROkGsF0e1MHzFHSzu16iA1AZviitYOfQ86mEfJPy8eMqJNc344I4yfpLNSmdAJBvo8ThvH8gS9qDkxjiwQJlxECHe2ZWbIeTotUj8NjO1FJQ0X15r+e3Fiu4q3mqxfBXDDfQE+szM3OLe+7a4SpsdRzX+ZoRyMpzoYANw2gSH0q5S+MwGuxpquy6/5z7J4IdoOhk1nWsNt48d+wXcXBjny+irnioy0HkUdLvOTfi5oKoNXXv1MFeW3ZbN/zIdt/ukf6k/PEpceLkGeny81qUo7qS6r/ZW7anG9LMCcB8ercdE1WhVJpMltPsgYbn1yXICk9oVVgj7gdu7a3L5a8J4Ku0NzvDqbREYIzrObeWL3WW6Fo8V8ddfyIHI2Jw1sXD0tv65zVFSeEVa++ftPGiLyjGArN8tMeF/hAFcP9RiOlFtncFW3My8tM29HRgh1zI26UcvDZayG7i88pbaCwo5YSg5375+FGTYkba6g6rQFbSnVKflgOiNcZCCmaWXcWmofYmVtEv9Bw45Nwe8G3FYSZYxbRIlmf7VQI7W7PsJu2cxSDDmROFbxBOLybWKTEah+DDWE+QN49dWxO+M6vNoq1xbE1CNbD/AawE2Rnkj9joeyVn8Wry4z3a3DyAzJ+uIeVRafSW/FpjsIEGALq4XXs66TwdRkOjwN4ha1US7B1C2qrmYx4KsjZR5Tzu4nKy+NurQOG+7rzfV9VCcB8LHt454X+XXuWUClNCqMWvk1DUWXqbzXLV+7ac0+b7LYWp+G5pYidWrb5QdUOIR8OK9+CpDrkrSwKXTtUYTASumsdjx5bPgKV/vu1629T+0Bmp7RJud8BabPTHY9F4ofWTLztM44TRBlK8fyrYbffsdYMHSJTVmINb20aL2Rtsauynpko5MreaVvPQRNXxT8TrYXUIfGqZjaMr1Bz6JMWkDWoBJEtQvatU3hBZu8DoohSuUWW53P+IL1IaSvBp3Ph1apLY+t4baHs5D04BPHW5tflpmuCsGpAOz3Bjan8aw/UStZEfA3T7RuEZ3qGXc17whNrStfkZMn02aAJtwUmR31Xg8VbWp3OOuW1WC2mwnyj/TVJ/tjzPDTb+9rDjUtF2jIAzEoCl2j/vcIs5x0vsJtsfBQlx2ayb1JoichP8vNIrAbet/4Q101lraIojFv+WfhHMaxwV4jQ+ql03BujTIDl9U6jfrHbY6n8ypxBHbnXC8d+7Ai7UMv0r7iins0958AZ1HdWJXM+ABk6dsmXMWCyLJ9P7auvJHKQcjaUL5OWMFe29VMHyjHOYb7cPYAmyFtHwmUhJqt50YlaqUr14+BkzAq+rVILPvi3z0HqE2OAwiY0/bjTTGx1vHWhB9RgiAZCvQxbh/5He0SAy/h+pHL2jjXgoH+8xMCRe8ddXn6JwCkxexShS6y2l4N7y2rYPNH0rDi2c2zqPht92fRyfnz3IN+F7PzgKuosK9WvXkLMP1sd4Csg69x4q3AG2SgAeWqsNHU099tjXJDJ9cxmOlMPaflrE8fFC7KL0OWB+NLTwALgVFFN6lSB0oJbXCzSNruP3IPFFzuwLhUrXJjVpKRt6k+PthBiFb4OXJP0/Hp9sSXIN/24g7GgHns761ykXXALNFLVhvwxg0nuKK1KdongIyKlMH3DWxFCBzgD3h/CZiCTvVsSrqMAzv7vP5+6uTcZYOZh3qzv8eSLbymD0tnzoiacH2kloY6/MmyQZOWRmdV0CgxU90epjLwQzLABMNXMgANpRKxJM5V/T6bscMDUsQLFP7uwkBMitI1tgqBrXdOMwIa7DbsfvcuV36pdIltsKGiDn+8mRp96Roc/rcezcSIOsgefjQV98XssZrkk/vB5B50z1aEPgfoNlsgzdbbMG+eCto+sFt+qAMf6e+InkYPe+V4SlgrBLVs7n65oTCHjypalefRR6XG8qshXTO7HHsa2HB0+gXWX1U3nvPUsQbNEdMUsA6ge8AjPzXqfURWV3bwKFY4PszFS7JOh/qCqWbp75BoTsUSUD0YNvYaaFvbeckDK5IvxdVHIi3ssI8wgS40m3ekAPqLWSNmFuzgb30KMva0UGHHCyKp6Dfy9bOzlLn1qYn6PqROy1TMLiPL8PvlIZfHE1gzrBb+Mabeqfo2dKL2gP6kLoZ2aUC32B6Z8LUx1v3yIvn9yRD870NnUFymC0B/if4IsC9wMdK+PDrNzRLbSr+b4LZmvzUBcrtQMmGjkX7sHp3hDxsrqKmWsKYlviWyuUpgc7N8KygpKAqQN13mXnBneaeiDPyCeA1XXN+Gy/Ssraaymb+AqsQH2dg7eNjueYrhVffNgX7kaVYGwfV0XzmRO6iV23zHhziCXl/cdtwHXsrvttR6MCAtyQPJF4jiBHFjOaDaBmzzrRyCfS5ppEQ9ADZpXWC+oAQP5agAu86KirJmSBmAKCB97ogNc4Byza7SD1h8R2nly/NU1MieSFiJBR8Ufy8f/GUMwcDIkx+Ore+yaZB2IfPUS+4Q1Mafc/sc3oz6hGrLlc9a5dlr6LkhCY0QBqdPmYXqYhd9CbZ4BLNV8ivcQQZCk8dWCK7yc/kC48V9a9d8FPsSo+1hdEvJ6OuGHboaiokzF/ySamyIOUZ+QHvvpIn3iJzvV+BiyiRzjDDNHXk1/BCoSem38dEoFuHynzFfhB0QqfMK7XAXlu6azFCgCOEJNE2ieZ7BZ0GxJYMNKXqC3EtDJvew0ZaH8QkIncqqCcDQ6CLtc2/S06+lKWPgon76902JXXGhnVmaTT/HSWtiGs1c0Gu0Lci+gnCPsl6EIyKTS/qMth1aTYOLnDiW984r0MMefcJrrcJ/RE+EpSuI/ZyJB7z2ZDV7Ag4ErBzAFwJ+aTjpm321f1mVU2dwq78ix2vduLpVHAwkU0afeoo6tymA728iMgHasTWwo3eu6sX+Kq4ZISaKsibaJw6hB64Cj0dr9M8QDpqb/HaUdoIt0FrsLchUCnXpL7HJiIQnTbKsvyCHJ4B+9zrJSGKkWe0kHq0F2zQtr1+A2dYb4YyVBY5cVN4yb2lccDcwaK/tdQhiYPift7BiusX36GlW9m46MJhZ6+7RtQeCpuuhSgAARmAWhw0K2w9WJM5qJzvejLS0jIpcSGwKEj5mkusWZSqrlL3eYn86NvSLjLTXPRFWhBOkkILJGWVwF+MxSfiSLHnwaLXk1H4S20vQEyzF8A4tF6vj9Xo7zrgxdMIfvjmEkxyiSwqyQVG6z70d4Wqt0VhjJKd7ARgxLxSCd5HaQuAzz40wT4+LkBXmQlv7kqAg05oqwEeUA0Bp79hV8NlQxUX2OFZnh28hPJnP+3Aw8mok3Y2aRwA+HMaDjQW5lGTcc2MagHb2OenhuWiLJMHhPCvYyctilC0mX73vumEaiZYIJjCGWDc5mbUNS8oylVpzlg1rtrYdGDmssytiub8m6ffbdRy+tClJwiJY3jLS3NpWhyQ7brjp57yoCs8Lpnv66X+0IRk8sBZkfAHXm2rFzPyb41YJtgskwgTIgyFeHKwmhinbvdulsND0vfeoD/sVKbX8uNDc1cjLRjWtY3A+miOp0DcPD+Le7Vx2EoCJ1OEIH/rQ/R1hZfwWLX7HizGKjMnhKHRYanwp0G+19IYVqZlJnKbHiQqxmS/yJvJ9xiKKFrIs8wHYMRW753LOP925RhmjrjAYiXPIs+E7yp1vRmArzbQylsp5DjIZEizkPGabs9lCEPbWGSZPOMmg2YHuajG4YHYQaIfnsFNhy0luSe+tsnIWqrMOB4KqL5LtEkDbN/9gnEFL2AztWGSmihrfLU/fjl2CZeBWoHs8rHgoHEkeySU9yEgaveTzV2AQBJc32FNerSWZJr/Obl/jowAC0e0QKHzQZ/UtxqSDYBcOdEUXZbXsQby4aU9lfQxi5wRQOf3AGy2yicfGxRWI7eNSf6i23N/5dxr1pSAoGRxvV4O8V3Xfl/LXVK3X+5qj4yRiGzRWnjAz9R4KoBUpvc/Vo/8nKg5Fv7Y6y3g/p9zjvXkIIPH3fPh4tcw3FGDr6MVzvl3W7A/jA8DeUdYcZ6CypVaElgnQAuD6q9U4ChLKyOw1EyFHaPkdZjpvfy21fBMvsgs9wIrZYVLHIpWnWQhfkpqBlhF4WnqO80png/+kHLyYnIrav0B7rbPEN3Q7WPVW+JkbKG2TwtL/EkSF8OM34wsibVMYf6p0S4+LxanXzuiq5MgmqiB2wqAxbYF3eFA45jGjS4cvXHBYL1uMSViQdEL3aGtDr4qr8PGbehnqDp145iH1VPfnfV70GqNPS9mfZxS4orMBBwARiTaeDzvehqv8kkig2GHeZIOHXn2EBrcpXm2VgQtz5nXzMHwdD2plo2oDAgFGb/LJ4d99daUmaZRWEMCGiUTUaCA1gA67BSPJQ4qRTI7kQ+5+QeW8tuOY4rgr5PgH8PZQ+A4MG4Y3RBGqC8MmtEC26vMcW3AiJCDA8WvZQKUjsVeOCKQMgJ7JBQYGwCGcxtf9+mwWLHWCbEMNi4VOzFwKMt8gbfB+ZVkBxBOa3bdnL2+TPE11wZjZSzzBOD/RjABv0+3/jaFLaCoHj310CSd5oZnx84n3gz42wF7DP5CySpgQRtp0u8DOxPK6BhwsA7T9awRwZXOW6IHMsTjMxakY/YxTqq+TWIiL2QFoP+MEhmzCudQVsnpow+7fi1YSsCJWzinEznq0acjHitLYjsXHWoj4Td8iSqGeilgfxE+onfgdxh9ikxUaFQAMIWbe65OKhFTMpfRNNtsEKRtCNNBm2IcMBGOjVvsrXrbdMkHf/8EJj3RXQtA1osCgwzYCy7gI5m6BBuDuRzQ2+zlJzV+GDNubf1kYQxAD4qXkmdT2tfCfu0DlhzejV9kF4lG7q/1qpTRSx03cm1WlUHUpkzcNWbwlESz9KQGUiW3XvRWFMVLEcQvZMYTCU9qRvxA2+xSpFNJv8WKLR1kJ5IOKII7RSUg6BWimWpGh+VjTAqAkFh3ku0kt0Dw+QmFoMMxPR4z5iUlpd7aBIt1rcIuzT2/ZO5kupRAgWO97ooXsdXjC6Ykj+y0iIj9c5KIQX37BnDev++TUx+Ro3AB8k7pG0PI8gMV/iGCu4yfP/M4rEJZFtkJSIl4qSsBFsskCLVx3x+KdDgHOOUVtazswZRChdrc/4aoGCYxAYitASzwobKSd+mw1EmK4uUttzXk+kLYzhefRACsEuLWX1kWjQZ70ErdbCOiqoOHidlpZ2ER3AqQJxMBgHnW41zb+enKdK870SBAnsYYJ9JoHJI986j6Om83faGf093waR73J7ZBMk0N8qekc8KeFpRI5lfpfsPlWCj2iOJkjI7ltyz+YCL5Mjondj90za8kfxvlgz1RqLl+R7h/vLMo1cfvVxYBpsx86fZqrTlaP5VjYG05+eDE2YkVNxEvF5E9bsI/hAkqTOAIqQMXFwkDFkEY+nqn2lPSPSwhJhE6nhO4sbkf5LaVhgYGyBMZehSeEJpo0vm3e8yS4Cq5uveVvm9sPzWd4ZDAqQ/bXVsNlmOzcMb/wwBmID6jE+GtdoxQAXqYQZqthPnuntXWHnPcd4LT+muaVQ/yAiq6pWFT8WiVuZryqxfUL06IB1dRRm8oixhGUsXvnLMcv3T0+iOT0+Ff2MbOeP+UOce8dPUdX0mVzmv/qEiZN927hkfHM6ekgjVg+G3sR1NCvMPKe6vlbPfluZzV4+pXrxkZgEoXsMYZGYCHZWBrDLeG9l/h8tGEq/H4hP0QdZBBrMZp1DBCI8f29K7r3VFenq6orq1xDpviOwQ+zFVbp7IuYZNnbymeJfZigY3SQDQ9GoOPdPoJdRc5BU/IL0Jn7RyMGsFNlfmUG6ERvxAsaPg8+7vUXLStNoQJbsQYzFsCD9opsOZMa+jKM/CfYnm95HK0mnJrjzfQ2IAgyKdBR9FMUTN9t0KZ3DaCukWC23WsMjEYCQvrb4oJYgaSJ4xTxGiRf6f0sHjUusGu/EQfwUQNWRk+jJ/V76iCGX57xPJzBxOlrAaQO6X6Nyt0KyoEoVclWl6XZwjdUiL/zSjA46X1Ks9yqdIqe9xLdGb+JDw4cqqJQ2+MifNFJUk4kXhJN7NM/rbPAZ70f1CgcvBSFJ1IVQawxnowHpMWVVQMjamFjQzG0WHIZSxcpEVpSV0i1JSbVAxV4LyJN/woZ4qS1f73Yb7vTrKK1fDW0F/8bXtIBwehzqDoai5gHlpvM+pO/aIUDSgD37kfq8aT8I5XqNWB8mbeDepois9T1zTmnwOuXOfYh+ou9ZTeu5BpW5cKqtwD7vE+A22nG0ELQrwh6XLmid+ZxGdDAfII2+u/mzGFfWw/BofqvtWP1zLdoHn8Lc6Q1LAEa2q/Vwd+Se7R5nEpkogYHXN0HMsb0pGq2VwEQ374JAZkJdAdGZASRuRklEuJ+3uLIQUh5BpucDJpFlPX0fOuzp3BufaelV0w8hCWbtf+tpCvTuJ4EsfsyqYTHHzzRplf3N/yxLt5oS/Qa6Q1XB55JAXqLRV/XrxkJEa/9A5vgC46cyVa5jl+a7c8mUsfnq3x5FwuBDejDKAmiORLbu73R3CGeB66IPw3KMm+EuFMgmmx5Wcf25uMbd4/C6ZwRo93zQ6EGmtvrJHR986y4qJdsGrYON5pe+UF3U0vHW0iu5REV2YOSaCqSJEUEB/+6mBIQYhiV/WzMPRlkqA1eqCd5AZ1wj2N5eGDvLcZ2cgpG+0I5IdM0G6CMCSSqPUxULa3+TYmmoyUf0/EkGvz3WSPObrN8dWwVDa4SKgbeasPEznZ9UJngJ1ckSpdb3zfxsum5aCrM6fSpGCH2+ZX/xujWtCiWdO9qKFBdpwV9o0/Y+MDUlupZhPrcNrbzKYcVlxZeGogjkmj+3Qvon1WEd3b5vROZ+Nbun7FobX9qko+QemB6jWyT43LkXGwb8dRUKCyAUflge0btRQnT/NSg2ktqimI3CprvC4ssCuhuKSfrnDwcsfEfAOnTxwDRsrVS/HUCOSZ1Oc1hGLEVWtulje/m/1ONy9fY6yZ7TSiHfeW0njuKngWdFXAXYe1QaSP9xrA+YVXJO8WRdK9SBh5Md9GV33mRtfT64nd/8ztLg9kPfvd+DGHzW7UjLrvkXJgYnXKANLlEYm5pbZ56GXSxPmJLdwXfDjIXJDmCLytA2p42KOMjXoEX9y+uP7HA9FdMeE0eiNMuFRuz8OlSMWEQ901LCjJgsVXjHrLuWAZ6zNa2iOy+9LiD3HyIbrec4KGpuwyZepgZaQLHcawD8vF0BWxBcZbOC/oJWndA3ykRMwMQI0WHnfeNjs5+CFHIMAB8VdKuDsxBYpe3wz0YfMx6XLEl6Up5nmTPbE4HHfmcRGrkYFo4AfPDhGnKfYZdcmnkj82AYlK3E6h0yNh89ZDbtaULJL+KXiAYkmP65rzYbtxCO38jye3wn9/p3UE+e1HdDN3S1xeR1z3vmA/ac7iN4GDA8YGG9DEvkOV/1V+KxC0ubJwLHX0KM9kgOHPaazrQqlC6dP/sSM6rFcWv+p4tui64mvBOMMgwrWNk+FkHOiD+jCKiVmXyqC5aYoAf4hMA0PSggv1v1gYzrfhYFGZCDzOBgA/SC74TjwY4t8dHrHqpMnIaASKF4C7lxgzADGBv5p++5nIlGBy/YSrl/DffM1Xt+/H6SOpBK3FAmZKXrtqtFo8HoCpEKlpggkUiM9Pdmb4QVAL55ouXZc+zDLxXeCwb3s6ACVGYRRC+GSmTpPJ+UG6whpxDDzhXOeQv7rG3ixKrrpewtXNaQDt4jklgh3XDul3PgUdKyvCe2IQL7ZyGxl3CBKi4SJDIbmVjWfMzZB767ieHm0B9ahWxfvWG4Umn5BNbpwDsNXbTtYnldjLtBT/U2J94wSHKEDJxKrlj+fNhI0OsTyOsiRUsVmnn4ZKzF/TvW0k1A/w4iJ7pVlPOicTsmjkOuLuE9PYxgUp1nOmtCuyN6dqmurpr6J34JOLNxkaMgYmokZRUj7BHOQOeyWxhmfMipI9dVMTIfWy+SDLSwf7JOJIEJoJQYb3iyfM0vq/flM02QJtpr3wljgUFdzrm/0sIkSpRfsg/cQt1BFl8NT04+EgfXc9KjDDgAwc3/4L1VZ07lVtqDnBLl9zZJMUAmaKC+CxpP32CYo28rlkGfbGQ8hRymmQGadNPTIT3I/pgigYf6x2J9dxZ49MQTjW3rGMS/kRUf7YVjcNWwMULOATm++8JQ0ZCwJftMMbaF+vOb0/lYmJ1ckvdF0+9lUy4/7nCpLZ34avc76kkfAb0MHH/j7EViyUaSSsQg6SdqULISVz8YmHpjj35EF5r+SagtuuSB1Sg2jd+rdTO2ngPVTNPNRdZP8TPZZvsK2Xa8pfTGiDcda1eq7T9LilJEqaUznEIiHnD93Xw5OBp10cNPpSgzNlwFdxZuBpCAR7jiCR9r6HYT8wcHyCnDDpQSpAnNOz7tLsI7FtQoiYEIrB7T/8VNqBScR8rxds70WMa5jZ1pE9/Melzem/SWLYT0Dfyup3w22vE7LilwBU79HISXzXvJUvSC6V/Ogs3aiK1AgnZY251MD6MYDff8NVdbS3nztcTVNRBTXa1J/3WX2ZtAViuDImc47TykwSJxUwv16LUEHyt0YML/FulM6XsPtlT9/WbmPMJ+2iS2T3RLKlpWBo6KxfyDp8Cx+14/wldTOKKugxfD4CUAqPSpa7MILwnNA5ob58ns93GodW+rbjRSJeKPiClijyokFxy4vcZp3AT8RUB18n7mXHu1elQgiBfuje+L2CAPEIFQqtXZyo8K6R36wqcOmHsaBB6SEueM3ngIIwnGBHEMX3kWbetgkN8tyJ4r02UiwXebQIx/0K2EZ3hYAsMG278zBAWWGTQF9xe4OZCtVGG7xhoApseCqO7uGhj0LbSIlaLlu8QrVkS1EfICa3Z5elvzfUEuCsi4PYK9MEvHD6dVhFu9mttTnSLYIPkD1mcyRVB9t/t13XQ0mCmh1NUdCrz2dOePgbyV42ur1Wjlgm1Lbx1KeuFgZkqofWDx36J/9azdw3I4kSgbo35QIyR0ZwecjQD+JAvnS/wwQxZ3t2ozk/LPIgu8Bio3oGlcqE1J3RpbLrvkHufJKJcHWqtcS+pCfu9V/3Ro16+T0kKg8uEeOe4IbYglqJfNsCAoSsSZQEc1sQO7IY0TSWd/LX/30nBOjWSqJRCFVTzwmAkLhMsuyjzF29KWxRFGLY4FKwNfGkTnzqkBr+qCGmnyIIhqo6PkvZHl2yujihF3wTJHqmTaETUxf5VI+HzzBmgw08GOdnr2KD+oRtNle3hVrQvrsphhLqaIrDO7Iti/EVVJaXTtOwjGham07LnrtFmEgkNA7IgfRqAlSecBCvuL2YMJ/ZeO0zf3wcH9WtkZjtBWGCiNrRtBIUYME3r/LGOfjPovGUDMFwnYX5K5IMzMmCC+JbMBt0RoiwArWdCrN7RDv9VuRMuAwAfLrXYl+WMCEd4HmBAgPf92h/3T5GUZTjHKDLsVFo51Z1IHXLj9D/wZx88dmYujzU6oUL5XeOpVHrlwuV2FyrHfHeSlVU83nyZIvmqWONAoifdCV3jJJHAdU7PcgIWwV/38L4AuYU+yZkJyb/U/lmafWATSTNipxOV/95m+6BfKWcofQvFe5J+78CQ+yGOStVOFYDT5pxNhPn7ZSKTgNOOmU5kAfS1gIfbSpaGzg4LWiQLj8Jy1cIkyYn3+5RLZULSmPzCzducEJfx7LjQiWIz0vg5daiTmqzv4zy9hkCri3xo20MEk4PgbAwXEFFnkyM7VAIcYkyjHKPSS8Gh6L4aPCZaZ1YvcotQopMveAJ0FUDl0Sbil54r6lNXlY9totS0x8M/HeJnvgJUp2shhFC+gxXLxSOi7rURW7zl+kqm0sKonvgC1x4c66B6JSV0rbQ4GJbU5GuopC69qLvg43DKvuCTQXVxKtJihpPLDXrYGg2Q05ITgtqAKmcxNBf1tfeXDXKSaJBu58Mwdv+hRjZ7CA1KHScqViuwTj6hwf2vl9TQY9eRjVRMvbvfAbthWCPV6cBr3cgAHh2dGx5nPxyO3UDaBlHPpTEOjNIB73nN/STZr9swXCq3HBLAOCjggWxfpt4QA9JxRvln/Wk422s9RHMITRFCJ0JlJwuzKuM55bPSYs1cses98HJA4W9oVZTaCVf5y/RO1Pp5nwBH/pb6YMl2mb01vCARoAsXKcajSGyPP30EwEtrWwVAakwYZhksvSfjjnA6towzdf4wsePyBuDgBgS6RFiGtIISC8fbOHXlJx3MJQKUE0ZQkdmXLE3OLXfLFcsP7GZm7DBSS8sCugjdOnygACtlkS0MS+ha+uh4I/6aor/aUoZX/JwzGkwuj19w3HOvsGre5gL/J1TeiPeObX2b/49whA3fqwazox0V0AA9NyXo+72B88xyOHCRXdewggmJxbbk5cP9WgjGluvobWkmpWpbqZ4EGN0Js5ciUFwnIUccmPpBCr7D3Au5A81gBM6tSiJTkE0ACvcQG1Ns673uSrxEUrzcNGlQdtYS+NuPcZSpSUrmg6xNkqKRZRtKFr7riXXbmTfZFk8Fzix/+aBFmzw6xGjrHFa1oxemZ0hQJPli3PHb7YTvV+MAEqix/ToD1SAEblJReTAlSYGf8fftXMfSdOhZcuaKyQZ6JmjbAZZnGO24XsN9VxMUFF98oJlgvFc0ooXZDZoXh5/aC4vE2lB1LEnBh3labW3n8iCm1nawRUzqXLIt9njo/TUbrGmcoaFoR4HS1eOzzrqAgswl+Q1JoCIz8zjFRfgHZpjfybte9lHfqXJOLO7Bh2MbAqAFvmUOYJ5BrnDDebfFknucbvs+OGKFOh/lSxZou81IKHspY9P2F+GtlsEpuBVO0wprtkAy+OoCuGf6kuo61rVBWWqJU2kkPfo7AQkFTySHY1qu20t45T+9cCTwDV5IC9j/sbXlwOaRRWiiQrgfOm9wxyk3aLg/xqix51y/tv0LpElafnkBv2yyEq0G6z8rUIvhh3ScqZciZ2H13r8M946s+xqD7tVAKHGw3GUvPLYIt2VAJozYhtTjSM6XkWDUMfOEVDjwGA+5qzPauMKe7BgPKPtfjOty/KPBHzM5zd7DLtErwUSZKiIu37sYEX7l+9jXXlqmEbsI0N18faZg1mXwJuhlcl7voJWJTBHCxnoxFNmgNDjeTkL0FgNFilgf69yru9/dlmACRyrxuIglz/sx0r49HHIlyQ+MDC/nW8TzFVuyP/o+U+bOGX6FNx7Qe5DckOtCdJDNjA33XxaKfCmXwTlS7HStnS/YWNjR7+ZNn+YpPkd+Iz5FhXiSOWX9OywiDvXi7LN/kaq1AOndm2zj8pMIlDZHWrTUIId/3V/QIN4ACErthVAlImQfCn//2yCc07yx5eb1G6/7yq6Gk/VsjrSmFymFxj+iFbAeiScT6fJljl/+r9uJn+N5tKb/DizPT6Uil3tNTtIp0v+ENMjozalVxrhcvuxSpQCtUYJwHbkQ96QNebwbyUa6ksTsV2oGawp5X9B5ovt9xYcF6kM+8H3qZ3CH8qksA8LKPbb+vDfNsCHtUh1kDLktDtSveAh6u17CfDIuZcZE0d4CD4w7D1ycz5hGhLS4JtJRSp0lfagvkBGH9BB5tFtVcUdkkEgEPy0BBaD00scOt8CU2Uf9Xoe1EYZA8ncgqSSHtY2FP1QI1lgfWLIvhO7dRprCxZNHb6XZXwH7FIdr5pZPQw2M8zWMjNNimtUXAtH4lmTdmKaMuhUI82w9gYLfWr7n5U1oMyelhtmPI02XGhQZZmIQwcitMea6EEFTEMInXkEXxdTVum/98QUA+z1aenW8ub+kmqf3Jpg+qAGjYZMAoonHsSqqXzH3LwaCmpzf6fnvoLZ4lCE1ps1nQDQnagWjs/LM78OMOeqKy5pE7GVQxBiy7qWPW29cNk33dyvupZiOQRaFcY68JHimcVm/47znnEVihYhCZWvT6p4EJeSE4ihwXXnDoFloTVS7haL2YjNM7AHj2ehr1DAPvUt4NeOU6PQBGu1pJq1WjbyyOrSRMp/dfibOkqM7Ef885fmrFVYHtW5fQZowbY6ycNXtEqSeJCXKAouEly5HSx/RkkcrgU4Z+4JhGqmDBGguDZp4SfXsIlLE2TPOwdpKuvrh8F6KAVlf3HgzLtaQQDxYdqVqd4FvQMe0ZBff56lUHnTTmRQHnQcRx8vft/vp5D02CPrUH/5p0uHGkSsul5Wng24jCKkqaKag7gdl8nCS4//8eKA29ms9Twv7DD7VS0bDmDyrgpeCTeynuCHpVwsvkU8GpiTv+6GNg50F4zYlTGCPS4d0BX4FQwqGJHvWIimKhOClVIcb5MQayGkn2Ync8JAnDoI9UrxUnQa1Vysti1zcTEtdvJ8EYSCm5HUD1HxVTFFD9zNkV/sN+Y96qh8svYxi9KNp+h0Yzvag94i2zU5RMG/9rE/iYA3tVa+yA/GsnrOkqmn4wCReff1P19v2qM84lGBIMWqyRQvwdHvAsyUDumw2QYszMhkP0UGPahFX6WlOnB93YeGe+WyPunJd8X8VhIqxwzpYuF2bFFsnVQSADsJeTgDzJaFpArPjTshPxrJ0OzQIDAp1bwiBWoMn8fk9bMQtorvsW9X2DOHR5iXW1DVfVPyxXf8gCXQZ2Ql7NFrJawDElnKW7BQsMZ6FYUj5MUUjHYkvPdrDRs1CgJv0o0gX+mI03bGvVED5DkS0vvKPKMpwedpXf4PjCFB5UoQw2zC612EQKI1L8HrJvlgiHNqSA+ra6k3Ff8jcHyncnOEgRMgqoKkOmYrc4Vb2tI9p0D+0tKztWBXqTTNUxNJj46uNW8TD7TKe4OmCV8SMMjX36z7BZ2J0qgZPLIjs08O3j1g8Qhc+Elpcfcw2Ce/SYSbHotMpcHf7uztMflLF4WhjBeCIIR9I8AKw9dOiLjFm28iiCvlq6Rm7GWPtAyMhIXZWx3vmX4aI8LJs5mCtqd5ku+NjtXqdFgTpo2aRCiP8NfRc8ctf9o7LGaYKVz9bzpe9l/9bXnBAo3CpLfvXLI+pLMnp8mAe1ILlW1Pkf6IU4iFDnbSp5Nvnt9aH787OAxoB4JfGx7ec0awdEzEjVEjuM4vwHE6eSPExl5w16/n6SsnKsCL+nYylbJTV92QQA8AGjCvcBWOP+sXDnU1vyYZfgzKpdU2CtLyRi/FsMn+3qU797YRZNqbJw0CdmMnrlk7KlkCQhl0fUhq2RA+w3ZxvpUHsI6QaGXltnSiIV4V1yxSYui9lBJkDnPs3QEVgN4GWEHbo3s3qxV+JFi1SRXR5A3PDxOAEjwFPHRrExbf9dQoXF7kfG1iuDn9V+m8u5a9TY06lbOJ7WKCZMAZbIHkDwyuGzy8vq4PihOVDZIIt5KzqJH9z8jg+kAWP0y+M6EnTaPsf3D/QuFdunW/RSrijE5A7viIymSdleFWtLeJLGL2yp3uTEtgVKuZQjx8qym/UI9NUbjUbJU6ZPaAw+SAZp6sx+GS/XP9yP3jo9wu0fCeRURtMEPTz+EYxMtkQt2pn8pX0uDJliDsBDN8UbH781W/mc8FI83Q7T3CC0wUNIeB5Q0n1l8b5npYvWwpChrDcJWz528krXflWK6dgtRnJLUQRLO/UgaiAonc4UX1EvngEbXaFFzcX+ubKh5KYONikyIOMs4XgKPu8+lU0UfZnIRJuEFx0zgrYK5Dv1ufCo1947hJLgW0qp5ku4jz0y8EMEtgVZQn2v8ZMfadZYdUoq1So/OEsu5QD4F5ruoSqJme15K+GV7qYQ1gpJKjdFATSwLWg/Q6FNwgMoMqqvkxn5s1TO2sHgeA/7I4EIq+IPwIW/uneURe9kSuxET5h6n5IbyiByJNEaX137zau938h1jAVY2kwKR8xNj7QsKvGMNoBGS29GvxekFMNGlm6GFgWj+KfIAaycov3CRY/a5JrOy7pBimz3562VHqGzVXfsJrCaeL58tI+Lt3SAyohbQ9JTHCj8oyq0FEltk2LQSCc+X1GtpuHLlfadyUNsZPoNhFYf54ibd3S4gMzg7Gwn5N4oOlZiYqhfEyHaAVkyIEAqSZTbzJQrJcNxXOFafIvH4jvXV2UNJKeSHlp+nxwvKcdg/XtbRyDxos9BKXefP12l+vv/LjtK00XJ4h4FdmXRcIYX1sxCrBQ7Nqe63EUBVNEK1vs7TZQ+fm4jAjQ0q3JkCi3bsu/UTvcq/h9VhtluZkZpRuNKPEi8jyYhpkT9+73H6kIr8+wxmS5KLvgYk8XzRMjrr47Op+nvpFhw+x0lEg5LB4NGr0twvEDkTFxngTcIcw1qpkRWV9yPL+g8HIeWKotQBukoBXcirWJdAHa0hyZJIVq/S14Qvz6M2JA6HL+gr6PEbsJgnOW944+pQFQ0RHpeZVLqT1gL18Uq/hA8KfNdVUCTik46n+5O5ZvfDTLXqtRu4CLqAhQQLLB09t6/9G6YkDf2bneTKB0NhaV6JXQX7jfRDYZ96WUuuTgXQJ74pLpqoVD2sWtue154CgNgZAggIc4RloCd6ChFbt92EyKQonoyfa8kQ6TXdA1Wj5FqPnX3bPmvKRFFcOLd4PpFSZcvslSkeYkiMq/qnV9VZP/uJXyKb9JA3fmSPpTvU8PGvUyXdI2SZ1E+/yzuGkpG0Jdl35FgKnuPu8K4rSNGoxmzwPAXEn55iNi6lwJG3mEqMMPQSSmi4GGsHhKC4W2RJh8WRFJvEf0NH6WVThOQ9P6TfJgC3x+ugA+UBXqvMtyXBBSG8BwneCoZzjA0osPzLxiTPm4fIyLlQHYvALYTGrLw+OVK/OUNUJGG2bHf4cHlowT0kL4c4o6XtC/KxC0agFSiUQUMzOSN97//Cn4NdoYB5TAr3rYhbHTQiYYFEB8CUl9yqWKMhrhM65/BB6vdEq8oZtK9cb8s8QaKB+cE4PWAy4bKE9mDTntsrO0vgfm72FMspo0+w4RADDoQSSVPBECjgJfsODhoNvfFSxOxN3V5O6KdsV86uQtSk19/+e4uVCJ+oGznwo1xl/Bc9Swu+nYtZu5K/PGFuv6xLCP8TazNdHqsSawkfY6SbLOElW4U6/BTzsRthPugb6Hm+H1jfmAFk4gWE+zJElEr7sfbjUcP6L1E5OM4DCRYBGPr6Rc8I1deFF9CcUV/F70EaVDJUbTmds94MHEB8IGTvPhLDDutidvqOYyZ3o5igthgf6Fc6L9T7aEBM0F7o07L7VQgs+omoIx0HjevSZNK8uItDOYTl/PpqiMvclZWDUY8Y9cb4ZAFGFLuQUvJ7yZkutw8jLDRfnBAkBAI63rgGqyvwHj933gMSGIL9ZKipFjSHw+x3n2fuF+XXiMbu0GTSwxxAKP3a9CBAgrJe3BPk14M6GOxmzQvhYVM9HkYwuxwZVWARjlIJJfczh1DGd6HzUXp93+74t9yWj9iSfNMnD/tp60Z2Sh/XlZHNkGs0Cw5o1LaBVl7lsTyZ3y8J9O60W4HY9EQF69UxE/+zhtdAVJT58SK8zkSf5wb0RbOhnT6aH4vXgEo0mZ/bBGf0YMw62VFntYaUS6UYfyJglz7M0Z56DL+z1c8pzmqNc2GJ2vlSOcL4aaLZXmfAb++6dB+uCjPEJuD+eTIsgwJtZSm+7bpfqE8SNZ6BKjgrve5ejvrvVACkicF7SLgJJuh/+qGXjtP10zfDumjL+o6Y2lsnYDG2qVZMTQHomeTEKDwZd/1aRmiTdAWGGltW95dOGde6vgENylh61TDtVu+b8TT+k+1du9bAfIhp+vnMWrBMO/k3dqLsEaHpzOR8RwGGBuVoM/Q+OfXRkqXAWVLAk1LHyc8a/uVl3j5jWmWHAhTq3EvAUJ2Umae2moLveJOAg1nnBDZOvsbtvL857+HThdv8WGMHQGIWFsBr9UxRxCldDJPZjP9k6vg/4tbviRt0CyryD8BeDuep1t5Bf2eBM+nDHjvPDPcbUwbnjbC93TzCVvE/XPS1j6O0DeijRmyW1AVkCRZxNPOHPOAcLfXfOCo1hRisb3EogEHr2Wn4H/yjfRt0jS6PL/K+9dfyYATYtpZQUvkfoSEhl7wEcdjQwJmlqYsiHEx4C73Y7XePdEPVkIdgymjFRs2vJCzokPCuTzCmktFvGoG6QP3bgCcg4yydK3C7JT6r8+1EQL8/mOA6riuS0dOVUtr5PBcVDQJ/RXFo86Oeq+1qYU/QErbA4g9+SgzVLxI/IPCFN31dDDz8wFQpTOAPDDqyLMiywQ2ZXOVW1i9F/ediOb/JHTTpPTMnpZw+MRecjfXHFOfOYP0mz6HWAI6DSGxHUilcdUXfzL/WPRpPBFNjggGtDeOKx6abkZseZlxrW1qoy+Bxy9Helft+3UZAoPjhyzbERM7hv4vjcB8+ON0EAmCS5V+32TkLLr3o1zzSnS//baeXDzjZv7Fnw8Lvvv9MaLQx5+mYz2F1qDRfJnDZJebpaCDetpQrzVNi3jEYEQ7OL1nqp2q7e3DU6ZUL84VWq2Fk4gRaPub22zlqrv6/LA7zZLs0j5f5A930LlwRQXd707XVNJ2QE0NTOSfPg5rnpRuTPG092SKSI2izrjKGlfYJ7jo39oV6rXRRMsN2TttbZFDB2LScf7kvrYq2VNGahjiy9nlp18kWRoP5xE1St9zjPct2jutciLU/GJynAuJ1Eo0mPIQkvg8enb6QkD/q+eNZ0w85yybMRit1X28Qklj350QVn1CyTPf1b+yI8vC8TqGDvDIsc3ZAfJhKuvw2f56pF3QdOjBOkpmNx3bA5hbhSaAsjzBRIbmr9sA7I3MjGld3fd/um9Yw9Oe0rf5KgqNixQiK2iCGKAZ+z0IknpGN1Ghjl/1C4WqOCFaoLU0/BYxVuwAREdrksoz29F3MTisOhXIdnFP7NHLAHtcvJ6/x4U2zmPDFCK3EuoWiorjfolKEy7yTsa8XwebMVxpum9U0R89xRf4Ri5kGzhL5WRKzF5nqIoVsJ0uYqf4b5v287HTz5of0K5oo1XUIBXxZ8HBWDUxsKzfLG3HLTgALwsWbzs6ESlkW5fgEImypyocs5fulULIvivBQL6yks6d6nDbVFxpSwCbOmtI3fO1yuXh/8I0Nd7QsmlycL7222ULN3kJ3dAILWBsWJleMeFPJO/e+xz6mguP8dueFkLn6KS/8WRbF0Inqqxie41MF+zKkZZ/boRdnPT6sFSU+JJgoDX9QeaFbrR0pFYN9kqWaDjyxbgxu+FIpNUti/6lTPvY/CwUu70UTqL3nX/tqqENJEMPMaAHNnuOyRWTHj+IfQf6jqzMb5g9tp2598uUKwfpfbIP3+tvSlI7Q1aOzg3rxsecFmSaiP7pSeuCew1todxB+ahw3s/sEkoLE0JSxx4vYgFJP77JoDe8VGVbggGIwI5Tcri6/an8n1AxEcXp8vm682GyApC0pGewLWvNlnF1J5pfueSh4XuCngLg2T6H6ukWxCUmORYb9NP3/lshJKu6B/zrRyc1tKUi0+dJ77TuCzdVUkhwSp4j6FUhFr/apz0TzOCb+2uL0kKbgasYv1I0A0OI2GP9DgHZB/tCVZbnZlZ9eBt4ZBmxP5CV6usGxmhpJfuzApT4fXLeBqfnUEzflSDNBzQLeB8jMgmH+0gvgfCe8DFjqeJcbMKocW47bRLHRCpZZepE9Qvmp3YkJEDuno9HaehG/4XqVWmma1ZA65bL4TilNZjabTDY/G+X1GL/lA/WDExV6pgY0FbbPh4to2exFKKGzDykkeECpjpH4BzREVNlMx/Nxdi57vdho67n/Jdh3Y+KjoiYYS2bojxv2amSai9QFJwK8kwqBxVD+CIWLV6gUG+y6oe0//NbLJgxvubCxd4h47SlRk3f+02I0GfSxniYUp6RiP855KFt69jtkt+Vcb5rrhn7EZGSzcTnOP39V1FoywlSmvM/F3iDiRf6lfxnzFoPwTyb1Cutx2sQaLDyKB3R08QtRmTrJ+xpFo+F/UKiUiQgfIeAjg11VNiDSGE8X2APEyV9Wp5xphmkosgfDX1lcmtRKUi77fxD8sUqweMT1KCMarPSB2f13gaUqGcbD+5uK8Ey4+AxPaWu/bM5JCDgje6/qZjL4tfs4Or5NmRqBmqbHSjUdb2xmdzzJiJxjEwrnhU+jM7Bfx0ufm/irjYTp8Xo/8zAPEHE3jR7mvA5Xbok2O3qdRcnOH8UOf+hN0WhZV0UiqXtlTjMgBd40FTHRjcmyB8siOe2GnXdAqxEORWkj2MTqofCYyz3oFHvKgEInHr/Dece0Byl6HoFqGoVco3aQaNyGyHlRuGbRvkCJI5MfgFfmIzMiW2+kiCpjc8ljaU3U+lxi+P2WNqi9EAs+6grh743Yj2jjLWsnET9BpoUKDRMnUCD0+PBnB/j8EnbaEwFTVJliobqXng0v0II77JA2sSVJ21m1K70dYvfDuCZVuYsOfvLCnirmGllrPww72BXUgKqj+PGaTkaZYQ0oD2d8Bx/DpjSEeVoy0B15/XBXEBQVDrA+lGon+WHLvkfZ+3ggFMXeu32F75AuYKW3+wnuopybecBS4LNn9GgMiLLk2xrhWn4Q86YmX6sA3d/fzCTQzRf4zK26OmW1PFPEgziM6+Oj8yfl6juIdYp0BXV869Yvh7uKqp4B0sxYuMsK10idSihReVCdwmrPad6r4GO2cuwCggded0hQ/lZA5CERMFn4R+T7W1VqvpYpXRDndHXMSGALOo9/cZLaAgm6i9dIVVvMbCUSIJjOQxkOHKZnXmOm+IfsrlWURjxdpy4RW8gIGG6N7hAzCE+uhmtXCAKM/TupToE/4HRjDd0CKfRCg4CE2bC+Wo+yb4Cv+6jjZlRgDZ5jutYdhaitaIbVpEXeF16ccoLyWGF0qE5K+6mid0/DUM2OAn55qMObbekAZVoaEn3hTY+nU+FtlgwQY4Va2bHxYoOLtQ7Yb4Ph+kWpoqjcAVCyxaqfoVEoCGAs7Ts1gTRYSeED1vtOC0jc5I/lqPSeTIlO6BGrZCo/DINAnYK6UqbkS32GCLrs8+XiQNqAOGYT9BC6D/0Gn5ScAoU6djaIZ1pRqsDgIJJY/2g8UJrQjjaCb8zvJ+bPhYltX1l1ktOTqIfYFu1WsTitnazssku7rVnfLou2lXx9/JGEOcz99xhJTQ7wMA5jY40IP3AYx2JxOQljiBPbiMdMocioKce1Yn2GfHze86y3wn635cYiyn1aVzA1CLkQmbAtS5/x8UbMpg8vDVJaDy/CPLW6asl0MmEYedprJTxX7eLgtZ9gcYXvfmcKO3WG8/CRcLFQXt31V4Zb7BdwgH5Lls0Xjvz5gHkiE4+qBefVYhmO43TuGlkJE4tudJx4zE6Qve5lGN3VKZKKPL1d9fMnrdWZWIEs08TKtyh+vaJmq2iUCVAIj6AKnXUni2oG8Np/y/HoYzIqK5f9xpGSg5+VfuPGWNQNOnCTxMsabHGDnl2jo/ZeLPg7qHChGVy6M8BROJaOSL8H7Pp1jsfFkfwknTU/YcQ6Y8Ov3kH6QzKeVx0HtfYsDLkN2v8BiDPQY7q2XVwk47EMOgO+fN3KvwM2qxh+RpdD6R6Ee1NgbbIkaA9u1xiUlv8GtB6cyQ4hin+IOl8Ibpvfi2clh0QfDCj8o+c46OtF/Gfrv5muVo9HihSBYcHFiS66lw9zDfYSFEnnyKUEhVGei0MMb58DZ/MDioJPJOGCXdiLeTuk/XplG9HI2TdPWQU/gsrkCp1yqe3TCtc8qDDB7NltYoRA1FVGdWQOqlQDy+gXxrmyPDROmlN4dBJGzgTFfoaNqYFbfHd0luKaE+njEoAGAxWRRsQrM+2TxXdaAw5q+N0KJ8Z+Jw60kAve4Oe3AdKppi7iF/vP7mibk2bE7jor9po5XfWSp3EKId3kf4iwOPjBlXJ94014OMC4J/IYIyJFtfwOim+q8uz+LAxIISwrHv5AcYbZO+xmMW47lV59pSrcYzbUo2v3oxSgpDnow1PkQm3gz16N6yYHRWKvH49yJECZxAYFE3VmcY4emLKNa8d9z0m8NTCF9Ht7W6vQveR5NyidKl5OynkogCE+5wikiaOJ8VlsEnP4ZhVo2Nhg6E0vdE65CUe40YwRg0NTTmIoWQER0gEHjsvA9ghBf4xAHwVxCVBmV0rjQR4ssSbPic4LJFiBwGDbcz4ozvJ2wqmK9zA8eEIEtbhQEgV+oziar2lWA3SiAU+H4X1WwfNCt6Bbcsdz4ZvE2/mxdMmGFFPhgKLAJ/Z152VoDRpbFBjbKIKJzyAbGEVexHxSVz4i2WMd2rbaazEu1V/prDVh+46+FTr91TVaA6MolHuCUfqdjKE51pv/Z3gPHqtrvpUpAMYKBezhTlqTq087f8JHAkFzvzux1Vkx+EMhSsQeWl8xhRIbHD9dFNEhCk+RReiEQ6mB32RnmzI2TH0D4s9MCutP0RLT4xhPgiR1Fsz2pnWToq/otLYidJV4mXsg2wGe7gT0T6ZxKVuP9vux6zL8Gmm6LZPPM+44S/JMllBFcjrbN58J4z2blFXzR5tkAloL/sT7Kq8x0S+R8rqflJtUAODQD0meDDnDsl6PpWrq5gmfzL/MHAu1xyZ9IpMRG4plcj8XPsjnv37vesXkp2bb+Nz8QkKpoJBSZs1t4qwVOdCXN9AQQThytJWLBLzMdSKyYqYUX3X+ZwwmSJF/1l3aQuPASdp5EGz08UvXbiif5KQDBgSO3P2MrhItayboPTT4LcZmuO1JcjRxiMKrnALmoco9jfO0lDBwTHSwgzOctLnrHvRjr5Us9x6KTOk1wDDt3k68VcDHsFP3HmwqSVTZlOEg3k15xxTw2aFCh/gy2jMVUbbjjiVEM6kgsbtGpU/s7vZS3Dhol007nM0gA2gPHDQPHM7AN2x22w5Y3zD7yH+OWKLYbqXU4ed9zLMbeyc4blZuETq6vzvXbyvOUz0s2igO8uiE08A57+KboYUg6j+tcCAag6fd4qgnpGXxPw788QcWfN5xaKQLE0AHHK+wTseknzLExSuq9pWSmTwBMTaOVpxtNLjIQ8K6Ly+TTLqG3Ar38yyWTH8J07bmUIpuC1DGXGePBuu3VlOhZafYGBdd4oKL8XDfPAP4QvD3Yp5dLKsnhSfY3EGskvrbNXQUfRbk3gusJ5icYBrMoCNvPyix+3Pbqc1EgtsqStGiFmP+HqrcNIUU7XnOXIqDT8FWNPHkkZZYmmDLLo4YeH2aQqmm/jS4NjJW8ddVlQhoCvu1OQ/qJKiJNYd25ircMewgd9JEOReTs9o46Su309/7zDtVpFqQHim0DKr/YUz4B+AF5FekoUj0aYYn3V0l8jaGhciWQEsGKCe5i3MMHR/Gs6WqPZ9zXKXlZeDCzUqL0drMIpSuTek1SruoOtd5i0KTD6fr3y0exc2fXTtTXDukLwpNNkS7233zUU4WV0bvNyH81cJLfXXE2fczYItLp7wcwS0PRSOECr8wtxGzpYLPv2fSdsCrG6oIUiuqkpbLDTM0F7Ovfl1oMuEUSF3nEFmuy7V1NaaoSrMPNOWqon4DcSuRGJNbd6LvbV7KnlLpZikPLqN/XbRAPoR5Ewgl527WMsBzLdUDHycAc6a2stuhXuzA9KAf0zqu4aODuiGYSkfEMY88FWUs1JTZZBX9X/IaLhKMUgKwJrSlfoXiaxCOkLgPhM/cOC+7FMSVjbBK4j1v13J1aEkxuZH9Lta9Xenda/5RfNwDwxpjpi3U049jxpweYDCDUL4/j7FXFLp0tuavmdFKip9Rm0u0XSATutzxdcXeI/P7zF6bFgqQdEfBE6qW9ZmuwvkEv0emkCcqVrYMA1IXVSmHiAkp9lZvQGLk3ch1b0wcME665LQn63iNLzUvlZNvZW5rXIXKOOD1vJzHzg3aekrFcNQbxvNvfAMuf1Kg39/NJVXItz0jKejpltGj9AujpOOZ30UtlI4CSYr9h6SQ+JQ27P/A0NyykJZEahtyiCnwVHZGxAzSFLNEMKO6fT+6r6pKvKh9Rgh2yeMj8ypiRWIXaY8Gwv0fEwl/1jpbMpA7Mgy6P/lkP1e15NAW8/an+Ilz3cE0s7fgivYAyl5ZM1LZrXkcgFF9o3E/x5mg+iUft7mJ+Ut2MfkaDLYjx1hbWpP7wrVOBH1htnGo8ZQn8v2q6WnwryUTLIyyzHb7GRKt6jhnOtcKkMk0LkGJ3NygITGo1v+Orl4wXc3YsRii8UI6UUVt1ydfFaqTR3jGv+bfkRT0keYC427dtYMC0bALgdc/qfDNteycHlTYVrWKwbJ7lQzppgKYQyApujx1Uqjb0IKgmgBQxxda7gjSTcxT7Cgbr56yGOa/yG8CO3zlxyvpic9ybjt5/GB3/IOuwbt6A9sC+pwaCAo2QtvA6MR1h6Ur/FS2EQTWPNE397fpafWlRCtBgghW4gnRM9m6kIBgIemfLnxiVfLLR6c96LDre7TfibC8f7zIvh/n0ayiKaTx6GluZTOAm7cmT7n+Qq3izYb5pJLyw4ZgjinIf5hTVx6IBsnG/Qy3E17clk+RNwIiK25XV6MI536F4Ctd/PHZs6NjwoiNmvyoRVmsNwi5MADk6x26Y6tNsWxqG4gnQ7xAPcDV9GFuKtFtRX/sEmGw0cFdyj93SDvSG5jmLq+KwEUwkypDYcFjB7M2W3laYE7qJ7BCKx4O2brXRO33z33UFC6x6v7xjU1OsdpZeevHEq2uNzEQ7rmoT77dd1FLfp4mKlePKArkzd6Nhj0j7DwzfR2uVbzv5Gi+jCHX2w9i0pMQJDubmDVE9l/9+8sskhXXsOvVL35H6tAwbHe//XZk7wvJPUorM99JxuwuJYNkzSDdcGkwP6S41Uh7wKTmPCgNUfCNx09I3IHpu3+6JtGpcPQGSKqj/vHTm8yyngjvxnMhVYe1Dj3TRteubS8Q1ERzsEQIy3+YtbPmrpPjIvRHhr8nUgmP8cpZTLRHaMV+ynm+StHo2Z0RvNknaNpyXLvWHbq6WMMglrXm64k2fyrlgX0LbhOEV6YZU2xT15qpEHjsPXVTTDG19r0Ffv3GTfbyfW4Cp0S86YiyNpbkqQepEqgw/XlTMN2WcZThlmECETXlgzd+wbUP4y6l03qeml45f6rBoeqjNs+Hya5bUdzG3ZdNEeo7cnjphj70xNlGm+Y1/vNJG4xe3xSb2ZK0rhcZDiAWFaqfgIza3exZW9S+B7uxu+jHi+9DD+9e9gs+DlyuOFnSCqeTDqf3ilmtHaefmroxrEPR4lHYOExtPw6NQ02HFGnSg3VrUdDya3kDbMqMrGfwHEXQxWkGPp/vQUTvZxiUZ1qrRmVo5TVS6ZFKhrh40XiyZjDaCyPKkP39ixfD5dLmncejTHa7vvp+5OTNqgOyjLlrrTMlM7MPl0MXxXgDBTraFjuqqiafBObbmdyOZFcotYIlFiBCGmQG2OsVENnpYkwJ9Bq06sHG4ecS6Sunp5xHyTtZOTRaM1uCWq6Thhjod0Q2PyJ6NM2tztSqzPWameU0cHe13NWluh91qeV20/PrhpM76GyAtJMHOL9ZKK7RVyWpLm3972ftMozaWZub69PUGsKxZ6jKsA17d279fNBF+tb6pkLb5TGeKNJXaYjUPhX3yFwco/bUyHVs0Vm5xTPRUQkvg+SOHwVu0yYGYJ1gLwbaI2Ob5a8IKGjE52N/7FpxnlXJX/9+ewq+FC9cFZLcMu6tCsjN6xIXEa1UnQaP6yN/VP+Grz3Q/1zyYFkUEUhAS2BoFAAfEbATq2IOMJs8C7/N0V/nTYdjAIAeOC3+D/vwCA/ULuCcEKhWzL0q9z/MdY9OwcbNEPcDbwsC5WWbYxwDkAU29ErI9Bvd1uSCbpZxb9mxA7u/7eMbCuCK5C3ie4zgzvVfLc1CEY+oyd72/4fS4uu4xTHSF09TAc4R7HHadXuF5PWvapxHeKT370hQV0VtCNn4LJOMw5oj7OKJbJ76EFrUuaFufM+uyw0+Me49PoarMFp55nZxtP59c1err97VrWYSptVvXI8JxFoS+DO34RyUgXGPCJ84PesdnqhzgMv1TY1piAtF0W+GKK6N9epUe5lrEloIJrsxZoCYmioeyFC/cvtrnjm4/14c/LUwC71e+0b2JCgcSoLzR2Cz+NeXAJYa5jkrwN62PKKecHxxA0mVsXovpDjTAXf5k7vfgdrzQvVHg0NkwvzpCrh82vpKwAxxhnylY7g8aTPLS8v1HHyJ4eN0onGehjZB1r57wIveBrgXZYEt/HCgiuN1xEfyyXIlOSe/u4gDRLZG3p3FC0bAz5E8gFe9j5GLaNvCMkOMlxEYWUzjwrToCoBUi6r5Yp9oNUfZ2MqisPfrd7ZfoGnjfGoWYUlfmIHMa+bVpZZOLtF1jvUMU3mpkEMg/dUDJwlkqocc96G2oiRn2FDAAMgsrWU0vrWTl8lnFHWsS8KFzEddtgaPSPcL1kGQHKwhMDKGKRNxm2a8K78ACa3CIm265AWqkCaX8DzIIMRHlVyTILSCLblIypyKBFo9Br787QQ40JjJJd8oVKg+M4AlPerjwGC++1zxigVqwFB1STB6Git43a6xgJN24myrbAyYcWwe19Gt3qUsqS9B+vOfWDGIx5xGSTpH+Ak7giE4hssVD1eirX1H5sayI693u/LwlstS2N2mOJWZSPGJG2Dl4VeNMOCPaXqfYs0MMUGGEl7P2IccU+e4WnYavBnyv3EeOJ52uga7G4VIY8wWnc8s4UBChV83Ss2PtYiYfpY4yAO6wlP58OLFF3a/Ti+xCtKJRoeYns1pmD4R0FE7lJHXqXdgH9cKsILU1sJztXvgaHlGnJnU2IwnzTAhc7wrews5H/XqrAp+N2TbIhmkzb0fPYA3oZP8kcl54/K49BsYzUHcKcIyliV9r7Zx/TeyMXulUr9Ec8HR2NXSwFHxDCJpmPGlRC+Mbuw9YPqaaItHfUovNYKtFubOs3BWrLQw8PKR45ySdWbCqjT2/SsLtCxu0ZYPmR5dpX6ADXOKyDkaCZIe/ILBphelStHvCiyc28oiXOLPlx+MzZLSiKAIcTjlyjKvK1JsYblxZXv39uCrOdvtNpC5mpSb6BI3vEfeTrBKOidfrAFf0gcFjBPS/v4WetpUhuIE8ne2GdAZAIPaINzMsvpUwZCG8hjHgXTkl2E4FoCR2qhBJj5Q7O8ppBxtCpr/zcXR5Ozbh4TQP8RHdsVzSFTuvD66sO5BM1U57O0gnVMCVpt+DqvVvMWDrhGTNPdqBxTngYv5XmaUUpXL0q8e+z24IFqP6aNm89EEmPZyBjq7WHHz7YC8LTQLeaPqciV6siONQZhrt0xDhIrnmkQrFaPQavxWFZhh+2VI0migQqVaTBDkgF3xv1FeODIcqVEJcAER9B5NkrV0txRYspn3qE+pIfDBTWkf2ljxvKoSz2hzVNxbJDKDojJkJ0S4OB46Em5blpx6FSeg1h03FYrkA/orts0BdXM0mYPV+i8LyeJcyWU+Kns/hi/S2ULR69JRzG9aRW6p0/zQEErp8Xn7ULhV2mIvvhMfxFESMbgJU1Li5VXG5nqkyxf0DaCzyFEzWvXEYXCAGMGRG09HvNdXnafpeP4Fe3e0YuUQA+n+nXWQ+gR/ZKKaQgP6zC1gNvhb9HKhsBktvWhOCQoiVsK6iPt7rej6PSHe9yCQ8ivPMEmUTz6kxj0Wffw9+0qYlKQqgjWIjuFU5eCugZ2a3ab3wtMuhAtRxZ3Phq3s8Y1C+7uH+Y1Sgxvrcwd7xxkN2awQivx7uwsI3yWDDSeGhUxvaql8kWAa1be+xkvEWSpJOsab0DZCrbl/o79ojxy8yiOF+douXRZZTBRGtQLB3hPmJnmrMJ39471IQ0NeBvcy6RlKnmXS7pEcXls4mQ23dRIwF+1gIG0dBtcl6Iv8e4NHglBz3UCX4M4wECLv//8ndoqTpyJQvfRxNb/DKqkgz9VWMONZeHsNxgf4nnu5Zk1xedDs/ngSPpQoLNR4C4Jz4jFueM71OPCt07JxGGu79jbSk67zOmsM79s/PhNl7+s2bsKiYXCVXOx1AvdBdBNjpSKij7oci45qt/L/HQKmKeUaPgQ8qCaEWylm+1NJZ4rjiswbZXaKnTJlWywPIFJ91a/fvqb+4q+QGgCN5GNQmQe3ai3PQQ3y7Drt6HuOohdXBSjtuG0Fm4jS1HlA+fDbhhjOuedAblmJ4FSI25hgW99hb5t4yCKgSdz4aPtDndu8SOdTGHY7tJP4binlqgKPJ1xYMSRw35jdR13r7d/6Yg/9lMAhKjccmpBUdw8/3cKMUueQAQMUCVkeL7yB7mtN1kGFmLlCpCIR10Y9zb71Pw1mL2O0IEYhnVrCA5+lCvWBUvuYe1Xq79LhwHt63laZYeCNIXn/ErlmglIeDt1y3IRubx+6e8vNTdk6Uaio6/UmCQTxSIJtc8M0L4oWgr9fHeHLmOJ0CI+l3Z9dsVB23OnGzmzx2ZjPobfaOqknxD/9CRoqwVnK7ynVxup1IXkDRc6JXiDuVqQiD8cWFHFn6UD0D1vSQ9Uei+cMoVZjPhKv/qdum9QrGGBlK24QS9jiLyYGzIlXwcJWpunI7Vb695TvdxYLNAfElU1+6BoHPpjiRV5lxEo6s3oFa7B5yS/+KuBqmHVTpFVC2ChYldCDcpFcFy0FGIayZ2CrAavOAPD8wFAnTO5KvUc4gvqJ/S3mYGVeHz1BoabEvGGz/nSb4tE8BqRX2+b43xmzRMJ4jH/w+WkQo2fsulIYqXYWDN7vknr4dlhC1H9kY4JfXWP6Js9l3CQle0+lKdhM/3yf8zfnsCA7SavUQYZT3jL3U7acN0/V6qPr0R/lXroJNnzMBBNMj/24KzycT9qRYlIQPIW/xNlr/dIgAimcAzw0vhxNShmEGQn4Es4s4iI52XsbbynSSmuBMrC5EBMVM3ctn5IHJm/i/dv88d8JkWh3H3zFEItnCPHLBdJASSHLuax2CtDJPgBOKD6OEMbEYgoUfFH1+w192U+84h/cdgo7reOTqQznr5uSB2AOl4ZVDfbfEF87DU5yLuNW2b9m/Uwu+MWo6B7uCdDdYKfy5/tmkAh8Vx1aJ93Bkrabl/hXeTGN1so7fx8y37aC6khonO82z823+v5NhVZ5n0lhPl78jP7KKF29nNxmfgJ/wKmeskj4gFmKZV6lHMlDLOC0t+NtgcmfXx/bSnkGyL1A/rCnxlXsXHk4oAiTgUF6slCQJAaZ53DRvVsSeIY4xZytdgX0+FmDxF5zaqZDyqJlBRVZflavpctG5gTQ87X6f8RsNhFufmztr9+4gsRKrBtlVF3vU5+61RxM6TxyLzB71aHXemOvPpgv1LriAUgaoxNP2gi6yIRTCEdbnAzE7sMZREzYzUN/0sKUH3slZM5nUJxFqgFBTBrm1BpGq5fRPz+GgSIRzRv4IrIAzUS8JQMUcfjgXOB5qS8RhGPlSUZO44GguK7C0OxGfTCqNejZ3U0QsDanJGRlwIy6zAPTNxTscEcXsV80DX4916Z5TKazh4I5sPrWF0+OBcAMu6cV78eB3NIlPq//UzAdUYbDKEll+t5OszR02iqdkZFUM2bqbTEXsPOQGaB6eor44SxKCXE2YLBPnZnK4iGpAJxOnLBK0FDVbpc8Uh0jOHEaqPFVFXnqyXWd1nJSoIjvoYt1skXG1B57NhZzV/KqzKPiJThgLkKWDoEpQwPmVIPiAJNenGnoZmbYInJYW+qz2sb4aJ2v1Gcmw2ERx1rFG2foBl/UrVF1PsZU4q7v16Tkfz8wU50MJoyl6CXy8kEWN7RmPmafon1jHq8oyWPRiSARRmCpu8A2GlA+0vAbCCK7lbk4EqLVAq05Elqh74mYysrOzG8UYEXNLsS0LLbkORfqIkPI20oAQB2xPu7cXGyUH8ZpW3X17mrxHJ4TMQ67eNba9uyVU0Uxx395ZqaZ8iXXL8wbIblUnCwTTcfePVjJop7FHlMX5L7mzq1W8j+Fg+Kkmony2qYtGJacelTGUuRMx5D9Eq4dwEXhE6NFbhTgDp4I9FBbgaKhtwkOTFPviyfxYyA1H14pDFwzSNvCBO4Fq6KMCpTNH9K6EwQ0wTeLQgnQVSi67QEqQsbdioMh37xMh3TelgKuJvqE8T0OSiVTS/+r2+vQiBr9k6BxCmO7U/8r00c2CxEgPrm6pX57nNL+0E4x10EqG9e7W5JNSRxzEXmfnZQ5S6bNks3Fu4xim5mKkEIchAi89kX36EXnqRrmEXuQMXsY1iuqPZYrczjl/4ncPVif+aT/zIvrDHj1xqlHtxuqgDj1JsthsXb0+cgbY0gr/OYyJKBlR2ztpfc5e3x3L928PtUvYtsua9AI4N9qr22pKGdJrZMpQkY3C5ICjodAZsvdm9djHBvmbyKgXjs7u/jwBb7I4k+LWSEBUk3/4PdWbaJXeTIDM8zAhB3Ow+Ol691khqBwd30QOsAYmhvzgEWcu3MF3dosQ4Oi4xY7CpXpg9yIjOChMxS+t/oYm5hA6qNBoVI1SDAI7qyv5hnvRWTWxPp8NiBBKSYbWGESclIvSlfMJFWk5DyHb3uQZ/WrXVlG0gjIx1fGbw6SYriZ36O2d57CW1gWAsv58oKtXrMR6tU95OfGlvn3FYQyc4VjDaGFrlphE2D+gkJl9mKwjYUplQyeA1XTWT+EVCXLzGziP9f7wy0ZTSUR2/K3ch3G8Ao8+xwHt2agRdjrRP5WjB4qlvnQ0K+OsdFkdueivvWPls6UH3YnGUO6SSd8OF57DVuok3hIQbEG8hgyVCmgrSgAyYFwR6GGYRsS4ACQw1aKCkxnMg8j8FKGmXxAgZq9NUXy7pK/0To/UPs095bUj1BeR8YsFwHMA6oIHIeMoHkWN5UCS0pcWP35olgSCAphm5KdpIAcLorRj2XChYpLPwMjzMzwI5DfxaecHM6VqmQ1wlblLYnXbJCam/DPZxNZW7UyAjsvpBUcgHJOF9CMRHA92n5GYQFZRXz98cnBEzJLuJhscUoWSu28RKVUrbBIGvCOLELzwzo4cYxIecfyTRZkggOFYspC+gJibQ2IefT5edBfKcvyS36GUHZSdduOtiq8FwA1ZZZA5WX5S5pW9If1AEPNxAjhZeuuE5HNKyCggrD/NJmVRCXLlde1927O+ceI+Lqw1fEg+sqLmcGhASIZRTRt5KkyHDatfQ94ofpZluC8N3mqSWqfCi2aTIEVN1RNKhrJdWggk1r6p/bWFWbGGFxVU222fYz2YQL7JC21uMCDoenxiI+4626nFlUgQoZFCfWI3OB6danCXYTjKq2fMT0s67Dx1BNcuRoVkarn9rm5PyIU9uD5zmaeUj1YSEHtcOnof/U6nNrxaJ/WTMUq2h94lsB249QzwNThRtpcEwjgtpOW+Ni/GDRVuTLNzH9iTyx7i41GJ+DEXJ9LTY5JELPkfATGdWdmFO/Ottg2zgnwq7i7bK3W7ZGOYvPLO+lnrcUItgtjTRSLw4r0W8AVbmOsdsl4lummOYxNhgqxiRtOfKHfZ6Txw02RcAe6mdL0E6Rak4Yiqsym/FcuUDirSiJez6pEbO4IiSoKeb8PcKNlEzOF6hF7qGiIuncLG9LidUISoEp0GVOIjWXw2Q3UNtZNPOLDD7qaiIdp/Q9qZEFTO4mt8mpgbgp6QgNIlxb7TZoR9tpja4BWBJMe6Sux+mcaP2ysOwdOZtdXxkXwOa4wdmn56/sZiTiJ3qAZ1ZeF14treRwIvQ4MfcONaA215XqUIsZO3JMq3kf4GwqhCJFYEZhgHXnxGAw9auLd4C1xIUvukNWydqtWuHfBqTnq5MwOmtHvPT0ogsEtXtcIgspZlGx5KRbfSLzJFdBuONcOZlUSRT6kncmpi8wsQxiULqH5Q1+d8SanRoHxKQ+6MTWyZMd7rXwY/Zc2XcfIkUaqLQ8AKLslhhLecVchl0IP5rFEpSkYSjuCStMYV9ZYe0SDMeaZeqYUc55QGgSDe1oCwDA84bWhsSz0gBvORFnMav+QldoVSaPf108CpztV9Nr2rxYCxn2F426M9X7yrlbr0926n49biFBs6Bsp6Wkhbo0uvEkww1pQRDtzDHVO3c4eQQdNvBYWejwOamW+gDx2CQGhGSDtuBISI6Z85A4kHs3yYr3Tic13fRYbNPHuBrEXXXrN4vY+MEOQcKuEadt61ofwKw0Q+Cm8iIkj17uOyPptU7SRAMWWizVYr9PpSC2tg2EOzKm6u8typeR16cBh1GHoeRmjJrG0suHE09rT8fXTeN0lqE94zpbMGeThnsMwOHJrwvsHh4ZzeCQ2OFBKRMYIK1R2745BVmk9AwgQURn4KtKdzefJ/0tBn4LDnxDDAPECA4TPNvFlRUMpHnvnJC1aIQZhXoxCJIDH8nRavlxP2DCZpq98ird5GYL8SANVD4a+gORR8o3vexGzM8NR8Gf7Sx9zACs0skSdZHno8KDImb01+42RFPtiL9aahI/TFVORjPkaMzHdAGiGVT7TVFCGhyKiblpBShxEkHe/n4J1+44rwZtMe6RRgoug1fTQIapLcPU6siUONiXwiVwgq1+hzlHWi2YTVS2wfvKdiUyUzXxGqaz3PuiaSjwE7ZlQoddl4o3v7BaYEOOWdTdzU9SFzHGKaJA9VWVqCYiwGLGE855pNiM39/gBxngbHuCcU9lxJ2+WvR3WsDc74mFJnkNtuuLGQgvsZjtNOwLGn3a7l7JjI/rQD7Lt7dj/F63EvndmLldFzVZ+MU4/BByW2YCEF+oDehqst3XTBHLOAzt9a7ZC6jCjLCFsP8iObip2aetiIN2dy7KJBxSM3IEqCCHmdJMnYIPqaxKlAqfunLZxL5qeRMxsLzUgWVc+cbmyf4VR+ZkH2/yPtJSWwz5KVZtbk1iXpTDOoBpl+7qW1eE3WNSj1CRkBvHzxcqukIGim5/AiReRBhfYNcLGisvvckQp6yUYG1bxKIMIBoLEvWS6mDIEWexT7c6k14LHg/37dQ67X0lVg5H8AOE2pjs/JhSlvH2iWiNWVio7MCIsSfB/9Fl0+FIxWOT6bbi79Un9e6xTYCClDAoLJC+JAIfc5VMtq7asLS3GdtpxwaqNN2BQHHiWgQW9FS4RQ4E99i0iKSqaAeJWIVr3LiehhB+3vzO9Z8FXctRMr0LuIHuunynvVixBV414EtESg4nMqvlDWJTkBXGZJyYOcxgddBsF+E1w0pYZRFqsk96dls8zlvkprs4tEs63+/P9OIEuo60+gA/kFIcnHM6wSee88+xWyz4IPrFTv5OEExMk2baRT/iZ+GsgisTSyTSqPc1AMk9+cGLLpTTZL2/ald8wpr9LMbQRBdPq2ooB4/NKHX6rYULRAkjyueI6dtznjhp9SfTRm4aDzcujbTDn25HZOie6J7MSMB1C7N9+fyNwKxXBeFnDa6Dl/F6wO+hs6HcZ5kgy3QOnjBUd/mqAmokoVUlkIEf1zoiOLYEbB4Of9ZIIb/kc/XYgMp19aKoeBVNJ2DO48zyJO+vW2plK7cEkAMHH/PMrjNf6y2mHDum1jvRJdAJ5mbTaWPoApJYTx35J/qDA2qByY5fmbRDNDGm1Z4E1pF3YKEeNCzCoqJNN1B1QPbm08lIOwsP96pm9vmsMA5g/juFNe4DVfM13Bl3/7DuYPg2hnttX8FscMVRRdilLoXdD9VZBZYreggqef9Vh3LStyhO5miDYpAO9oEa1HpPo6M5lnov1NC0xfOc2v7z8ARlBzI6tkdRGZWYnX/jk5yfTxTrx4tsyLZctYtTckg6EOsymcb0SXROBvKYAsxNaJS88UUrJ1YKsiyMEl7Yu7ArSb7qgsK1AjW/AA4mSH9ZB0BtQzYOeW3I7R4d0aCyMwagRuwJtS0U6O3/gTcDli83BJ/WoArSxSoa1czucQGh6TWfgyACM5DU8+4fb08u1bROtjecFYC6bVBhLP7JMTZEjJiKyQQSZXY2LGmpX8dg4BUZS/+IlwXo5+RiuTEeRTVnozCCG+yaFGE83BGhItXyG9+NrosGf49E0nf18e3hDPbDmr0FC0xpd74E6iJ5e46p8ZPhoICpT/t+0Hi87WMXrwTqPvWm65E4ayKjGXFOc7ht4xuoFbPs4kEx+bp54Z3ZAQrmM65Xc7z+AnuO5fCLEf7aSchR0APu9wbeprldE6rk6cTvXtmxLzm/IpTX53w1HDpqAxtlbmzVUJ5e6OllyfdoaX53bq0xki8Z0zcnw23W6zdnUkzaZUADARkyij/K/3qMuFxREyTHwTAxx4r2CdTnD31gVLMVmgH/Q2alpiePE/YyOpyYmx6+0LotiI24hiVZVmrM68db7/eFnZ6pK9L7VQDPH2sDiWgPTXsElWzvI9GLooCFkat8DZBBRQlbP/iTW5h0bfS4Ug3X06g4ZY8q+ingI/kMBjUzqt3g/NX8meI1HtepoUdjOVybS9Ze0IAVCb3vSszmmVfGohv5U9Cb3JER5GXp8VoBVnmjvjfrcc6p/Lla674Qih2mcoDQKqOJK9HaRvPjKD4ToNs1ag1fyFV2BwBKhhDSe7eENvyKpNfX78LUQCAhyIP9qf4bs7So5MvHqwoEVAYvK2vgkmXh678H0kgDbsIHgCwFrpaNUXz1cq/rLiZDz7j0L9H7IaurTgpW3+nbK1ggd/xyanCZCs11ys9V9XNN1l4G1IUOLAX0OFzuo8lVhfedjhLKk1KJRNq9PKSJw1NXgZkE5zp1x/UonjZnyDjlYp9xSEkyQhVfg2vABLsfnjPYggxB5trlywSWkPIfeTpSoROagivQZXM1zvN9evW9biQkIAFc7k/Xtd1VFkfjRTVUxxkcS3HmAVzhqYUylXpevTUWYERFnY8tIYdpohtwtWCZmWBp9VeCNkQvawQOTksILgk+Cw2sPpcs4D2BfnuSWLbxJoHvB1zVDVNB3a5BpY05aaSMV/BW/yPVVjACtpyvWoFDXTZ/Ea4U2rcWTR3d2l3yy06rWSIcs/u8XiTl+RUn0L+qA9WQjlzEdIxPEdHNLNg883b5fL8GTRXK+r9QtXu1XwnK5Npr/qn9WhmNn2rKU40ouTR5iL4BuYzDeS8HhXJanXSYqMHDaZyjvPRjszZsOLF+rUxI8dLyaT8MZ7EKRXlXZ2HaLu5C6iC8siCwgDAHwMvT03qaouonXuRLmkyIdk3yWmtk/Z2NODZ+u0NL75F+a+uG/Wse2IjulBPvD+Mt+RMaOpVP6qCz5DY7gXONXm4D/FpYDUR9AWbVMhV0XjSlwZVPZiU4eOsMgeqJwCiJqJGzWWYRyWZZtrYS6SBK/RHoAvjq+YWXATAP/cg7QQX+c/cf1L+QrmrDLcYifENtV3KnLzymJXzR5yaU6359FPniEhTSqumyroc9VjUR6pjgX+VpirFNO9SBFVhHev/Fkt14W4jkJrkSpNdi188ELtITUDbO53p3RFWxZNVgR15g3DfzlqAfgt/U4dEx1D57hvE6OJMxThHqln9GeqebQOjceHsn3CQztkcQttftfDCc4cVi6Un6o03oQewP0VOx9dQq2EfXDj1RLS1fIowT9hPRY3fMUW+75PzDPj3BNdQhbHHimSCeADELtV2hRKKk5Hb9M+jxyw4YT3ygvZi/uJ/mbV1pzyYJu1Di3HbdPLaR5xCyAZjr3JE/RzmZP1scC0ewXjAdeAh0wCeKkB7rTAUpQ5pDFdgO4sPadhL5xHP5tIaSXJ55SG1ZtzeyXc9j+LGw9dBiH5QmHBC4+rP4U3nQ6QGpz+T36CtN4bib3LqEQdmfiAR74UwbHppyTs5bbpWhOcgwRgdo9qQTEyKEMVkHHw7HFUg4ALhDhEbqS9tZkiaEJE5R+CHKtnHR9B/xlLsC236jLkvpgTCw9tLacpV5y7AAb0EE7ANGmO3+otr+Y/iqiHyFHjjmhsG97DUktWwcgCajOCTznWgfuYbxTLOzusXEr+xciRKn7E8e2rYxEa3dK2Px4uT2E/1ivDUAnfsvvzpDrgw3qoRrKXxzOyDIZMw9Gp3rG4AMh7sk7Ou9/fB2wxipO1XBfn1sOtbyCquSynXBEJ5EXQtgeDm70mVW9zPEWk1dWcSAP30lMYELet5fSehV/1HZjY5Izf+v4lWv4t0oqeg+y1WKlihYEGNwgrA7nuW6Wq7Q8qkp/XdKGZ37kgpaUP8UnD0SwOAmUn6Z45CLM2PxM+IqzRV4/BREukgyERNMa5fT34973rPgAjzuSpMrQima3TS6ho1XxBZxFod6oR7sRYLO3ATXe8sjbhitKWP62uflnR3eMXuuzkX36RcdhVTA3lQmboqBwJdCFcpXx2Oz4Xc8wXhgPPEEDcG6b8vzSG4xUwg8JP/C1aN5UVr9ioyHFjSB4LvXRW+eHkTCWDQna0HGbj0NtsCg0n9xCvQklf5VQ3zEPOPsdc0obc1GEV4X1AvzZXrsNqDuy9Fkq/RwA7azfjx1+gqTK6gD60uzLzcBekEWJN05vSxnb7C4ciWMowP2hqVHYm4tcXfc1zb2L2Vg522FL3XDvmG0RuOuaZYorav/YRl+f4oPQRDBrorbAxUsQ+VSKUNgRMxOViszK32AhqJvf3I1LCA8IimKD9mfqRxmI/b9zNCUabv4ZooXUqBLBLbXdyGNtRZGT9ghw7Dlzgiea8J9sSoMgDl6E8hquEOzcBUbqv6hg0WZO3fmJzm4EPE9WguenBoSCoFjdOKrdULcEnU+Xrbo5H8vTrQvIlz933UYM/QhGi9xqK4o2vkjVFZjBkR37cwOg8PI3omzyR3EZDg8lpy533jd9cml6gFwLveLrqowDoxiFbWS83UOAuRbKpSonS3bG+svN+XsF49Sac8T+QFyQeiqBuqw9W+6enlpLs4wftoNR4rygV+c4p/c9axXMx6thJtnmZ211vyyk3BY+nRgXNvWnTUgOxzGW5cFl97wdIE8sqdIuGQYUC6duAJmXhGROI63SWkHndB6BK+Ha/zeHMyYWAT2GQRco8XaF178jPK5qaeWlPQarfbYDs9VL5bWhT5TngBq/LxLXyJt0mQ4ES620or9n4MJroY5R8187yPwctrKIkLYkZNACZlnj2tE1PNcG/QULh06cljI06tjEO/ZrbdVIns3uLpyQ/0iqV8yskrX8S6gQhVfRynbTG3xlHMb8GLjbZkbp0JLocEg2QLZ16L3On5wO35sCThQR9C4qdqkpevgq83Bzap9YeQWsYNbeRilH6XbtF9PPMhBObt5GyegSaL/MacA+y7Qs5kZnqk5kuVI1q/NzgzNP+b7z0ogffo/Hal9vwzQVixRjGBsH4GS99aIiegOTNGFcuBvNV4lanCwmb8svF6hPN8u88C1BFEKldxV1FnZs+vkBWAgpptmziTIc82NCsiX16CQPI13/dcgw+a/kkvGZlZoC+N5UcMsYjx9t8QzEFrsI7lhU9E9HfHOcUfvAX4YYD81v6Yog6uKWVrqWcvXzL52TTq+FYVJ7lFnkZoqEPN1jIkUXPlp6VpXApxNrUy/VSkJ3UP4ZesuGzX+Fox6xyWEQlsqlZ9wSQhqNSpkFu6XMO0o24AaMc7uTTsa4/wG4takO3U8RQCLH9mSYmCLY28kPlr647vBstoDBKeYLdgrHDYXOkcmhGQuP5BR4R8ulVNnHklnR0edsY7I2CI/7lo0dTyEGzwVTyTtv3TO8vjXTOKd7o5zEc/i2LW1GKUTmfo3rjJlZokrcMWIOAR3NmsI7xADon7rK6Bv0w53gPnKVBtvUj5Oye5nX0lOuGiQSL0n+Wh2LLuen8Ca1ow1l5jf1jNCkQpcKXQ85dvVQ0FAgqtQ/OPyrNtS2U+j3cxI9tye4jWmhV79Is/E4IGs63b0p4T3dUOg/659vJnLy1uatzVaXp7xkwd8zF+dCKk+CWtnR8nmsiOb4Gda76xscRzsCnTkwEIhUuVR9Ff5pwUorh+/ifO+KSOQAHDwb0VXgXDxEcFFhHmwm/yCQqqw0DU1sMjR6gEnEKad4R5fMIVtTL7t/Z7SCdqq54f0AKzMvOdIz0bbBoPDOkWZSY1MfkMxTvf5lNHBl1pMnSsQ7lRSSWEezFmCzyX9mxR5RZH6erf8hAONFxJyXaWKibhwPW2BcE8wOjremZFaw8w5qHgnOFUoRxzVebsW88mbiYZbDLBXnlhVIt8+i4H+fTOHjtsCoinbp1fZhNtaWszi2NgXrZCHGqhTRwF15yrlYTnzcNQCCNz/0fe2MYLCrF25UryRI5TzpKww0b0M4OMh5MLNLYmBfG/NhG9IX36felWhPeBxvQqgI6EFJMtLpMm6C4eMHFYLg81QA2d23/eCJPb7bfRtu/EzZFFB+dTnAgBB3Y0fTYbfytEaEpHP8V0I2AWWkI49Rali81TBut+MRBmINJ1vMBUtVOUGaFh99kJGEcqA3gc0EK0qBwR55vgaGRWxGS/TSf9Zl1HtvwghYay8OJWyZBaie9wEim1FwMn9eeAZdGJJFAXcIgJteo22CEb7LEIX98q9j5qb+1Scb34dRJ+YKq5lgbSqm4vjneKxlJJ+/ttJ+4y0/DLBHPzQ7ROYR/Rt3KIpOd2u+rG8n9XqBUpiGUfSiPypnZJISWn/LINFMHvv8T9cxyzt+Gq4TIZUX+qDiuL7L8eArFooYFSRwcFmb9EA/fbUldFIr1T0DjQLZ+kjBeYzgu4DehoW8VnDYcmKCqnz7/oG1bN4bT4Sle3EPQvDWNZtPWRtwlE5Bv1nAcOiG06SckEORvLCBoK+NFP+rDWXYiDomGuGgWFvvTQaTjpEeLm+HGkcF5BhgKItvLtpQxMKN5eSuw5dbkiUG6owP2ie34nyu8HtIRiBbZJMBwi3BAfV+MozEgGQX2WKNoVbQZv1Rj9lOW6DxytyUemwDLaZUqf0WP2+sRPc+dgWhn7yvOBL6SdsCarCRze8/a9RGOLjPlryFcHiFxMnWOw6WdzxublkXUMREvKCZGWFzVLO4zoXgRuHwo9txcgmKG+0ZZBtaLzL65Os1jXl8hKbRZxEa+t1uUrRsYeVD+OzXNUenvdZ+FUPNT3q5Cy5bNuzvqNLKHQJsgP/gx+NMZ4b0UeIHHH/8KPFk6xBfUHg5qJlxL3Ls2TaAtnfU9JfSZL/dk6u5c3kRIE5gp92pJQflC95X9Uv6k5kDwAAGb3b8SgxMuoZTodznvnGFMOIVBBbaHswF+ddrGMTiBU+mmJLMhf45iXX/r5Zj+PR3gDUAIhfAWqHOAdVOLk4FefKnHGdzSUwMZxcxfT7rW2u4NrFciHeL7UeVeNyUwOikj8uQb75UBwOwqgG9aK0doSk9sZXUK05pSI9C3WGxHne/AR504vCjNOZjYcqKnWVlbES8+z8iJj2xFul1dHJWLDnXOg10w8ao/2QQDFJrDdsqCwn10UGmT8ETyB7+ax88GI9KRN3MQtCFfozwN5WNO5VQ+r7U4H9eOYlWu8ab5I1OOw4z2l9DUbRAADFxlXfZ8NNK46wZVnANgNQkyN8Hn4zglamy9BaxwFqZOoJCFoZ9QlHS6P6S7X5vpSj6zbjuTRXQ7oJzBFKyzhJXQ0IcujrlFQxcL2xHKZ1LLhZ18PAXlqbdCLF+RdcftdzEFwJP0vOH8PTW9ufNFL9LJ7/IxD4ze1P1KnHi0W377GBgtnd4VjsXsRhZiAAO8uUy8hNG9Zw1ux1TSykFsO10KaH6TpEYdUar+k44+T7t2pHKi1jYKuL0yeKaJF1e0fk0OI0uAnfSGJDTamyogacgGh6qcqZ9IimztJb1wFVs0JtSgvMv0xxVSppIQrWXcS7MF6iSJ9R1d8t7cFxnszhp5AZAKk33BbndJ5+PB5ZexyPF+HtJB7Ltl+vqFKaEDckG6/JyQG6U6fI9trjHsIG++IVZIKW7AbCsADDOZArba4JiqIxnVAa14ugdVbbu8yPtk4zZMBVD+qhryIdp0spFKJu8TIAdcyZeEjGQ4MvCARU9IRjzDeh5u6ectp/zbfzm382H1WTe41Vl8qp4+49NGc7Mm+/SxZQ/nhSV8lYBFca9KTvT5gScKGM/XF2bc2ClzPxZmX+bAHGEH5JWr7JpKQy6qTF/whqGlDLVRr+FJuGIsv3Zx/LBSk8jPCfOZ1Qgc6NksvMN+ncVjtVe2s9wGfVVcQ92yT0whwOoIXdmfYJ7nEt7zwetvmFTm20e8V60/3lWgAcIGHKuuEYTWdh3eRHKYJ+NHh5OW+O23r+LvBq7aqQ1rv+gbIzrMRJqcyjPWIQM1ZxQsgj6PXQVyTmnSjNgtz4xivEe1dayj8OeVNO+aOn2oa61porRlK7BE10JfzG0Eba3+DdABnuhuflykJLzfAc3tw22aqlJ6HcJaMyShqZY+Zo+9QS7SVkM7JzDRleoJNotJO0gIqNwFpJE/6Arc8u0OyZyL6GvVHLyidGF329v/5hju1bI0f9/2l30TIAhSQ8ZaWaN0kCLpv0XVcU+luAmMsfu8hZEjxxPnFLqFLiQ8BGhnuAS8kc+EePOQLiZ/BRM24TO2CN+D8wllx5q41wTKEl3e/wXj5r0NlR2/mU6odc2vSjkydIKiqWsyULplOF38fhOJOfsuJHRVx3D93z6Ktc0JI4S840JGlCgQrl+tBCQN8Nf7w0iw/iqi4c9zBXxwrDQWM+p7C4oL8NWNJkytssXiI731BofuGmRRt3HQ5vGE23Oo8cPVTtCH5q6TUHSyvfMpX/J6sYyzM8B7Yi4Onvb5ZOH6YIJXLGWHkh6ad0+aMVt+E19XxhJe4wR9mSHL/I0IX1wFdfRTWuhc7ExA31H0M1Sx3ps5Kx25pw3g9XVC5aCWrwoCErS3E/ysovde43SKHrHYcYcnfQTE4p1GfktGV7IeflwOtCUi1/Hi2lcBKRffvp1qlRvQulTYOKFvzaCfeKAy79w/aPI00uamqBKrRownQyVcohNB9LnUN+uPFFu38qrGv48cEppv+jd8VW6b4u4MrwPWDFnxmzBg1LAxoD09fz1CCDEmuU/Il+1VuPUPRgdq3rs5hIIGZrsgjN/CjBycB9PoSPsQilR06/0Zjy91Hh97jjsFVY1ICZBcQjwpQcjBmNGI8A1gLw+MLhRCp1r+YFwRDGRmSgGXKyrDpRmYSLZz56Xy4ddMAx05WCizjGyx200ZKwTvD+ajghucNAlxSlOA/Q/IP64TbJ4mabtJljSyp5GwJ+w+CgiEa3yNflEDYVUp5etjIdhct1OyCs2LsctEsDC9xZG78ZmjujFPmO1frH2KJAO7D8yochsJd+p97Zy0/R9zroaXPULCI/q/57VswZeBTP605yZ+JcrgfHKRoc2qB0V/DDYABiRA/jXmO/R9oulcWniIcfEe2zfKW+tbHvv/egrts5v46NIOcEg7DG6B8d0gv7L1S1hA6yQsByhDurRdWN781WMmnCSjHrRXTxMfgGevE+iwJoYPKgUrXkEM8ucidoOaGUnQPivd2Hp+xvbbpq/LWBwcxGgC0I/9WO3oGu/PWpTAOHDzixGh7RVYArUIkFrsNpowXOq7KImCa/9hq8QCrvfuJel4X1ynUqDnNxOwpbk7Lj5Ce2OinwBMN3wp5GwOl2J2y+hfywBjv3o74bqDt+bWA0Hr+Y6SL4W+QIKQeM+aV6D83hxl9EfBF+/Ht/ZYSZA7x0IXqbOImBYiKqQb4ZTkN4Q1nRJgpgjsNpxaw7USTHgJiVNfq2CmNsUD+jCDjOZNEbHj5ulaCBDhH7YyndnLRBYtcAaJ8D6HW44rdK2+bHRkOe2ZqnpADIfMZcegNtUTy+Llto3uhst1OK4DVfYNRkXNsKo73yMdH+1GPVI2blJnvSZhRjjM56vh3elzSJYjKBQPqhBvjWY1+clD9I1mJjL9SLfP5iUppfvpaQEfESdwVe/POyupx2vCNUjtGV1b6I7r/WtZDlkm+mRwT/jpY40vgmCJBUFmyCWl9xfcyyPks6n3AooQS5lZXFJedg5YlQDg1NhJtnVOUFdY4muzjbEbIZU4xVlaDEqJjzjceHBnGH91QsrIOeKaqVsETutGj5kYhy4/5lW2w49AKH/jrHxl+hcY9HhSl56xRoiJ0tbXjFuMIVSR0H1p4WCarLuWrfcW9SWElafHOgVMS+JenbLyVJt65qCoyJzv9OkaBSHnNe+WdjzswxZosghWNMFDjw2CSDMao/zBw2Q6pHyXCCUE77o6ur/TQt/hKH7kursbbpkqnYxk0CnENeBu5HbLk6aparcaKz6YoxPgBE9TRWkQYYE+9lJNQW4SDKPS4a7btZLkT9+Fpy611jOdWTDCea4DLnGOofV4e8PfuU+UVUKdxjVOh+0T3rnQxrH4SpJWvK5a+08iMuUTuv2PFwbd1jUrQt0W9GkHnWpy0kYqpOwSuIp4WbZlA3GleK0T6nQFDFWtPZPOpkZ0s0YDyhXu0DW66lAjdJv/MExl5FE6hxkI0rIB6s5ElnrF+7Z2zmRPbQk8dYDNIjFhLgEtRT20KHGoJ4IfFWoUEhczrlyEuymaFsAPk2LWU2BurFSH7qcyt9GEJHU21ZW4qUOezHwtqMA8nC4Lv2W9QSvoxWcCx4u/dq1zZRWKd7yRH7rRbI8cA3kmGD4BeOdMrbSvDioFUoLz0O4YOjogqeMDAqZsPzPU+nLY2/HQMuQHT4pY1s+itRBRT+rtzC0e5bSrSq6MNWksFfGPm777MU+l1/C4j8loQRQyKPX9a66VGPlYS4x3mUhn7os8VNSWdC7LIj8gkNz8CH35x2hRq7Rbc8s+mj57BBtcJ/AnA3RzkqtTkUfUFNFvIJ/6awSSS1WfgpK/QWGqdq3/6Vq/oEoM9Flh+oojdZuMNuysVh+nx7uqD/MCAHSiY+PDXHvVkYEtks3JZgJQeCcDFzztpH3pWKoBbWJJHH1dvE5a5gjp0Oet/Qyq6fOBZQ/ehkWghc25tGDSYKIc0PaXOz2PM4FE8P7NJRL8PMyrTk0f1TqX+mm/YVDI7bxi+VlXJe15l2ckmTRitW3tAj9+vO/srXnnXCY4CRE4MFQlYldddxOgWaCVU3GhJib+6H+SpeZ6q1zlXtV7aE5W/m9ZlJcO8nlst/Ow9BmKh/QcR1u5Dkpl3GD2eVR0evOFGRCA35HVNSDRm5t9nbsITdzWe6RP9+uCEZv0XWDYZjIrDEgrqPOYbTblhatkm8suwb0kPEgrj2U6EEBIpDuCpcmEAkYtskgzQA3LzQKSOwYBnGEEKNh/Ww+U5OCSnWTjck4XL2V7vOvUrxbVqCgG2mx2wMp/SXdYhyddmnzHZ5ewVoamlx9rDF3ioG5ZaH0tH5Xq+Vpq9pmZepcOH35BGEUisKYkK7weWKq/SMxueAMsL6IDN6RSj6W0hiDkFD2Hm3U6d7k7QhiPUDrFjheud4orzWlsRqKQRfxx+UOnjV/5jesM1HIPTAQHAdy4OoQC6TpFsZVgq8r9UT3jXXs4yLBboYZAvShP2s6hsLIkjNJuzYpfE0y+A5MEIKGiPT09YcjMt+f0xiOoWL2udb+069eTJZRrGrIfxGawikZb2PdAJTtuotKjEi4Sgy/fO6ISetr7l8T8cN3kirq7c9A8eYAZSWWEUh9E0TCZGngTxwIgNj2MxbS6+QWBIzg5mwa/HsmDtyj0QhzJrTHnjyiF2aS4Tef7eR9YRwg31Ky5L8DxW944TzyCADksUD28Dizvxxgnq7iLB6CVWQoB54kz+agYOB+RkVYirEgWi1+voYxMIiSHLWdGsre8jpzLjDxhpRQaopDCFmn26UI+8PNX2ERm0uNVb60qc7T2wzPDaRVy0N2Mym4WVfIQf+MLOM120+2fqBbNuI/H+Gu4ng3cuO9ri8Z5zG0Xza/eAdJLMz74kBXvaYShz5Mnp/CfAi+fAfSGxZw70Lzl/h/ORqvZRAJpbrkhOLkVlUjIpfBc36xdcY1dg1FCVFtoDGT4eyqIrho3l58aMRjSXRaHsF3V+RGKVYBorluijoM+Oi9G6sdEu1Ry96iT/2FaBNaEbI4WRpfhg0crUYdW92fU19SBetOPgVwfraqEIRU7Fjmlzgw4AuRQop1QKfaTyYpnhcZ+zGeV9K3cwE3qephzf/rYks1f8CPPAZs64xHV7xpjhjuT3Uxm32+FgQ9XEsRzpBgAQHuMae06agjmgt1HguQAWLDFGlLXvKREAsDfXoZLyQ2yhiucW9gDjh8+7m3GudmwcfhjiYndFSEVlk0F8GtLCjqPgpqrGRa0y/UjprWJxHwMK7/J4TEMkys3FF9XdQbhJbVgDR1bjDhkA7RfLp+YvxqtbSk4HkIJksf0io+4rw+lKLXnur5uWrnRAjJ+LAv5OWt7v1pSmYi8chrH0cpZ/fNMKzNNQeOp2zPhaHh9R7/E2UfJD8S2NULValbher9cRQ+QxTmySF3Fg8zq9KUyKXb5qlkCj4O1hmDgBsgz269mW6naR0zYaH7QHDwdwTRoD9X8tMvng1TQPxq6JNcHDb9QjQVWOK09WdqwHTTBh+/F2FOOS1JvEM2cH1+A7acCQwnLM+0V7Xpdm90HWxOHypeSukK2Y3o/Ljy9mVhhuKEz6uQIeY+3U3LwkTwRb98HcJi4nbQwyvoMNRFQCFWEp3jvTqEqIwIiAc1un205QIx+2GzPOtKVsrx8lQep6N/G9FmjHOWHCSs0wUuepWeKc4es1s9BTJFNk9OrQQqHQxGgIbCRMTTCHjMUf3B0Z6AXXD+e4WC6IpERwDVVHBwyCa48cXxxmhfOgHAU0gPvSD7sdjQAPbdlO9uvaLNIn/jxhONWm7WZaakF003DAKj7FE0jCZaCT/TkgJgRh3wBjYVMjSYtAnQOR8WHyio3vWnEvv7SRXVTVSQo6eDuNai7xWx3jSwc7MKXmANZgwT52+MO+CaKbSGGmEoPligPfGVm8RS/nUv1JVeNtHsAKfuBDp2oU2xMPCILPveE++G9boMKxqBzgB7kAaUw3uBiyrZbKwS8P8q8W47+piyh8wfre5SNgFuuH3sfU/JzaFDA7wWhz8Mc62eMW6Wz+uMsYy1ywEpkNYJLFr0j3r7f9aGTxhM8Mlt8rTCuyIdEkROkvJEF5tpRBp1kJmaVuh5ylr2ZbpWAdmA7dGvhMGqw/nIY/I7svESSn8D4ZZ8UltN759wnDs7sI86xxV11FelPMafPXUGCigYZxv2HkCSHGM9bJcq4F9TXwm9NpdU02Xln8Q1WhVt8ap0tNC6/78I0Y4lcp9VTSekxoj+b+1Hip4alEebJrFPPeoVYYvO6TGXE44w94Nnq63Mbqe/FeWPzEZkoofI3J30gH+ea16RPd3CMj9m0k2MOalTWMx81OS5aYISIjFnQIHwR7jDkh3RUmo24wtV7EJpcAiTXA75L9wr7ssNyvc5s5ZKzQr01nJOjlj1A5JqoOBgUMptFW7Fs+whd6KjNrtWA/lnqMlKgdbQ1FU01yNJGiMRjtt2XGr8f1Cm/EWuNaETfD3aFpzoy8gd9C4EBVPORTVjI6Lsh4RsHBRGmUSwr5k9+DJCWmiT9LBUBHtl3F4nkRSVj6mD7BaRBSQ7cOkcrcDENiyHUf7FUdm8Qm49MKx/5YDccbg+jw6EFkfPC0IZHk6zYXj/lhWJJT3+HMMDi7PUSRxgauV444PyBbkYIiBhuemuAoPFf/Hk1IS++8WIVZKJOlacP4uEKIDgRRixlDai67/ZmbZAA9P0SUer3dac9xfAKkJvtJwhyt9BVBxoIWFeryCmdHOpGb7Vvvyuz76InON1zkCIaYaEQkqSCzasH9VLIBbE8Uvh7yaEg+9CciiSOGrSOje5hxHillE54jT9O4YeLP4WYW3d0jK2ICvU5k5Io7TZhsbMrVwDZtzMCSLggBayvjBI7hSc8HpPQhZR3eXAmmpYvKVstVF86hw4KLj02Ogf79IMDtYh4ec7/BF6bIa3QfdBII+Tk/wxDYWmMr8Be1ARoMEDYeoSiKAo+orKE1oY5TFOBJIwvaex/l17Kvi4irMsRAGMQqo0rKMK45mxTt0v/xfW++CuM1lR0Q30JDAw4nkZ/FviuX56j5kQ4W8wB4xhwHlGQuzoUitSyLtkqwS+vl4rMOzCk/gJh5RgZ4jDYyuU0CFhIAJskFj18vfqyJuh82HDQ3/UoHIDi/ogahE6WDoiNjl676kO1uyHqc4Z3WYW74ATr0FFaMpq/wFH+tNjPU005dX2CMYzUhZnxq5OHZoKt0nLPEZoYcd0gE9uyJnQbwt1iuWQhfoj/bRjAU32lCnf1vQMWF+y/1jITKBK3mjdBa8p74nYZq+i9VkmCLAntv7CLVhzN/8kFHAD83apfZ/IIIAA0SAJA++6P1O/M9CjQuTm12aoEDdVa2lTi0AwU0sArE/C0FEnPb4Fux80WIZ2DFOAbdHXkHuzo6wxk31MZG498CIGHJvxYYm6JUjVRrT0AFUnYfiYXdsvvT/VciWLhOtjGm5cYKuw+IlOxW4C+QEurnYzKUN1qYhi8WnB9oF5ZCdKZy0aUhSyDIPld1fD9yUmFUXAvZLxpZcJwDbwsiNzMGeNFAENnfUp2/EU2+H0fh4jvt2kl0OEs3t2U1/yt007UbjrHdYnPVSv7wVUNM+58L+HEgDQ6f3O1G0S/cG3fkQyZLiLcyHe73wlHaJr06BN4R88X5SmWWUf6NJd7O6JNjDTBvNQWYIgV/7FME9Q0EQn8g9w4bfWcEIPSxGyaXvGSPn54iOSfZhUH7pFd4SkJVOTaqE/+oadxg+TPbWAc9X9naRVsRzGOExo0UAEt4Dn1snF95r5T2mT3T40+azBn1S9+mRBvlQ6LQtJIlkKBOo7c8cxyqQpNkntgv+IqKmOAO51NsEM0TfYhu6qGZUc5+M6/Oyo16hPA6bWU0Hz+uI+xMNvqU1WYCKW7R+8uPknkwbIKPFZjB0ltCX79ZjsftSQNgMuT8tJM4Pwxe32SaaJsDWM2yINeyKF2s1gAEAHBeVCV0Mp9PXoPBKt7333NiawvMS+QopfrE8jqXxC+9b7mUa2ggpesNCpa9FRRFwUeIKBeLsyJzDkMrkxPL0irsw/KwFX5RAtRvlMI+9rpHvgt5nskUS82Bhv6+xujFcNQe9WXBiDe8wcHrdeZ8IRUYh+G7nhPSVV3gVMbZ8wLyyYgXUeY5K3++Axr4wniFq/FXJDM9mLx9wOLxZwK0/SH4+GTiKnMvd7mF6+5b18vxXYdaBkZ6YlBnl6M42+wMSvrOKsHCUHuvsqFr883MoCY+NE0ujF+Mn0HuX0tqI/rk3AgTeLT51jdDtVky2OFP0ir9PCCKxUemFwb1nOBVFMq9YoqYuwfd7PLK3TdjEQHpYr9Hlij+OrriPFHdc3IM+batmluUbHcKV7bfHm7Sy+4nlik60ZKX7ys2iC3O2p36XzswmJ7rxBo9zmM2gLTYke+wybBci4SYXGqXpDFid90/YuXQ/4rJDXcG7BwE9cgK4KEOj0pSjydPCMHHQ3+1dixWewFRyW8kapqTA0fATuAQKTTtRuFesQnP8KJaVrhXdJdCcgPRnJ4XeDEZlKfUebt1uu26tUPrjfTQ2dLHJvw2ZtO/sLgt67BTNyTJDyZGnDDmNDJ3oOkN519AIIslGqlncD+vUUvO5Aw2F2JRDALDEbhf/yaeoOI0NIhwLyBCJuhzbi13iiuOa+518YGGm/eO/SXBxm6nQKA55h8cxFDC+UJ88sg+J8Lz+WtB0aJwn8Fpc0FT3aoZ6xgPkmDFhfmopm1crwI8HUI0Jv+BWUETOEMkIq0ztnU86G97/gAoEc3D8++e7VaqjMbknEqPn9JsMYYge16/xnQbeatsnKraW7qcUOgJS+Xb4DkFh053fnSvfxsIsVlg5aZaca/PsZlM+V19SKGWuxmJEfpRkO2906NpTkPU3mgk1WRrR8/V1+UciYVl6+DQSk5+Bn9jHmvR+jat/j3ZWaOYKKKG4NARiobVgmEEcInDjHmZRdw1IRvRiRx9KbnP0BR6qnzJ9IlrspD7NdR31sXtn0oY4JgNjYYmXmzZAOG6MEi9yPCs5kl7mOoB0KgwuPbXo9aUTnHNKX9u3SJrVxMrnEc9Y9SI59dH79XZZMGWk+4vM1x0LtnoBGPHDwQiSzlonjIPaNgR96qW2gbvIVymXVhgsJZ79ySs2UYOjzCNKGt5MNg8ZkGo31LD83zTZ7oEflZDK2eCEhwLenJIgcE0DHIKiDdLa+6C3KEWJTneXCzmOM/rxBYwQC7ILWbT528ZQpMfTIv3E+jXxapPEOFyOSfdEI7oFl6RlSQ1EzqAN8QbxENC/ZlrphFaDuSG0oj89HGv4TAxgfm+z3cyjJ7UsEd5PGMjNVHDEmt87CdPe+9XQqowkTroFzefQXreuW+N6w4UU17S7hWadJahAxGNtTjIMsNPhLG2nZDikbItWgXDHKyHkG4Y+aSlYUiYrPACwbjig+/nkayxQv2YAPgHjESuz/ZWr6LX444rBn7Bx2Ph+a0twDL/2iC4LLhxxTa2sNyzzIpjaUKM1I8jvhMVtCyxSQAfuln/icdmcPKLWOjdzPWu4yB3AcnRg38RydiHQDWSrZAtc9edvl+CKIE6Rbxgd/M75QX6hG6iEdpyiK8fPBWXYeouMG0xc9swzD1fwdK8rDjH2ZAhYwh6jvaCCiodx/ZwTZiS8owBW9mtbrfUthqLwa4IzlTSp8b19DLCPtVvDh8re8TzgabLoSta2KWlumcwWM9SzHZqAILKLOGEEev7p2uHp8AbgDEU+o3BGjEbdvh68qi82bbdrCk7sjsKOrhq110QCweZmEGW6uM8nlfH3Pz+tcNPz6IpM7Iv62ih2B7EGyAoMVlLv+3pTI4Fnjuxm2T8G8wkY0NYslCYXyNRud7cLsBQjNzfKyynSkaorXE6z7YUomOo/xDTuJ4qjiA7+EnyTkMitnJ1c16k/UFYuDR9XgBOm99/UBnGYHI57m3i+SscIY0nXway3sz4tYQP+WBOobYDzx+EVrBOXf/iprnZMDpR0kSywVnS1ezNjRvgoQ12V1YLB1Fc4osJyQjO1a/E1m2iQSxTGwE2/YfO2sdyBT59QSpvjw+wS33+NSoIQaTzVm/ci4BxbXgZJMMbaX4WAL1R8pVsGrCoUTJRnOO4UcSAT457P++TSj00PmjSHYhpQXXRaKK/Yw/OwsqUozlmRk9LRWifTvoUck+cNruLQGtK7kWokxB9/weH+2SJ3ct2Z8QWocn5CoyEWyTEeLVKolN28Jbz1+O8CsrLogmdv49ghnwyvvaxZsmcmbY1mWILz3FYZIj1u/P4qSS4/DsYyfwtFVOaniA3eNzBX+J7hGalUtp/XLUIctIWtStmm3huGigV9VO05aas8GC6itC1CRXTN7ULqSk1qRbehFR0bX+4aMcBM+e7cI+M49pxh/u/PIuZkMl0Yhc1G271qo1AXoDiYYyRu4MsQ58O54CCtLjmZCvcfNTrpaFhflLeNshZvo8d8x9gw4kyEamgw6m4qhdQByggeC1dz2rg3EvH6ct9ssSN5IVYi1Ot9DzYFHGsXQ9H3tjaNbCeE3latPECcvdMzeEfRjx3z5xdpMhdajmqUP4afjaZViqIYM0K42nTf7TX6lZlP0drDw+yVJlXODhTt48kaRGHsRvz0P6xOKz6ogaHJy47KmCnI3RnanZzGrbsLmjOomhg816xUZAlhwluF/h26ZKl6lP2f0ipMweQaOejp+0Ow3hPkLEZSzB3jPGUpYiAGDB0cnoUvetI7kbz3r84SwIXr5l4YfbwtmZj5196H9gDkpBlC8kVP10UCJ9sunN8AWMQLDPmJNn5z7npgXTznGue5KY533H9VkOIw9ISJ7lJqTT7rcME/Fhsy24F9hEQbpJgg36JbkkPwRED39JMXLLWlzFUZNZaWB+x5FAWkp1StS57EqHOUipVRBNLopX9RBEwZH5OZ2Pvypz8Tj8wSaG0+U9cSzoFP1SZFfnzF2jqiMawJMF7mOwvi5ZlcuvnQxHVNhv0ZMJdxBOtdjPX9U+o7kvisaPWXsu8GVoNRUSL7TCPHHW9E+XMw14pcdrM9uWSj8Gqe14ot1UpX0s+zwHBajx4gbonmzAp49Ls9FA4+psgiGnHeQSv+VZpKDiffkCOn4re0VSINhineg3p2wZ21xbhhKCmjMuvCztIQAA2cpFYgyaRE3mXgBQKPd7NJHWiW+b12eTYcKpvQBwRfBdQsTomMelBU5MVpPJUE0552J1dKSMqn87lmG/HtdTI0Kp+m0MxXHBj/Px9um7weNxjtIH50ejp4Iw0MP2DN74FFjoyaoXareOgW66T4zaazg2EYPwWbIF1V0/WciCiBdcPZ+T0xGXUiNByJuV+1BuDZJAKAAL1Wn+raxnJf4JPcdi9ZTNwmUXsB+1cd3Pe9QNPjSvOnoJACo9hDas38PAPwbB1PE3XoT/ZGSdfQkxY2jqvjcTNvv7JuFiTN4rqsIrf3otF92GMByW5NcBKiMVeS7xYrP0MHdF1a3FFFTWxxTWka44/pYJCvlsSbgv2GLsJq0NjWF9blFw23UU6xfKYX7uGymU53Ph5R1Iv9TsxXlvowMhMrDaG8e0Gg+Z28XC+GL0n42hh6Fy1/uDJYUQLOqhcozHhjJ/uT21hg36DmBJTLiLl4oklkmB58aQ9uR0rxwzrmoDOCWvCjk0QojGGT5F3uVwteH2tMfW6TDqwSqrJfeNS+PEL0ZTJ8WfI8M4qxbZ/G6puxuxkxFhigG7JkGHfFrAfI67TA++IjzFClRwkxkC3jZnQLRqN4gjSxwDbwrAZSI/KWh7EVTbZU30Jvx/bg7Yxhi48WFbtuj2uSaxDmWhWEy7TqzAV07CilFDXDYl69/psim/wJxLdk9TLo+Rjuus0xe9uTo5VNdZ2pXxcn3o3q93V1JOPXRw/w03+h2M6BAI3QlLqy4lCVf5OjdKUPxpAzMAIxEFenWoD/WEomvx1+e9H40BIPd+Kso+Brh6AmVzLF7RfkfRmcsiSaR//RQpEe2+uhFEIGOwvLcRLso4MuE+vr2ZvGLtnpLCml9+cg2NTox6EXVcV8srUm2PRPEzv8rbv1FWkBppVE91ab3T4Q/0TwdEIjVc60llBVtAMwwlcH1bDoKZDO0sg4v6R8TKnGLrwTaISXH9Z6NGUDHVO10H3nqPIP2AOn3KSA8fri6ZRtt90RCdlWXfyuFNsvmqW/YmniUf9HPQ04qZeelatBG3BgRqodZYYOIj5R2egWcv5FAa5i96SJ/PuAM8g6H0b5LQ7hWHwPnmV6QUyyXRbuFL6KSGZx7yhhkFkF6LhH8Q7qydICaPzddwO8a4wzlB/MOP4leNqhfXyiXA2o/jhjg5lui7l6pO24mxstiqWPxfr7fQ3woT+f526z7gMBog8Y/XtF8QZgpRx+T+jiwvIRsM1r6r/ECUiufwrurIxPdpLSQtT24LNNfZ2juorwjaKJCtZ3Um57V+MDA+4V2nT5bvKCA0ZKXG/spQKs8Fb6dnH07Re2XF/abjoKF6wun2Q8fYyI/uYzR6cHEt/9E3+z+zClICqMSNcJExrowHv1bUrwjRnLXII//LPvkhzM9nfVtIxaYQUJvm/kA4bzgVYn6OJpSzDH2IweMTAa8MsmH1h9wRr53e9muCsgQZyxkMRRCQB9ieaz1IIYsHPyvT5tW5dkVaTuCHZNGcQRLE6l2nAKutZ9xjrdt/DtsgJeF50SVrrfIQPwzaUC3Pm0fUjix67IDqxcrxjVs5o77VuL58rcmh12RSdnush4zVtQC3mIWIB18okvOtEvGiS2y2r4w2py164BO646KMI4oFRB14qTiUHdSTSdGz+oG90+A2lL8gt94K6cX3IVQQWyRCQcYy1HeIqY5VZNYd/LdygD+h3D5q4V+TNCwNZFiEIyOefTOPMvhCdl6VLgMXx/A4BUyw/pQBeORgch05534eqZ4ry6izZ6jlMkzP6d/vwfLfKQWv6xoh5Oy0atTKk7/VXsXXcc8YQpcqySylxUg4Zv0wi/6er6CGj4TjusRFJoZHqRl/PlRpHDTLxp1nmnxUyw6Ct06cedkrERR/PwPNGNKTK7KY8gD4Bucu97FXIbkuQprZj8vj2Xl2qDG4XUwi/UFSB9AUyM1xD/pib0M/S9eFFCDXxRe/9mVo8JEnUrgtVenmDDYggmCigfFeIjuoE9NyGv7ZT8J8EX8jVbCRAqrM1r/CPqszW0QEUuhuVw9jhutjCchfLP6EqFu3XnLL5LEbtDjO29F5oMPe+Wn4OEwWPeUfQEo2rA6+6HDzqyiL10gPspcN94fxoEzi9+NzFjzv5wKw4MWbkL3+FuMPICYmA5pPr3C7V+HwEXfY3fegLL2m9Ne+/ZldgFb/Iw0myjen9l/1HF0TurBH/xXzqbIQgAv9yFeI/SuYotA+NGa5hud8Djczc7wpwyM4b8bMmTVFAchfuAtpbvTH0ZFjeGXXCcxmjIyfB3PbF6m/Afbwpmc7kRWKPNekXpEmQvas9gNS0kUUXgiI8InIzONgf2xxoTF+uaLtAUhlqf+jgiowNXbTlXOdprr4AZ3J2RCZpl0shPw6SGk0fox3Rv1bxUDrY+AmgMzFqG/+o0RDeZgG1F+tgYIjk3t6ncQKFIvIE1MMkY/NPC/01n/sB9CQJaQ5zk7a/nt5I0nr5NF2cD1hojNi0+ZutKWXkGuvsrCgXi3PTsfVt9whChmhPJqwt1Nf54AvVI/HPfO98ZWjF8mrBHdA1ueFiT/8Yril9ExzdoNx5fpRvsPSLh9ELwI5QU96sSD3RYjHE2qEYj/pen8anyfqlGb7kO/jjjuoh2fyhtu1SsTrBhHQ9rnq5XkdqcE9PWLCfuoirz77hFwmLslvTz+Z1fPcU2o7LwJq8szDqaC4Av4E3t0QgVlwUcCBV5Ue3XSvvRed6USlahv1ZrZ9WSypUrElgXtDhJ05A4FbPRQ5Id+DETsFR1litW7nzCEmz9DosrzYj+IImjjxxsn/bw30C2mKnl/KbRBIKhnPtb2GsLKLDwQkZF5pCjUaLXAhVjlnO+HwpU2bvfQDkCGFWvuDy3aixwInLpnhI1JVdcPxAjn55dgrRcuQK25n/bxa3sNUy0MtW4oQCCcYnba4SLZFjjmnx0D0xKQAWG0NPrhoamppNSCj9lHRyJXTkyQQrWwV8nMCjgd9hRPKGhr2Cq5WnR2dEAjSnrnmNS1D4nySyUINEvcleeiih8wz30gimWJUADZMuINE3ZWgIIJE08ncjDFm9NLtD0zwhJZtiXAuYoFcUEN8ziM9IkxeoZtrm4n1U+e+Q+HvN5EC/Y/u9G+Z8AW2hKHzk8YFNJ2T2dwtxSLhGLhQp4Z4JVlCh9Q6Q8wOO3bprt4zsmXaJCVpeuOpbfbO4s+BSOJ3caWRMQRqzGLyZL8WLRbUu1xayP/Xyc/4udO5nE/zcprpvs3mQWt7WMk1cy0OYFRgCZHZj/SDjakAYwSJ3x0JYSGSnanq5KcqC6uP4IhrG/J4kEcOhh719U7sH2r+q0nMoZtDqYVJQBj+2XgEdmcha0XYfOAvKmTF9u/q9DvOJFoPzbAF0aRyLZwfEOt5hkoGgwWSCnBUBOwqWjKx6z+G6VyCv6B2ChNtK20T0ZttrRek/AUOSmw2tsWJCXFVvcF/HW97IBJ9e+C4bOnNpuqy5WUG7Zywv9TlWuPXa45NpGbs2B1Vvd4BBzPXIOHvGucILjcW9nYQCI5HJEvlEkNyf/ZKqfERfwp/xrZ0HyJ/u+FTw93ouv+DfyCDWDYEPNg+plTVGUdQaQvae1MDMJLgM5cQtByUSXlb+j7NRZdsDGJMZHVkGCA76KBzHQ9ozALf44Jt5btjTrcl9h5bZYsanrTl1mXFxYrHUhLY3cCd4E+Yr5fIth21fDNta2mMOnxINsu7r18nypy/l7gDZGBp2ACMwI9UklFGDcEf1MOVPODRIMcEpXU54s6akBkASYhRASv0tyoSYBOvTy9AwJJWLpzt9E2XtJ3tS5gchFG77BNK8WrR0rBJ95mq5ellVuegZSz7AaI5s9dwqWniydrt/d8x+55Nh8RzYoYRJ/BBxEltWrJH1Ptr4KoncoRrfdHRUgFURWmvAMhNXnB+Lr+U9G+XB5Cdqes9f+g9PIVXQvFuloHDoAtjQpjnFIPAOxaGZcpsWhaDYTdpo3j+DFmjGMijyk1buH1z00pECpnpsW+uU35XSYMYiZqopP0x1+32cdoQxRDw12dSNx5A5W8ZmJZj394YDV8sIKsI3/5XAK0jO2gh+xXYtIbcm3p0x8D8wE5UdYLp90WnonhWG7ISpOUUoCzr3A5nB8mvAgEA9T0SbW4AyYLLSVDb7FqayRXS410beewlJYx4Wa9TAwy1WIrilL2+CieZkzp2CE6efc4g2V6VRYCru0u8f7Dx6wcAI+bLGqkjlLYLUVmgCbBHrqWlws4LLiMpNcRnlWOeUm0w2Iw4vZnPWDnDUaRwHtw7UqQxFDV0Lw20TPyUyrW0jQhyy+bpHPuY++0DhlUgZ2FdIwVxB6i9ilE9M/icAF48gsUs0Ni9MQuo9IKkzLQfzhPQ3Fxyh/IWFPbCsFbTZmFsG62fg0yjBQRZYqm/3eVryPaXODez65/yegQ+R8OYyl0BIGHiJM9h/8tMvzT5CFeLjtttCOu70RL4Cu8dJCIyBgTrpYHIP7LTntiUohMZ6zwgoiMknaW220sIRLQg+zjvmlGdjfleFHkZBbID4mdsWKjKD85ODeorAg6VNvPBOhhYKT7IMebI7UEYOq1YeLiJIuf6v78we1rU5msAva7H2tytJhjlCQ1Ai6vvPY755/HxtpF//OFofz0CNpZFKqi8OO0woEN8OpyQtmi69sfeyMiSxU0wF5DqXazXbcMO52cc/+DgMjMQQOUl57O6VLKVwwCL0WKt2xOxYfml81op28jzmcK6+D9FrEw9Yj66nebTGjr4H1f+TyJvnX+0sKmlYLXT8U18XDOzTr7S04I5KFbUPyVPMLplakZ84HKOyVkK1Nb8zw8LzyhKA3naUvsKJJ15RI8ub5pDerSql4CLx3cWwg6uswWQAb4UqSqlIoOuWBQKXliAxJwEQsOhPgj1cVycCgFVI5ks84Lp+5rmQSvAucZiiLAVMuUmWeD7IyX7l471Ro357GUnOjw0B1ULt/gqZaX1hyCKTTAjH5+DPt0cXQzuGuFaJpZpPcsGYRDVtHF1VlKEzy3ez0KGGzGtqtavSEFChrUA7l8OjyLR0k23AC27lZiLIJmwsOgSm/yliIU5hmJ41Y9PD5369T2CpMbZQv0n4WNmjbmfYwe4YF/A4jAmbYEvRAL2E5vPIYCCQ/h+n08sws/OIMO2Dp4BfcBxicOxpN8o2oUJmap/Gx9fx7v8S26lTtuCyNUJrI1Xa3JG4gtpyJF2/3aSUF+Mx+h3/+tfD9mjTN/3mx+IZttJVFH74ytbVD6XIr14ZdfMxAnJzXax62VNJmWGYznDyn1oTbXXHiiYHd75SiVXCye33vW/ZoVXAfulFTyUTt0K/VeoYsuOuvNs+5mRe7lkbRvHt0dLDmT+Ln1cVQnJcfHSQvHO62uVyUyi/tElNYUon8xA7nlEivYocq6IoHuJDihFkBQudQ1ZC/b2j9OSx+4T6iIwUgE3It2PPbS5ByHD6Omj3mEiFykpVjMS3bN5oqCwhJDN7QbUn0km2t7curkyYqaZysm9E6INx1zuEd7gNBDidnzWAIDlUlBc98YvaRJBHr4B54BdEPbrG5WBtKJLN4lLQ09K4lpiUmvVcXsJM49XlYCp/mJMg2n+5acIbQf8vDuWXAzPMv35xC73Ne/OpTVWT4B+/xiIMDHiFu0rluuxl1+b/w0aY4swe5B2azGpjuvy3aI7CAmWy2Gq2iA/mJAbET5gnwTZLZcIpOxe+xUm6Zqt3XpXBd0+Zh3gLCrTADKvtu8amtXiwDCxi2InnTgL14hEOG+v+asN09QxlYq+YVSRRTezqwN7sNEv1Sqp1/kOiE0UpZmfAglM6LpfP3eo5ZbBhbfY8D8oGtViQgdBkWoyMb/pSDCJkgmC2f1LlTEfs6CbTxYnV8AlQ+BQGmhQzI7OyGMYhJkpddZjzaoyyZcF7XYCiLygIQuYiqJMQhJxaAN7eqx93SPsmrgGJSNdPfq5TPO97bwrnO04A9IrZ8BcDkaOp8VBxUfxHiTBtjf0NrW3ha+YGnuX48m6rRsTp/iugvsCS62kG3Po3HLJZgB7DFj5eQVMR9+P2lwLtVuaCNyyGJ0LjGsMwBvjfCmiyK+4MFcVqVg13uz72xrlw4vuIbCEamJ9UWSpVf4tjckHXcLnJprxW3sbgawHLG7jGUouDOiyGCk9GmyfRnQ3ShH5bCxosWj06oha4yIngN6aY34DmKGzEk6V/qYesNSu6iNdgIu260Lz45oj0/pqJyQ3Q0oNQrqTOn20qGI3nm8QunWnihH/PvYYkUXA50qOUOK4BweDiiqFykVNBKf5svY0AGo9Hl+fAiWB/D+kBhmK30g6aFt4hTfP2dzPFNTzyOKHJGSoTU59fZYKnoKBcnwJvglXXrWZ5+rQF+xr7obr1U6k4sy5IsbVFk31qbk2EpmftjddWPfw+tuf/GRO6PlJ/JZXjNan4G9qwoPg3X2rsQiN0MOSccucJuIUULJ1KDYInoRpp+Dv8GtEF+sgv9dcYpAxkfjO9rFWhLE0pzga1P0fxWoPj7M8MJqK6DW+DAOMzm9gG6h76ZbSfaewwJF4SYBZGZOHzvWijTe/slv2R//nbFuZmPZxh4nFrFPcCiM5NZHPcTvsbP1eaXkrjw2Z4F3oZqupHqdVwyWhER3PKI9aB8J+RDaXL2r5JF+dOYdoxOwzT5Yrr3ewcOgI0sB0gUpJQunusfiYAOesJCk47p7kc8P7NRIjFVvJriNZh7iSrGcHi+BOXDADF0bfH986+bhQS6/ZEXYXNbfOzYKlOpgfSpj12KKi3wjRVOeDQyVcjRUFz4ETGTZAMyugUzuh5pyG8bowwIRzqdXhN37RyamFGm4JtPoMhj70M0mXHuH6bSp75L3wiOhThnLDQzqhDvMtW5usFrbwJMHw31jkWnPrNbw5cruI5AjlMSyeeKSeHu8m5tkHvi2q6kgCJ+drubmjmOUvFUCYyUMcZuj82PeIu9Euo2agrRbwRA83IIKuPE+fnbLMZ1ufzDozmlxQhaBWouc0NqQLMLku95afS+pTDrTROfanxg9T7w5MVo6neF+vbszqd9ELForTgX12F4Z6DhhjUHypZN7hJrVmL1m3SpciGAEQ8E0bmKeDVkIpsCoqp3H8OKbpenOS6OCf+fFZeIY+ZVCI41HT0wBLHA7elPx4B9O4Ssrw7r3qX+tARitd/4w/I3d4xanfrLrZi3BJqC0OcZgBdIADNyRNBozGPTt0prMByxooMC1UqwH1PNXgS8GbGG6Py/arrY1iMjt/0K6icDyEZ/Qei6r63snmcLulDMkE19nLKhqd5MZ4Wbv+A9eGSUYe4TPl2BmHffYe4zrdn65cm41I3tUJju6RXuc/GV9psTHrA4C8j0pf6dOez/w9tdwoklzlCz/S5HTCeXRP2MIZAaO7b/D+XvrpdBC3Xa314i48Z23xaxqgIzBk84ahozRI0lBbLp9NbI3O3u7o5c4Z30xt3SUawa188gmHzwjGJUDFVLdGiinOWi/h2GQnz/tEMldoszCFJXVF1wJ3+bcx8xMYgN78e6Igx27iE6JpuNIH5JS3g3tlsTk79rknpirbFDvinDJv3mKbq5QzZa56s2s6U+4kfRukBg8pVAFyW8ZxDZGhzRCX7BzQFviXm3OjsZ180HjWLHPvctgUiKHqhW/5a8E8a8kl0XiTdysA36F4rLiMXmUU8NKEhSCkTTZ3CaRaYMFQDot0Zo1gC70XFhvz+S119l04oEFOXHyT5u1y4kcUArJxs46KClpaDh0EEeCe2cjG0Rn7TyB/bXhnZupjUhIv3UepLuUNvCHsvLWLNbg/RPUu9AtVHHotC3UlxlPr3fMVbFsu3iqB4f2JlEtxUWajjSF5v0MGZyAmr5GhFYRWlpARFCxdJdjdUibzKgOwsYVq2Yf0iG9R7oVkOeQsGGOhRS1nV8OTMOPJxouwirrFRHLge8lusVRXff4MhdK2V5DCo5k3cYbev0vRG7rJqOmn2A5ZV7IdeI/q+D9PF/E6IuE6qEHUFjlvtqpdW1gkSROPQos8+dO6n3ZECZtH/o5Nym6ZOx+2baIiUM5hzfts/jvMpKWh6Dhe3RRFmFbQTJgvjA2rxirL8WYS3kdN9sAvlZpDSq4qBten16Kx19ovQotFK/yMfaBSyR7RTQmZD/TiKiopIFhKqs4JEX97mhm3R3ZYz7RjyTPshMCXu6knMRgZaIlt4JDsg3qbrsH+nFFCulA1Ljwd9MHUV+mMNZiCRQehfv9xTGKpOnuGBqsb68zm+7UTkeQy1uFinfOlMvNdC1CpjW8cYFCpfdfQw29GtGpOPusOyRsRtHPXtKJ3Mk9kyqfBNU/iUZqMwgozrsIPhSt8EpGopJXewsmsrrki91EdBgwsxtZkomZELk7Pk2fdaLaCULTBfS3SSE8xOnbshWXXWt1ixioeWxopV8QcuF5tFhce4u3uABCgtcfuTTPFAhJQ3bZYiZamwGYdkUm/e90AnbHN77bsnzoX3ESmGbFeJoRWBpiGFkPrKPTeYBLuAiDs/6Vjb8oIpbMudddpvX2wxVDvGjNUSlpwwFLJMVkFNHV+/ikw9S6neDiNos5kamL7X+g+vOFl8kKn5tujuuQuqYJOBNL3WjNhkyu7NKcRIqds0dwfMU0Gb8Io7RCfSpBKh0SPZGNziYFhzrgq862pnkJtU84qcC6y6zeSwB5v1b1Hkf9T2DyaB+Hh30lRqvcewNtbSRhuXpHp4DzcZ57k75NhsaY6RI1wmal+V9Jhj3gxMHt2my2SJUiPV+juFBq59X3R4rF2eviExeLFtxSMCeVFYXfkEdYHWtGvhXDBn3Dui8E5spkgDJz9hVUhORR6dHULaVPcUhx/XV2lLTpO/imf05WG5ikrJdCv3JUbysW+5CIo+sdiSrJoKOrvWoz6Mpu2lU6bEpeT37pEazFSEiwyJWYCqB0NqnzgP4FtWv3gwhX82Y7ERrqS9ZEf2foOdWqCigTfeopH2ADTAOQJ0dDDCZLYOgn5cIO12lVrkIDI2KRflNQbyPy3pWUk4YqSTOnaEFMvQNly+f49c039CYRNR2r5NlG0s8ib4vRYpUgHAYTyF33N1M5ertx2g4LYIba1TfyUk/5kxV0tGovpRau8CkYmz++no13uhDtWcm2PwzwH3oRXA7dCzPwSs2ISSG5UqZ8iENMHKYKMjEOYD/X4mRXWf617x1dilJLhRjEEt1qWl5D92qAtnAYhbAmETpO06BQqHFY4Nqt1uzFUqDkMhKHXVpk2D9FFVxVN6YyPnKaKFc+OOWJ4f1tl3Ig1IAUCOF9wgwI8g8GNCPfKai3SbBmAEgfyb6pKbD/I7qAE8UeJ9GWAqXljYD00yEdL4c0QED2dmSfQCcq5g5hCZ2iLWEtqNqcwxP8AF7/qmnb3lSaqR2pNquJr4Hil33ijdio12rV/QhsjPmPMeP7b9rGJI1dyXgrIKL18Y9Yi/QlOnTcL5RthkNzSQoSWTE7QrpWczUi/zdXclKRMtohpaXQF1eIcl6/hxkseObRFMhnQz4FnrgrYxcMOOQPNjtk4WoQcKux8Xkjz8KsMGwDQ0ujRjpFr/7I0KecAbICMspNPN0COu/DL5VWvpSDJyEKZN978iwb3t3W9fiUeF1NfTBdLv6qbQiky6Gm1WcLxOI1mcIiCABSYCrovjcZhlproKJeyG+aSV4JzEpsZy1JR3+7EiWIukHET+6u5MLpOUrDp9juJZY+u1eMeiKIdcUS5OzHyQPb9gegTPd5Y/Ucpon/JeN+rBdOZGAG0dHLyCtq+7xQnm7z3BefOAvROC0An+cmRBnL6mzGY4ZWV98n4mw4Frn8n7CovfyiB3MiehDQZesMVci2o0ZC0XNeGgLjTiIJDkdFDOVCvGIK+1NJBP0srAvTWfUxLvobSCwymePTZ1zzfT8bcVHNeHDxmdwRK2/YT5H5vZvnS+M5ET7Oi8tmN8lYFD7a6hG2UfSU9Q83PBm73Ic/wRG3yv4DHZHl6MH6+GdoilVWDoG+jD6JDG+HXsIIARUdwzi5UIm6c/h1rCN1WH/CpgN5fsyF6LOdVPE+AAXBhEm5A5GIhCBSjvBt4+ABpZd4zE9XCSsubI+Lc/ekWMtVjSXEVNv0jT9BEdto++yLNsPvNv+1M96PhWtawT6UfmoL8syWw6eN/5SJlY4MSkA90/dIlc99JDnl2jTRP3Ymlm+Eh2+essnY/RpAl/eSiEnVwcDTuATZxFXv5Wr8C/pii5hvpzPZK6bPAB3MZHFl8Iqnw4P9dWt+S1nHJ6W9QDanHNR2TDBNrtSRNbYRo+2GTxczRCMrhM9YqJkoJVFZfJqfdo1vhETSafQIbpAnyNo65kh2/2odUZcc5in6PZUUTOaNmGcpWA/ZCDOuwzQR4mcMmbsfPRBPU5YOn2IBo0dHlVScLLTRdjoSVc1J+Pg3kga/H5OoUiuqrfnVRHCU41cuE5IUmUkLlrrbX8X9eKcQ5OYB5YqRDI63szk/sjptb7zbVytPIwRMnPOG1nwp662UTEjkYc1+glxVvOch5kt2SeOCN5ZWrJv1yU67Bdj2JeCfpvstcNdIECKVbwsXMd0ipBSxCAfcDtxKOYYRlj/UA6jcj29JsYvXj/zsTRLSesT+GzYkPZpXZw3pZsSmKLL7cAQw2W3BP2IrVM+MLygSljzZSG1tg4i8dlW6jMPdgjMu5vMo/ffGei6D9VyNwnHNZSlapIU49Z3HVA+/Cs6WzRaMEx3eW8XBBlx7hYr8zsEuXFNbg2pv0M++HcYSJA4c7ICxHx0UZr3La3B2Qz+nF2BZH+Ddgg30xZvhHrNLFLUuUMptnr/M/D3oDjPRiiKKwRTQkfyeoIZOH8XOAuTZtovvT9oYJeE1yTkZ0LL6IfEzUv4sD8q97+7V74yNf6dl+RlXSOC6Z5+XSslfox8H/8hv5djbhhnfa+t4xF8KzlADvkbgZuG2pXP+HBiiv1xxiJFhGAJqxW3Uo1Y+AV4UBkgzeio2aaNkmA53FRqiHYURyz4CNG4LZMVKQXlEMnM42u1k3HBVEEDA57vX3J7NAPzyiwPIzDVdfIxwyXHQGmYPNGLS+YSto1978dCU7aoRCCuDFS5Yxrp1ALJIfXj9dLcZdlAQkAnMeGHIgHhDNVI3bh8WRblBlMsmBB9mliMepsYQHrKhXGPACikLYTpJCOu6LTHMcwsNRAUaWkZ2Ay83lfpI2onuQJDVfKLXJnXJBc01iLr8JdazlhrCz6reVDErkDibkBesPkh8sVQq7ct6/q1LcwvOq5NP9jOJnW/6ZCZGfgOsxCid2wp0sFiOjVDUUBN+CDEcaInGLppx0qVIeyFVK6jcEAuXpqM7m6M2jDJttmXHmEAHp1dxpZO1KktCyKdZazY6XeZCaScVO08PhDfUS7nSnrUmU2HxRc+k8mKS8Z1zz7HmnsIblLw9STcAe0y53AtDns7XPzY2AHAzXNCj4wX0MhrsOccJoCZ29Tbj0kyZJRUzKsfahglGxLX58vzW3XHyuqUU0uA0rnuy0+i6jNpeMY5Zm6dnk8p/dwqcs4JtQ7tS+/gY65QIIO0OIO6bSe6hnjGScoyFYkmO+XC/uLWcurE60dRvAcDY4cNuPn3OXlZPmpQllyZBmiesrOdp8n9BRIubhHENGC/PmVSAS7/qOmO2kbaSJ2O1opC03winznr8w7P4+z6QjP7mUwlIZ8ReQZyZXjvFdV20IdNODB5KHrL+45p0Dr3BFxw2iwLL7T8ZSB2928bJJuVxdlRvNneaEAQxN68AKsgWIyQ+Vkmoya0gUD3ohpDdHBHzjYo0g4gtqFukAPzoIlIG08UDOC3xAJUTMORDgNikwMoA+I0Jv315l3L67x38Wu4Qs39pgFtz3OIV4VJTrpWjCF4rVSSHIrUzktPYUZ211j0nFcJ7ubYQyiY+1JUctzhd4XDr5vkC5OQc4lL6XUTSA/itjDsjjebskPP+HFvunrNKL411UlV2+OWg+Eqnrp/wJ11+utDe1DXVbCUZKvnuKtgTI0cSXyuPfAr2CT5nWJywsmWe25Xo4/PIYIYN0Pl2aD746p4HYJ+HWvX+BKo9NEHJ8SxSD9A/lSu574+hvOOtl5I3ktAZXmUw6qWqDkdNb+sQ4mc44LF4yh55smlNKitEjx0FIkZ6FmOsqSa6od6RhGmz/IR5UQqymbEBrmnO6jrqML1lFdwCRcPHhQ2LZdu+M0q3ZkFa07rAMVWm+9Th4Tra5U6V3EQ5f175sdU2B1iGPLwdOJYR0hdwC6ZSe/Zf/pTrOuy1rOElQ591ieKv75BkDbUUgIDm5CyJmUDZZv+GG9NjAPhwPO7kk1j/I6peKQm5JgZ8KHLr36yF8U8FgLJSykNNv1ciQf4nOEGmZIlZfL9XvclQJltNNG2liN2uSVqI2TMCHVIFw9sSu/rO21Cse2MJTCalou+xXuhn/EfmooSeFRoEbIqgoGXo8Tzn5UmmUwgHZ5WW30wO4thsMDIxKb9U6kcXi1d1BhE3qKgpfyon+wZRXJPDx7FKmWQbHkrPqYHdl7tUqjIUWxB/MndkxKiud4DZgR1D6yX8KeYk29LpGKMF360Gk4OKL9KbNfKWkWqyGBtoRJAe4N+HnXGt38iC66Zw5LFEkHOLEGZ36eKFbkdqoPd/l9qv9Z5Boiid0rzAsM3mSDN+QksasrKCGrkuvqrXjNRUrXpEJz7o8qgT46mWxy4x2fMGlOlEAAi9phk1wWO+DmTnttnTZvQT8f2pIERhYN0UF9f/e09AarrVH6i6ATA4Blx+CVZBMb8GX/HHvKyfYnCXHlFlMWuQL+ROg87vDCVsRBMN5Ly+lGnUFcDnAcoBdEmnGtgoXysyr9tFMluCSnrrbqY7kp7tw4YWmJWDyAKXVvN4oEenmJ221I7jag48FfPfy9HdOklSN5UNGX9rHfNbp2Yc7uyghbs06pox6IbypfCTP4W40DTiGhaZ3eZVa6WF5/VfkNx7FP2lSwTlzBJ5NRJjOMjtcbFZFeE5RA5aPDDHvhvznIk1ktwSmIm+D6EgoFSqrjqI+beC+IYcPm5pjWzfW0ZHEBDLpLhr+1F3FAj+Im2Z0l4yoxpMNb5s31KTqLFSxrXrYeg0BHEjfgieERedt53X0WyI7EyOlqhnyZUCEkrbtSYpEiuDalz9h4NMHUL39ChWbYS9cAm0OxUhKjBHi2o9QfhDBWbnd6sIJEM/j+ueieqtMzyvG4Fp3yh+aILWLF0tLOm0oY3RKESz+LJ4ynPuMcaE2xFVRTTlUKOiPuGswDA72hoTJPKb8DBA0Q+8qHKvVgZ/pAyqCsJQAP1jp58Gguzp2OP+hgBDJVd3SMEh65RO+5SdqnY7FWKyAdxglLOIN/iWx0fUMmlNCQymFn58yGPIEExJe9S1MotNBlDc7YJmposhJBpsrCOi8p9o1XQfCltv1TunbVhjyZMdl39Zce6ya9f0UaUDqNWQFhDaP86xHTKQhcqPiPBh0cjf6U8GlVhI7s1MoFm47VnHlG+cldfK1hpXtM4tkF8zXwWDod6NoUmd0eRwIpvictGuV7pqUaOUTAT5QeF9KyDrLy/toKHojCexSElHEIfVqT8AEbtB9ERZfRoQEmWA482igH27tERrricaYGRNNYqMehm4MLOcR0vw91Yr8KOxUmhQUZK135iRk3YnIiDzp/XoLmqorIYEseh9V/67fdpzc2No6G1mMWWaiTAYLsm31OCiPNAKkEkvqgwLkmkH/mRrCaCOEC23RnCgpIXFQDVP/g+dzhiQygXm+ReuwjE75u4bOQAXle+QWp/iescsN/3flpFWdSJWK6ogjI5ctOLEyIA+s4O0iKiohEuoOVzf9H9ONahfibfi7RqjU0lN+5konl1b92gacYetJKFYOdTvRGe9ffDgY3HpOvqobOZhnoRipvcBqD8UZVOcdhbqieRcF/s7oVW0jF0gX1qooEsYn+Jr9C67tM16wa+IkE+go9U9810Y7nleTtXtRuKORt7faTYnIBqlj+Z+7HkC+ZiqaMYaEErSpH0WL62zCr3cDwePHUT18vdOzb+7LfOtoEYaXqpYZafeXpjQKy5dweMsAJu0T/GHa8XaKvu/DEZBqs2LMowrIFDSPYIv7c+PBQj3oWBufTxgMxUeE1onJ7V/Su4RAS5+Y8KBPu+ig195xWiqAbYMraGouGnS4iYTiDZ5/h5jQ086lXUlMbprVEDNlTmgluYgjkJgrxcveHphOudh7IBHELu+8lgh3t/xP2a/WN0SVkV/fZ2I72aqCq8pzfCMRkgvHv8CxQDAhK7QiIMk/Pn6CmBfYwPkcThHPPYU2x0Ob9+WtHTloBi2rdd1T6Abxmk4+42Xd2W97UwilTn6I4x+z6n1FZ7K8nkvQs0rfw6Ly8SR+OypZc4ubpPl9FrrTXNmtO2rohc5UdXhJ2HrqapOKyVBjFiz1JcYrajyTXR2r2fQA5RoOdqpSysBkxU0a+c2JCxLt0Dm852MJXdxF+BGhOhMRDuYcC7Mdk6RDrYM57QEQR1SS20U9KbE37Ba5CERoeXw9ZYxitsFzfCOZ57Oo2TeVFFs5mka1kgQmo5DYKBndbZtDyr1Pit8HzJz0XfXhW6z6XfM8QBA5k+VnYselDzSUJUhHjIEodtWjdbowQfYSC+gBtX6LWEA7d32HiZyJgfW5+sQxgQ5BrfagsmLxJsC0HbKLz5toEcqUYe2S80NqTjPy26o/kYwQ3161NgAVrRbrfy7t6nQvWsXrY85lnPlWKk4J/CEzVMV30Nu1nypQTlibG7mECi6XSxvducNVxJpCAwXlApfjAraFxqflGEKkLXzCom2IYcAv6LBXLabjUav8JKMSQ4+1odIEsxtxULK1yZEwN+tHSN5JZC/OjiJCZO9avmWb88uAs+oCDblWyrqtXM7S9UdbLT65R10jCpU9J0VchJ5OL3WMncPwn+YZFPVLBFkGg+hGRTOMhkvtsu7kc6mIbZB4ys1F5YThpyRV4Bbc88c8d8OADY7RifglLLSC9GhrbOCwjCNkp2cthUeSqZNXxbS59/iUICmQOmWy93dd4n6rht96NkhRMMDcxX9/nMdmMyFwvKgfQC+MP5GVPXMMa6lBHshZpVaZjPXqxwWrk+Ieg/38ymCqcyWYRCZjvP7VkkTVFq2+AmC09At16Bb8/uvOTvNnYvIiM5GA8uDqQuaPRO4pGyyiDqAoOM2Ppsz6O1is71aJ8jzyZXwkQsB4JVDDRVzBd8y/JjyGl0IFeaGt3qaTjszmip3kdITn9/8iFnV6TyzbVqPIoUi8Cp3nN/M3hQHRKhYhyxIteaP3NnuRf9MAAKo4X01UZWUdR9ZYhUJx8bu2SC+1SawrIdVfMlXJYtJ+lPYAMvWtx2MdS3O7TkgeCOO+dcom8M1K24T9roFEvCjqhKRrYI2Tkf+XFKQ4bq7P43Lqb7c7bZicbKyLbHrB8TWkyMB7te0LvrYOQrxcAVYOL3IqntyTIoyOQ+2JNtqCR39EQAa079YP0LRkUtUtCbxRZGPo7F11/eKXmYilm5UyKEBx0joJOpbA/NXQyOnKbjfxZjLfPbx58R2D7Igmp+b5ciXVep2JOoVS7O+nGkPwpaFDIxkauWQmCIMYyrT1NJvRDtjR3nFF+lOOV3WOoocIm9Igbc/fm8951Hu7J1oez1b35RBwVUUlwrp5ppO7f1St/aoTsvMFC6pt4J0KQgAcXY53nMVf5MJn58F4iYEp8DSlcg7QBuflSXBNwyAZLMaH0tEUx+IiHv+YlFWGgaztPhyZeexcMfC7HHlmMAp9Lq7zDUX7w8yq2KP+eh7x6cncA3ERoJGs6DWv2JjyG1LVFrE5OWhbJzGsWM0Ebp/3waKXz8LHrlRr5/yh2BsCC1Y2z75SrmxDvevrcjmYKCgNNaGxNhY51KTmcO6QvBAeJRcpufN0IFuW891X89zVgyc100S6sETVCgIZoOWGcuRo+8d3yqj3mgwpWVEWntV5AIMJLTLoI7evLSJkwCsqojnqt16M1FkH6nB1yvGAe1EFywL5CgamFA0c7VQWoupHsit8JjgMFzBvzXu+9yFZ2hIiI5GfLg+AeVB6gztNr2DT45JZ19FSzwivkF4N0WCpUeM2lRs6nyNdfOx4EysZZDSW8VOfzLxbKJM2NeqFEi/3lZugPMr3uI1hS6e3wXqDmCCAeh7yBc11s7qSVxf0KGSq5LrnOl/wwNq+C7cR9tAkfpNj+pnTEDMqfemt2A6bNjBj0ofeeZKI2hsNMYz+FSLqFNQbkgaTLWzNqjN/grPq3JbJxt3uR39+dp0kW1MjG88QuzpT2w3wIgF7RMdAhgRWAWxuftutK+xt4uif2xSEjhgcPlIY0olaSZS2kbbsKS2sVFdin/7pIb+pX3AKOYb9VAVLjPWuZmdrnQ6IDThXTi9fxx2z9A1ObX5pBUDf1JQ8dhBRMLBmF3jKvaDMHocCpGMF2Hyo1g+9Zl6bBFY2Uop5Metss8CmHsHs4TYrVEZkLTgpP/mmILa5rHF+Go5rKikqdjPdzrv+aWxieeZdyreNwBng9YDVBnjV4wdMBmipz4LL1RYowYXCKlChZjk8Rx5aHhK5Ud9E6LpWo4pmsPjxMK7DNlwvZmxwMQJg5WT8DrkuO3wMs/b8VbAoBm6dhEYpk4icRUgW8q+AgpkBTEN0Oj08B9Ol5uIipygCe9PMK64s280Y1c2UFYX6K9pmiR0ujERk+ZOSetfqNRC4TnDOJS/00HVH0mJv1rQcwgacm6PaG1bVqO2Z/Wvk7kp+SahAg8VTtyxGFYIvpVfdT/womfxBq6GixbRy1wXyF/B1uB3+GSkjmf1KHtezTyVaU5Y3w4L3nZ3QvmCvTv6eQ7mbvidhqp6n5+vcZmw0nx3RyN4DzpFUsOxRKYIYnc1wcSsVP7swqVC7DKLCMtkdc1a0zdsxc6PYfWe/Ph+molS0CE1y2XLfFJOGdlzUQOUVLFGn6idG/jAs8InfCYLRbPESCP+BsB84fJpV2ty+Xc4s+rkvwMePIc39aNju7uPg205SIof4bvfbj47/m9BGgKMQ+okomT1Z0p/lUp6PbcdsjLOWhad4ckMW0Icfzgvdbe7ANrCYNBuqFd9RqqVniUK5SabsR2NDRkqvxfwMULUC3IMZKF3Wd6QTexrtxDuLUu7Z5czt1UkvRXIzKDNt413jSSw0Q0z3PqnMk1etm/hzC7eu7LYm5dSFOdsEEiR8NC/Yk+G0QaKR3ysbg0li8s2PULdnBzirMhOWx/uzGH4WRPK6+ZyPsvKvkQ6NbbnHpG9uQ/xzvLgRQDzlLP/d3mzxDEhydXokrPefjV4hTb9KD6+6yi26NKkTP7bjnd5To8+0k3ZGdRDIAG+XBKx9I+MLmvg1pZ/zJyu3PFJDUFyd+JjgCrGPAVmFMcevFSmIJaGmZGs/5CDkKR3bWQhqRgnSUHXUOZak12bamnMI+GzN0sujE5Qe+Gbe9/hSoCmcI9PS7w1gn9LJkNBzjIIUTmL3eCav8lUna5Rji4q1zPhiLlEEEVACLfqplrVhMQWWGrvdTqr7MXzDWPvj/mYMCNOsetNC8YwTtX+CVWlf3lf89byplxjNTeJ8PNTmwNo032iARjq8bPFrcIqPQoqdNLTIkxcG6QnrW7YeXWg+B8L/R/u/yeSOsceeH71JdF/M8uuyMI/Us+vrBA3Pfl3ufZHERu7aHPSg7yJiV+pXFg/uRbkFYJ9hDu3eAK4qsqmxNQcIiBPGFkrZzeUJYmnCnWNBnjhWr3DNu8aQpEU77nly9iDwrWDvpskckAxxeiNNqGn5dMECMZ2a+0Y3QtUJVXWdh8b/GxvReVqjKwUpZDbwac+CWjKx5hAF7AytBY/Nt4vwEvg2auSGMifNN23TmlcjLbltHBSZ2yyVtBAVpm+77jCCk/CDUDmjy4y5WNEdLwrnEfF1Ytj/kuMq7RzM+qGTIUizTPIypEqhp6IuopO0SBPnsejBw9s/r1TJ1ArNs0dn++lio4YtuN92hWSMVwC5fPCNZiNZsDp1O7HTf/jyPbPJx75UfQ3DrP4c4Ne1ppxbnfc7QGK1L+5zRwtrPRk89UrnOczZ9cUluR2NeUxmNggqq7XNGpJNbfUoA0lzY6DJg9yE3XcZ1vUM8kGGLC0b8bxP1yP2pvMUQXEb5H9pw6jt3QEGsOExZf2v4/nJzBBZvkxKk0FFtIT3VKI0NGvhQp3iw30xcwgOaw7R1vj18XRBniue3/3Rep0ko+as80QuRgokjxIESFuQlN8PvVlSzaeUM29daVMX4HT6LhHKvsGzhEMw4PyeBQk12hXJ70lOvRjU+Czi28Tljbln5rJ8zEilt2l4gqAbfMGvgD3otqFH1PDxk1WFyl0UG6XiLYTjMsKkhZxKUGGWGZNxUw8TeOC8kz3XsSafVDKhpBbZoTGiKVuZ4bpS2hH4fp/Jux5a2y/RWLMTUpg4B7iPwffIavdY2gXQaKCgsVQ1qW58Jtt0YEwiZ9Bs462inlaZu20dDFr8+m4lZd9rH0+b/QKz6qavkrVtfRsnvkHreFTn3BIFf4Uf1RZ7RthMKKxvcd7jMRx7xpaY4kzS+tpiR1smh1Oih7toODSsGQGT+2keS5qplQ/YG5r1pUdJRRbRtJqBt1GcCBLy0kL9BOuijPjqkg+5lRIl3pUVQmlMex9I+DSbMFo3EnFWe1r4F2NPNZg4L1DHQWFeX6/76vlfbnEHg16hl7Op8HdoMRLFuTkGy9Ikh3AUBTBgmJzOlGXE0fzB0m/v0E3T9KDBG8T9fwhFgePWMhFdnjKpqYJfwxcHJOdy1cHvOFtZIrO6EtRJlM6Bsgqd2pD9kf6qcWUuu25So/5asT/fLZXOKds8swIZvl+2DSXBkmaPxbTw0D6lsOcfW6pnRsxZ8R252rzdc4OkIR5JxZH66KgIQyWYVRm2gItBXBNwl/VlpfLcCgMYBZGymQqXtDLI+yxkvasPWbti28ERcQixt6dhz6BRTU5QJrNWD9Omj0Nv5tGhliGOAOFv+EAF9mZyNvqnbRYKLJvdq1lztI1mt2kNXtV8Ru8kbKKtTJ4FBcc8LwR4VOcXe0ggyjSNbKMjx1treguP+W26XcwIenUyCjrkRAhLJz3bt3tudz94jxiNHrkit1LtpnlQiJFoFtleDLEQ6EtQaRT1AmYMwpUc0E48NRrap605WkENR/Sxqq6BXGL4g9h8xJJB3tC6SEXe2k6s8WHyjoLghN/nktkCm835Ejo2x8OSfTF0CBcoyZ1rqsTuBMoAA8vKsoDrWsRFmcLCP7cJsruS5r7L83UmHXOww9o0qp1iYlJXustFiMBY4g+KJmopvbS/reHHNatGVNat2vcKyuuu4Mm6uHm0KXGXN/dnRp3pLJdlcRqGeko4Psf2eo6tpxLlfr1Kaf1GHipMTd9H47wsb0SXw1fvgPeWBdnXzq8TOp9QY1CzCXIwbM5pxI4MakmYrIbO4V2yHc/2+nySjWaJuam0mzh/xsojOL+yHQ/TVKkjYxcy/QaT8BrpzW4XPhjZq8LKObtTh6TpQ1TwyRXaJE4P9RAGr424E5kpR6NjAfhoWbmWlAK7v/oxUprOZSPHCmxxEzHF8a3jFMxL6H21IYXYUlu3AfgStwjRcqK7uC6Om6TJfQoPtpfiWEcF9K4eQRcKH+plzhDDjl7CXO9/yGZhmiwmCzJiepYU3SGGMUEJWDnlEUxExJJaH13xxtT1DahUKeiAeJZUGpZpQJp6pUCwOF96LRq8DKgvQOhcNvmoVAREuIk7wpgk+cQsSHCTJ8PjinRqBgBLRR3+hqZMslJ+h7CNOvKFHNk6jM+QGc/iUVMN+/+XYtdEfwWdEZ8QY2wFL68Cavkkpnqf/2x+ReN7YP2EEgY0KUOdlEUvNaGuxQnTs8Y6nDUlCRqhbpcRYn7af1kWs3JXt0QeOOd71xcO+iDY0WbiM7rayb1/kgu5crUP0/sZ/p8t2ml9EkWdnxSwKfFZTD9Lx+TnMGM7/bKZgq4Ye1V1xFA0de0FdO7OuOR+EGO7u8cPoSL3OD4egvnCZWynVMZCpS9qy7jRg8PENlbze3knqMx8fwBGYJXnT0oTEP4Crbpl6C+35sqWusJXwBmbRRjRtgAtn+OgXXQ7U0ac+ZcQPkLppxp07qzzlF0iLbV+G2jVv5qRlHQLj/Y4imJfdKN4+Bo6eREuN2F0SjQ8yZgbMNFxdlfE3dXxwChUxFUgpQtZ7T7hRmLeZJ2M3izB4TrqTDwAePuTfFVQ6cIndbuosH0Mx//7Lz09unhEOkR8YSQYxtgxAMz3GjIBM6oiJQZDGJ3H2bOy7/ywq6Tjbq7mioSelyVA2YiL1WS9BNbvFexQppmA4drfplWEluHxMUBPJT5+iBGSdB3ivXldEsJ96KLkDFDGfstW9YN7FSm+0EOMa6ifBlsMNPB2X0HLIkAXjHu5aJcsfYh9GZANYB4vGD2RKdKuzct/2s6aGwsuCIRARZQcsSYR+ssJ7LriLgFTlxCd/GkHrIf65lZjQarbfdc7EHKE8rBj0+mGMHEi/7LyTIIGJi3SXPGpJ9afy92+Xn+QE6+fX/cvSCYkaL847eUW0xqpdfMWUIMpMzcfotWOegXBSvaDw4QglQct2BA+mjb29OnUhOGst64+KOBZC7o7TfvOXe1phdLo6LzxLg5yIQOGFfJpkaqhW2O1GkWliiipt/n3Q1bUF/cKXtnBFw/GFugx57DGErI1HzwEN+W0u3LIzslh795NlEzEGyAizrruIJ90D5BUBA288YiGwXq83XFEmJKQC/GUhbFm9V3G5c/eDduktwOWwIBY/dhVeAgu7VICjBIWwxUIp3DWYpaDvej0x+s/J00UPGNG2W3+tbz4I6CuV0Fby6qNbQHOJJNloDXn6r/ATAS66JW6IwJ00RYywdc5QbKWX0IvA+z+MDoov6dKRkDb5Sn2AlU/tV0NYyu5ImkQmb4y9nSZQBBfgW+2rO+Bfs6fZfGq7WNPrKzYaudUsL5xW+IrTel92yixZ4U5yWHLMZos+jnBK2GP28dN+F2QmJFtOaovDUrMd7Xig2abK3o9jvg4Gfy/lXQfDps2/jTufQYpvYXdrPBft7v1lPBgThVaERi09cUDIaYFrtnVehjoaLhG3QukF3OGaysaiK7hdLm9DIObfTSI2OssraVtMA7KXkCJ/LLQ9V/fPbFKT38Su7ZM3TRjnaVpFoE6EG5sAKMymsKVwhUUP2GKFUDJRHvzL1htoUJRXqOsA5RrJCjB22ttlUn5DloPx39DlQkl2yIhdGhCdtz2pI2irNkyUXaq9DzTppeLCTS9C9SH2WYZOCK2rekfXhDhKbFQXZUesqVWAGA1TPVTJSpUGxa1cWniJgJej4xi83SPA1aA8iqNyyVONz1njDGNO6U5vzasb9SY+CXIc965q/4HI1Nrb1PcUxlQBK6x6a7DU3qTwBvyCY2MuvwPjNhDsDZhey0ZQ0MlmAP7KeBafa9lA4J3Qv0Fc+ocPZ8fMEiAbWOal20+f8ohQR2CFyhT5ulxQo/oqx+IktwL3vyXgspbhboVxVLqqTVgJ7iaUgsOFClgy9Bk7evEZtUP+eMjXAnpMzfz5nhrcnh08VMlYkM7r9OD/2oZC56YBSKsWZQ+y9oizpclSYOwExyA7pWZTKTy0ZkpnIqC76ITMD8mUJ2F4Kv6r5ebjrKrS9YcBDTBPaT7nMxCsI9h9WaRhqo8SGRbbc+wMnXjQe04QmjhUufaO1YPzrxPaOjnQyDWqRF9lBX8WtUi2CNwTfGuMQoUrPW1Ih+Assw1nuvbRzJig2il6sh42x+oXCe+LAM5dEQZQ7zaPEOOhSC+oEkwnXv5hTVLveKWG1ewniyCUy8RrZ3OXXk3NowazmU35qaFaCofTIy999RDluSs86u9UvzjyHAkD99wGH79g0K75/w36+2tjBrC7jYQUNl+ljTHCFg7gPWh1m+fqYbp11qJeXW/d8DfpXK6i7nCS7OLYbFAlMpfMcQIgNdBG+2HqkifBjWsXqvUPf8z30mVZ5ecFC4p/r8l2srEeNMlSImSwOH4AAbJWZn8kbn1QXvn+JtP59jaQ/d3he5+zk0uItDWbzaGZIFL46ewqTIHETIDhZSBnJEVh74T4tJ86MsxUFlzm9sLr9AJTn+iVWya8KgDRGG+xPYMN/P/gTpdPiFcgXwBy076ipG6ETssxPyTu1TJnSGb6jgZB8Rah8XhWZ09+QglRasSVumeulh5Pil86bnXOKVobWtXLJAttEOIl7KgPZW0lr/XIUZCl7qOlsl/zIB6pCEZv3waUCh3vMhQu8h+oLeZKU1Oen8wTHTDG1wKhH2fE9XQ7fWPQIT5m3BEpse35WcCuAR2FkVRcM5rPLDXyVUpLXjTI59knbiq8Cgc6E8pVXmHA4/6wNQxTXuHDabzPHYa7x4c+rlvmffqQ2fhXR5OR9UB7Kk8x0BYoia6aCoEDZjhl/fmqiT/5a6T5KcbdDVYjqXtiz4wFziSRmXwTdBlFhnq1VhcK12XJP90j+onU5nDoUfgXgFYYkmON3yqZ+PutjAoskEyRXNxnJJyFfTKfPLGufq49UFPe6/IHrecENYOo2zPhdV4DajFX2lbGFbg4SVBZ6fX5E9udlSzcE3HEueb37bZCTVsfkIF0Bw0sOqSI9lnehMWmtpinr0sBsm84Z+6QUhZf3tDRgYkSNtgoysqfKuZjNEtEL/lYn/85/1ugtyTTt9AqlW4T6ot3UTm1CPRm4gpjAW/qSrLKecetdiUbj67aJE7LL+y/3sK6c89NPkWgjYTVTG9zktpsm5x6vgR4E71tgxCLNmGqKy5rD8vdW/aReb1gmd/05wFa3C1zpF75BMddahla/4yUhtJ8Lwvk77SFutMVF9aGc7TU7bHTCYLaMeP60Q8Vm8G3zXyFeOTei5YuG6MOweApmWfT4mPTEpS1CSIFR+Sc8FTQC6sl5N++891Cw/XlxUKrA22H8/EyuWRHxw8jye81Sc7KAkCqMWnOJqyzlwh0kaaGQB+pckzlEx1vDMCHTeceIZZsFJQBJMG5ilpHOnMHCiQgtYehzW2S3LMppNMIc3pa0I5ZJ2RgGNTwH4bGb8a+Vy/AC9nvMpnNC75x0cpDI4r991JNaJzeTKRcX2fevVkYTE1yIMd2G7kCp64RLJPN9yoaNMLHYhhnD0rchoSdg+YrrA7XIqDCbaTxZ96XzGsLxLvp8ybNlnTAwCNa+Yj0+r456KKpaWPaZmO3n6jLcs5cffnAex2usOuIrbRX03hlkKEcEBmH+a7U5bcO0v/LPA1ALfQulI2Tx90dYVhzOEU3Aw1jatN/Z7eFPAg8qCWbDdfj+kXWgMzyLubZYB6Ngv05yQcrstDd5p9JQBsfiWb6r81NIPqjRwbmvSFqgJm+7VWS6HK97QsjAPVlYLc3vlawSJ9s+XrvjnSzUXxf4NUZqPR2UK89vHTPlapQbuwTppFaiFQZV0/5QDQHhD9dBTabbjLwZe0FHe/76dO3H+nn3JzW2I9QalsHozJb1AxyG6rrt9XqXvGonKF8ncK9FkV3p4BnU61RGd6T4kxyXUh6ugccxbR86ly6ZOnFFXujAHCzlR2lc77cmxXDeOik9fjHR/stPuWfbNoZRkNTCI5YFFA391Cxj7WtSYi6Xyvk6FiVEzN0Owc/Y/FY+dayMTwuZX1KDptxW6oAzwXFXWb8LMEHNzPSdpgDAgeeksl7g0d+/tKI3eIPmv1OK93yWlYU4Pbjkwzpgy3ULmure19VWxzMmjaPCLfUr+xPFBlYCS7bIi7BSymBQ4cSh/trX+H4naYUYSFXdTRnkKaN99XPm8BSgiZn1HkiTX+Gz2ceMY3G7m+AyRQRDbUL+GZfHwwtDK/ZMygPkwt1BEjk99B51/rNcTf6qsQq8Q8hdEe+BwrcJjedAKXGvvaz2nIEjEBf3LLCmOLUzR9n4E/euT2Ap+VsfJC2PekxNf+63Ud00tQQAM2fqPOdz04+PEYk6e9i2KRy/XdUBZ3ZoPmhSMHD2g6NfXZ0EnkTaK6ug5n7DCk+7Z8gZgTq0plnzPU1ZkaIe7KGRRKX/Nsxn8nSM8Bh7K83ZNBfxY5FZ0/y+02B14K16rkjauG13NqpoiTOHreGRjIaPXDwvvx9X2qeynv5UZGhQnO6GAxsLObeRlwWt7Mm/rbtXMQa1oAOnQsRAy0Is3K+opmFRsZaza2Hlq0g2Ye7meR2q9Oj0bL8QfX+EAEEeUlMCL4S4FuvsVogigE8fy3GmbtcUisahvDrE0RhSfwmedsVPxZQnYhAW55UyDQtI705nK9WjT+09fdNNqGNW2+AP4PCLs9R2VrBkfxAJrRqWIeCdf9WKzCHYp2uEhiDkfw7yBdTuGSD5C+XjVgV/pP5nl5DLnPZPaZRaKDG89KbRB8nmROZJr4GAVp2ZVlYpjBg9fo/7Dyvs+bwPWiqUA5ywO6CnKda+gHfHTActlS6MHJojFV0A2mf+KS24KXS4IcaCfpNModJAapaRh08iyVCAfD+0P021zejkqJunXEmH5/yj/DbA6qsJZNHJcC55IZLnqBpj98XUA96NbBoXCzv7xetkvdGommuXZq9Toy7vS6JzBVoYQvyIYg7p0wcx/Pw9Seu2grIeQG88GfOo+RRg4nqNlzUKuuFxTaIx04Xw5+01xi+fpgx4Gy/j9Xcv0PbmOlBEP34hhyh5aUfwD3j7q5xxG8xcK6YcXTFGQmEjMu4e48xfP+EcV8GU6bF7QuKXnQlMzxbjVqN8j7kJkhhJsEP5bBGGZLD9FG7nUrWGWekvWNk1fiE43K7prngBfIW51JTxliUHrgrlcXQQd6CwOAn2raW83UF3SQfmPEAP8seNyy02enOKjaCpywQ5o+rNPpDODtRuZd7L4uEVKb7dCLxLILij3uJDjGS3iT8Ghu0gzwkW5Am+P9p1ywsbakiopJM54PSesK085QhR3oNcjCJHCpGVWltnnVLbdwy0OupJ3AO5uKyhYWRLL03dmrWvBwjizaZkz+tk6YKjZWTYUc1mHP/fTSa0y1FsUiiCMmlCuuOSPtEsHJCkq8fvXztixFXq/CnFz/xhTscI3PcgKa31MRApdXjmywVdOIDPzeND6VnG39qcb7Qe9Q5lO5CT3mPLyakVHnOpHf+F/+E6n6YgxkVwYPVv6vzV2RlgjPdtpByazSuuGMIFLBVKIwXVcUMSwVOSZ5nMOmDAAQVt1CenMMbABK4fpPkCggMdbiMsdK83Hh6aILbfOHZXm+vlH8DFs1jp1sKXzr2ayJd7eT3qzTF2vJOgzEkrSOOZOGp/vCeuug+xtEfrqY31CVZv5bSBeuOedd0Z9I4ialCPvsohDR81mWhBA5dd+yW2Wq6+RoeUwjzZ48lYAsoSG/PuOqaAHboadDSIvkbVGuxGV7PKSYcaKiFIWQ1wks9F3HB267qkRyxvx5aKbSyn6J2AUtwFmmampNMrDLcwzeZQD9UrTBU/JgLQHYjZtfWf7GU+wh8J/kpYDTh+UQKkI9J7yWY+b0vcvMUx0Ym319I40YEz/ApnAt6KRuYtpQCuX/8S5zT1JgSTWJLJCseFxy0cbJcVm8GsQyqxH7O01EsMDpD/qsniRnuUpwy7+0EarDbl51QOouPMf9OD3bwKiC6wxkJd59HPT46NfuCCJtlvtjgSjXQ7T33+VHVz223LFJaCbMJWg/UV/xg5FOWi/ie+j1a6XaYvb1zel4ArdaOVKlr+qeacdyMg0UxfE5v/FzjFi5dgiXu4UfdeZlhrtV/H3o2OacZ0hyP/373kzFsLpIsRXGlj7oObybTWACxBKuX6fA+qIpddSQJlB9sN4HBEq1awqz3p1I1Is9W3p5Sg30zz9ek/olM5SidQ/PrwXQWq8ILDXafeUV/lX5gVJyVNza8lBe4o17iyr9A2wqmxx2KOmpmlD83/Qg+vnH626d4xYbNZI/Kp9Yb8IeLzR/BjFZ/jE7hQ2Cas8PDnQZ8uC5E8vNZ+zKhapfCIiRz34zlouNe50HgZ22QtlgxJ+KEmAYFEInat9CkILuf6E1GLzcOtnv43pGYbm2+NpJGcGtlJ4iRdwnxW3EWB0EvZUObUwTjKLUb5e7mB3Bg4hgyqHfXztMcx7Vn5Bd+xbIHzYMTq4puQBltU+0x0MHMRwfWQBY8RAjw4ydRnHPWZZCoYjQ6fFIfGeny7Xz55aXpgCzdi/4xAfaSMoO1PKUVfhVtwvsef++a0z3h76IaUHQq5hK+qwrYKOzQFCpcT/qLmiRs/U8xkYKgArHIGcE7yi+cnZMFQCWqntA2lMKcY9ESAxaHd585ucA4TDlUrAEk3AaL0/G7uelF9T2GaYZqtOd17zmD0BpZ5ttsqFKgk2C4XF6XoehDHZF22NaMdJHrbivAFq1DPNWWMCzVOhTdWUDWODxs8LKiZywoitDosTq1KZsZL8Dwnxlu1USQpWOVebtEaS+bvBGAx4784mQYN73k3nlCVcOl8v3MKiLvso+dN/Ip54C4UwLa15JddpGPWpMCl3XPcU/ELKron9molxkYvYx/mWxkMj3rwAkJ1npm+nQLxlUzan/IClgUC4txyevH9iw+TDuBgPjH0qZwr6zeXemde/EwEsvphqVrk45IW8eiSEzh2B+Tp+yUZa9XBp1cuFVa1GQ7r6IjsUEVjM9WAgcLMzRNmRYbiT6kHMxlVvjVLAgVT4/rejyRLuCzczFd+oMrkwYBsFmYnpSN3kETxgFP0os2wQjy+b4xNCeDeyeKG/JaTMwPu692K5kVvczFnSpARHr14cm57zz/2gX1DMr1dvFgK+QjcwY7oRJzRVUyY6TFy/KIxoIAIHBrcWNdPD64YU+NloNctKCdpZZLFJ8jtwOaGLDkuFwFccAJQVxcV6VAcE6Hb9VUdrRDkLFaL9dIzL2TcqMIv8HA0sIK5d+qJXo74ku+/z2DwummOh6ErTcNro6O8kR4Q060xzVCG5wLS+RJ1WvMwvwHzF/qqeASxx0h36Kh06wJBfBD7wCjxauoJOzyqqJ4gUP4vasva2XjLBrEFtnJO6/JjAHv4uJGhSZd+yTyrVweW2s0sNsuLRd8vmiMHkLqUGpTO4IFU1icQjp2IgyKQ08suC1TYIVlJ/PWPtsMi6NavwY0pUX2zqCv4RurxlK02UTb0nbzPh6EelmsXsk5pjDlRpTbrhc1+4+wgQLhKbGzeFvu+FYGIeRcSTLDUBghWDGrMq9huq4gxIsDBkaRA8BGBtNGNkgc2uxbZ0+dw8CwNo8CRxdFYJr21L7svOW+2TTztIkUSloBgpA9NBoLkeMVq2PztoGibi2Crleq0PZOlWUzIRPjDG119++U2C5s1hYc2n21WKQgIBKYD2mWuXdpjD1hucf2eyydioI3dPUlH3Ck2/OHYaheA/J3rQIkhnmLJAs2YYH60LKeQyoVeLKBz4GsNjMzRc6NQhmpHXju8w/EhTWqiAx7junWQAiEtriSZTt3tN86FHqomhjSM1IsZL+FNotaBLnB/ALYWlRxogVtCWPRwDP8vcocUEZe5FpT7atVVhtWtU+9R7GuwFjQSoofSMl6yyDbGddDPAsBTDIon63PG0+DzWv7wABOr9cRMDsPeFCNF6D2bP8q1MMfOeEWGr37QwAqckFLyZhTyzjbpY6mNmwWThkwlR8KLybaIN1pnl3z1HkO9xOKVM6EYoiUX/KG2VBY0qMVDIc7Ibb2sCUNeIwvWmtFGwj66i1aD00g4/35ltpzwcMCgLZyjPSx1wsGY38/sCLd77EAssZv3nMf7+lgnLq9V1XayztVVeY8kCPsdoI79JM/yzrfTM7euujkcq9+9hWO36LgDBliFlBvQ/66gjHv4DK5IejPBiX8Mm3eWBNL09UUL74VunlFBOKkxhV3Wvr3BvBaiGHOvFkTyaDrIPN6wRbBvz1OTUP2gpUnm6sI/XZKgJLv/q2bN6aRlOSz/+Ol1qqM8mjVo2tFXjvFETdY8RN17G+2vcRUUvE6OBWigZmwRKvFI6udWm90MnQTx5F6LUb3kCh6qoarZbhsRrGaX/cfuippGXPUDvtlf5NTLlxIqFccr8YWTtzd2E6K9YE/61jJXZjLjf1/4ipr1ZODqWjwxdd9vLfYzvT+RCgLwnnBZxOm6V7Gb5N/5/zmQAyvlu9MslwAV5oaNLerlr8JrgiyuXdlPsOp/CQ2G+uwVLsVPDftGfU6WAAM+rBdp/kAk3EvLdwkMt57sdHV7cf0Z/jh67k1HLbSadyj6Lj/Kp+XKhhvMttFoaInSlTmnmIDRRQgroPObEHMhJ6ys171p0D/L+8jHzu0OZnE9pP+Yz/vXIvXZy2smTfEHl/7OS15pJz0fNGfN53D6p7IIVz/XeJlmfHErIjr/DTXkzd9VFwIg5bZ40Y+mZJiGs4VDW2ZOP+83uTBiUU3MgZaRaqtqMdH+9HMAQIl4KEuDL0q18JlQG03zSehMCgKSB7ozwDqoqDVK5hYhhdgveNob6eLp5aqxLaZPdWHYL5sjsG3V5x4WdRMP8cZPcXJ43ffR2K4VRte9k1jBiEKW/7N6d1NmS0gwL5iFKk+zn78CE+jJJWKBp/XJCLQtYDVEalTW3YXNUUmZ35hEPDecimjrrRG6+/kcG2K98n6UCp1xRMokJ2fmNFS7jw3FcxR6Hj3eCb3gvbWoXPy57XhLJ/JtBW4o62xP7OCU8mwcDHdFAy5JdJfU+jAfyAJrfBZusbSKGNiK5QNIdI0RrBk/DuRiR2dzVv+WSQqccDC1tlf+xF7giWjMZCfLNmvwZ/iQsf++FR0H7d46NAL8SwpiqXcYlWk+U98G6IAJI+L/QaKLjmcWoZHr/+1L2WyIPRNaWPM9EKKySF7++oOdF3TabMvgrRnG7Xj/TKmZsJVi92NFq9S54RtQTUEPx6qjnMEIWVWVbLXNm76ZzansDFPMOmuI/V74SuhYSr4WnTXTbY9jJCEkRfqSkeMxt9+iiQbp/pnuNV48QAbYnkYTgTfazCbf1v2rj1sXFJTObxeTSPjfAzz/+ejtYIYmBY6Oo1t65G3q0xxHz+k8ewmIEkFSlw9dzeM/UH837YcoDRegZovnY3Ef8x4+OeIAhMao9+D+e/UG9+3lPMbL7xTrTDOyqnOizyBw3fgSNRwyYUfNR7Hvv5WKdPlnGW6IEBZCTWtwZegc29inVaGZtqHpSdM8NgCJKiOuk8uHypUButsKyGX57CT40HjcgiLlbY7/c+LrqjKXKyNydaxVoHC0+8hqlF7MaVsq2Lm9pvCO4SVbc1DvHaT/xv2FwDMmlBeXB42K0n1J0IuCV8wA/tlcW52lqKMDTETl5qCqeM98EZfQGm5efJP3f4KKDCmWEP6FpkJ3AqZ/7buabIxx3GmxmZctQDh39wD/Bb5jeD8QBshWWV2bxqMn0+QIvJxcpN2b1lN11wPcXphLuP8TirCL7jscJqbTgVCNKCAoP2SyEjz+s9MNs+uKy9EVGiPgNDHgxY8ZQE/F3OozJfcBp0Y7H22vvAYiScERDxWZFikSbMNXDi4lt8ZTECm3+ndAJOV0sG+9t/BMEq8i0X4GB2GuruJXD2oZE18Au02fopLKoC8rKeCVE9rZ5B9fbEK1321yw1GOOV3AMj2WUmjkuTuud/YNUO/Z++KkD3Jw0LlfrHywHPljSOBbOswVrwhkV4XlMC2AKK0OLMqngKswK1QkBC9KD4QM3iLwiSS2pFgtprGhgOfy/39dfvRYjA/XfHv4KlfSOrjupuHwKvIOm759M+HeytSB2rIHSyOxq+yTTMUcFdKldKzc23eEkzdgHiaLWsFEMxf812KnywGfvvhtkq10Ro0MqXvLO8bFQZi69tOFqdMDUL7dPp8hDV9ZEe9aPTTMuBao2F4tRdnrN6eFFtwB3zdzVXxwRebmK6smYBk5H3edm2zPh1Q+zPUSyttU4283JUlYIzoj3HLG7IL4nz+W7HYx/TDkQJ3/Oi9NXW26w7Ga3swPaS4Vmwyc01eudMcokYkmCOm6/AlIOfC0WKUIfNjdds1fpjx0ETE9zSZgT2ZOgYF5BoFNQ8bbQ8fjCxb+9zeMTySEAHSEjAbldXGLYpH+odizJwbUkCcZbWjd2lEwetY6KW5rmWrG4hc5x5igfNmGy5EO3TxgBRZ87bNl9uHFHmruTMMrHuagqawBE5+dbqUA0ejCU5eaCNXtL9tvsiO8hin67t8xgmB1YKPuo/zze9tQRUd75Vt3zq+nwDGGuNeNB08e+mKfRpVLe2pRKtc58/00GO2zv7HzOcdEMSYdxB1r9B0qAjMOe1GXTZewqBDdoIrvzdeMbdIM2wHLGBbUqVY+vQ+tW/jysxEpt5m7QkKsIW6b0zBPrKAZLvT4TnPfFva659YGUGgfqY6hkZ7L1eDT+05xJKHGefMZhmtdGRDm76ayOaAqOFCe8871BT4cwP2H0ZpGCmwprd95d+1VCblcaDrdTLPoVqqxz8EnJ0kTKxTQZK7AH7qaZl89pYcUh67FZatoAD1hGumtub9yhoq/8KUPxbvWaDKLQETJWrEk6bdk0PC8KbEkE+3kX2X5RQW/iK5TZDwAxOnoDdp8jOvV/8JoQeS7DHKBM5e+MEvYU0M+/AC8n/1SoKNZ6cUaDWVhfKYLGVgikAmduuaSkjeqRR+Z6Z7qMo5pddf9T/FwzdUU8mMSWcPoKnUzLARNi1eb/MQaym9iGCy9YCp25eE5alLyuVbJ6fVYMGyz7hoFndjrG+4GY/57TWQJbRM9zFHXi/GreVMKe8Jqe8TVBrN52gofFU0Oc965/vcEhx4LOfomSptab0tFkQS+Wu4kxTe0nloExnSrFeQBFKdHt6iJsjuoHPL7+JGOkB71O47mzs2ga+67lw8DjcHkCsZIHU+PZODllKd1GVYOXFOXtUSrP+YyfZXkywsyH3DER3NyoBDREFI7VINRNyUG6Ep+JNQ9CaGbmRmFE+VQcsgkGyvzyW0JuU+VtfsK1mmT4VEUyGtcNHZ/Y/Qk6gwaE4KzH1te2z4BQw0mHXB3+KSgYdoSZr5EYujp3J77T6w+VVGimoY8YWz2jMUBG7zr4D68frw6XtWxjzGqbkQzQuVohK2/3AupiYGVkoVjwWfeQrKZi2ckVi17G4acWYMXuhtljb8hi6S3VWxCTaCxOsJi8CO8dOy8FcLbROsI37xyMkXMtuQDA6JOMBg+TgOKSSO4/YLwD7tWCY3qWETe0E5m3N7PY/XacSd4SNT0ir6boOkIgUKZdMmE6OuFKuRXWfqgYiogn9GzKcmBNhtUczcsQglY1qbpch2XHLonhJxu7Ptvz3Pnq29ns0rXfW++upsyu2hEORTAFjUQ5xk6ihevlW5ma7Vf8qlW6wLv6ZlX3GoZPbiozP8ehhh8BIJz+Asd3EORaeoRSlxpUGJjYi8TTrBgdp8faAHezv4OwVM8Y/tfEbVdhevy7Cknac3O40j+l5BiWSSkyx+aXWadyjNcOylIvymqyteQcsaJOemPPEzG2ssss7b2S/fcmkEPYZVm4YgcIJ5IoF4Rh0sb5ON/xSVN8GUtubtBNT64ygVp5b5icaPZfnMxdNwxLNb9cFuybNUlzMv5ByvgvV20oO1cvNnRaEQmNsQAh2HR6Xc/WSmvW9L873C5uOWrJlTqAaxegPb+ZKNrMxHl4Ok2TZ3Lvc9KyjzbEaWP1dTjhU9PjJtut94NNYnqP2AcXQFKwqxG0w4YDiQZIbV1PRPuTazrLOYI976QlbD0QIMdd57kG5U+TeMm8l0fccNzBYaDWhG2IsVu3q6jwIUtmYluQu/gP7RfR/jgxPhYFbRfCqDjvWEu2qP4SKul9dr49uGWZkZWQaYdz5AGXDFC8JFedwWUyzZkW25DOVKZjCUzd48JlNF8p+jbNxgSeU0PY6CVwesx3a0yBpI8dLDXS4Qb4ppFJUYKPvuXqpQAvHWoJcC+tNEDajP9FMUcaHuwgWzQ9LHQD+uG6uDS5OWntiT9/USJqBBshkmVxBRJYl9dJc0ry6e9v5P+cTBwtr7+2Ii39NMXDgxN+ie2ZJRB4dUY3aBG2F7MqVS5EL8rc5uObgzMeKAlSkgsjCEL5vUW9cCtmTD0M4SQr6ljhA4EeOOi1FWYYWncJevdHG/F7p4FWP8Ygn9pK/KsmmUhjqye93BjxBBH5rkqv5utNg+1LHy53jmqLCOsVEHNmUIZkVOcu/ZHOE3bpGfwT1K0uFGIgrThe/3rHgyumTwrv1187YZrhuhW3AV8aTK+L6D9KnOAlaTpVyd7pRX55GIgGgFDZbNlKybvnNMOeqe3rJCNtKpFqCzyFhatqbQuK6+fbSto4JXdb3snkOSCZXtd58Rg1rfniJpSgDBa6CKiNIAM2dpRrhaDHeunkgcCdpsILJ6yWV2G+f/lHXbGoZnMP2CuLTZreQTafC5W3BeFIGTGShN/GY5tkeUMl2NekXNw9yBSiJ1CbcTRmGjdQEdDzBYWkgBPpkZ6IZTBmlizY8iRsndTO5juM+mgcnRPnzJfqEaITnhycgcDhXYINgklLR19/qcdhTISKay8i63CMHAcQ3wxZ0fejWdZknlJamw5nAPU5CQN8MCSNKhGSDgNDyiz+bZTNmRwAyhfSXsQ5UBKSnZY92X6aT5caox8g5DCOppUXAQRAYi/PpMA45fAg7LpGF61CAPnAtHlunYTSZby/wICu/3HuIGcvRdWxgGoB3mmxJsNfK95801lrbaTJiKkN4tstP5xaJpy+BWnRkvSve+07wVt1Dye2yoWj3IbGJlpuHxJroNzHRK41Afjw1fatPnciQXgFiMZGXerIaQkKp1u0yDi8IR4ddy7B6+RA7qk2kGbbFG3op1rysp2ohgZzpA1eeR4nKaAuqbLcGFGVMfPkCWRJtkaz4P46yHzXUtp9R2q+38B5gIdj0FV/I7h6M/PxXJSWSuuC+Xp5SHXqkwXwa2iNWgZtc3isl5gR27zb3II+VRIn6JBXcFYeVncp6GA8TO0eLWJuLH63JrZmtRCP3foQQhJZavOcNeoZgusJ4E9ZDKqy5EdIPgL7BaelXWCcVqPesG4VRsWkrt5vFzuBDzeqE1CwWvZE8hzl5SVSmCdRGMxXdpC1UR6bB5aqCHAgloJJshQlh7lEwRpfbNAIQ/JZ4vCQLoee2ZwAdehI+O7hye/eyqV/zv4C2mkL2QOsHWzOiTFSk+djMicowraG7tLNgeWPsKLzafIgVpnxfu9fIDx2uHSd9pkn7WE7jHlzvsXAT46R95ljMe8kRVM7Ej6M7uTXGUZda/FGfvXTjASP0Ul6vM52JMWS5fz1/kxryj3E7vUdmiSI93Yeyzzn5uWse2OzLujljwB/2bTpCsWxFOebMyin1IDO8zCRH5w7c+9Z5TEEbNImY0rp0IgmVxTUCSpr60C/wyhERFWOtGWt1vHDunrsVtxP1GmRC7YPKwHy0tdVFY2Bk7L8XWth4j/6uDHnAtIhW+hayqleJGF0bZm+Zw082cPhR3wk/F2Yqoe5kP1bqTkvw6W0vzOF247+oVcU+bOmV4Fkd1lnvqGJ5DgUMiGL7r4N7DcXAhM9cjxzmUlpCi0u6UCZlbkUXgpTIIl4bDHuq5YaZ42Sq2cyqaZp5DAdS4iGh5ZtqA21ymZjmToxDkLLyBNV2S34gYgoMlnDJyq2FZwXMV2dotW6iayXyE+F/aZsWhhJIQfyfg5mekzCzRU+fW3Sc6Wc/QwC+P4CLa0zpgLcAskMvYM8V6be61ToQPAbdvY0tbdC2d8+gs6l0lcLUuvXFpidz2N77G/90d+KHdSLNU9knvQFS0u2JUlv9ZZixoCrb6NLBbXuqEbJwAzsgx0fujaueB1DqzsksTar1GRVrQgpN4b7tAP+orxvI1mCdpMQcEsh95P1vqzu9bBYEm5zQK4wp8Ygc8w046jhbbZ15sQuqb/kgbXLYglR2f8aOepu45kF33FWOXCel8AETfUp2YX4Qw+LULVshJWqRFAzK+FiHFQ9bwTHVomSeW+SKmeh9jVlHSg1Q2e0m22aQcExGizGbbJci8CIxNucSFD12j8a3N54QVZiuO57tbJ87BB2X83RsG87GY/RGj0VHuQzEoKSKhqfyCQLLo1JtxyiYQ1dslx82XDBwUhY/TIJSspY0lcPCXElCZX0c17tbWUFCm6veS+xufSJjkkS3iNgAOyblXedliAmNPhNVpi76rVIPSodwatg9dmTtbHp6C6ubo8GFwvU91p2ccFKqSAdE0Yf9E6I0Mt9KYIF1V66WyFQtq1naeKgtw7VrULwbSBjKvis9x+DhFM+LFV2afzq4mYcen790X2iZ68P19BbEVaTcnoXKYT/bRsFRYYTigEiYOj+faMfSEo9fqoJe7ly08L9G620hQKL6EQB94wt472u+f9kr7rakYV8j4ZoFdS+/DOB1ew3d4aLJEbd6jR8soXJ7TYVqaJYBJy5CPycQUBVcdH0cKvFspp5DwL1NGrR++Hz1H6S3nU3Ude1amEt2MKoxKPKmKydZE2CbQX8SElEUlmu8vCAnGF7hg2P4N6JehLCaIKIigNiUWCHzt5iYMR5sKu3/RV7XyFN77H7y/LJHPs3HfJ0Yw7SAOn5YJCQZ6f9Wih050B6TRBlywpIbgI6qycwyALmALUARqu5pPgwibOc4og81Yf3Hcez7UlHMU+/KfmrHyRm3QBlor2CzQSIwa0bi8FksAV9v4dhdsN71iteDkl46FtxHgQaoYe3Og0SqNRbIqQ7yvK08dpQ7pqmEA7cTwiu+l31nkwC6DKjn0kb3A7otxvSlKBuaM5g6YyV2/c3JgmYOqcsbJkGwi/22NIKRIuUv8H1XRA0QCyf5LVDGsEAssy4hW8SclNWFfkhpXmt+3xCdYdupo7FkajWpJ6ASKRPIy6w+9ptvYuT+LIHuSpzbtFEMm7txRO5ZYwvE9K159bZsLXVJUT4FPf66FOfsHAPwalQiZg8KxOEBPim6nIgtV0wsgMoSJ8I6+5BLeCRI6O774CnSCnO9ktRtLqulBxduY4mEsnCDDSKK7m6mDs2itrg4ROhrqChv55ETLgieYvK/q7zAGB2t4lCmqzAdki95DXH3zyZQMycTsTg/XJB/EEYdYIbAX6gJ1dmqAzSo+m2K3dMEv4F062OPo1Eg+0Ml0/U7/qLRybwOkvK8U4pth6YDWz/oJZxgzi6CFYQWr5b++uWQgI+irigD20pQpnMiViePFV1Eye5ZnZRcSD6Q8bohg6cnMbEc4zAhweHgYc7sUnTjseZbSlY9yYB9VSIbkWhmuRv2MSyejjOIAGTNlwlPwqKqKMrAio++Zc+XPWo2mVyHCjZ8OZQigb0dfKCjERFWJpqxuLwcaeMSLTgbdCQuQGogVszOddIs2X5/xZE1P0QooqD8WlVMbnKHGwztpsJ/tcjRFzOSvUMboLWP70WeRKCC5pbAncq0f0G2un/LIbTeZ5SKychHGj7fFw9pJyjhAX6Jojw79FO05zKbt2yBnhqqS2RVeiap8nVLJ8tOTzgMj9pToTbj4hmZJnLcW2KGL4Pv66ogNnxqIgOoJDli+t82E4NlJlNj7mRqysmk7yBJWYR7qtVuxxlo8qfoLfokpm1j5qkJhtFDU/lPbBxsl327xzU5V/UDuOUOlvFQHsvN+A/N1DoFBc6q1kPRlS2BwYOM5+X+9evk2VzEvqgmNhOx2zz2MAfXD+LraME2GCxjY0e7nu+IHZu025MbtG+6jYKu6iU2tPjVIXJtsYv5WJAQTAMSe/QxgSzJglC3leXJR2zm0nemW2WWZO6iM4eRPk1/PDhr8nJiWomz7zEHc9JI0k52z/EMGWdbH/sBd92aryHA8V5aAuJaKE4ImydU9GnQViW78XrMJNPR92WaRyJnk1ScKY6iBQqHMk7fJkJKAz2d/OTBqkbyo4p/yRglYHp2MFqvXydMqHOXJV2s/XKw3IbvKWcLj/q7FLxlgrBnF34jhcZs7ojahWd3gIXnEgOIlX7RfZR8HvZryCiCeTTSWjUVPn+Pgyb4YW8T7LPLZQJxdo8TA9DSBVcYisI9ZjRFjufLK1nWt9fWgZ1MveKLfTIUu3rwascZxZCcpkZYaomOIy1YrPavQtJ/gRERF4jt6HMquPr4o1q1dHgV8fx4AY3j/jxA0yW/GKLBY0wYZFK/1fCF3a3YyHy5ukOzHp5VG08o5tno91f3ef84pY60U7mnNq1caSUmx+Z3VWITV3WksV8M33QmGDp43PJeqj5V4J1JKvJ4tYbCEyl/QgGV1xhCECF0UFuO+PNT8tijxHidyhJrtXFviA5lhW2HXpfbuGK/7b1sFqSkhCwlXQPkZFvmsrqRmUBM+Tt1h5NbL3Bj4PYHRKFI4NZISxgHi17iVW/nXKAGJ3F9mlNUO7gqVqzGW8lyrqb6A7K9qd58wt+BRD93KSGct1g8WJAx2ltvv17shC7FyZTeFrIJ/gakrGR7o/zacoKJ1GK05MvY7XddvnGGwzHL2t05oI5nOreQ/oK6XetEaiaXlHpk/kiLimkpf9h2CaX5R9vLo82o8lN14nccCCnFfhrViNzH0SeNID1401ZjrPubjNhs8PLfld+WX1I2t9/NSFRjufEt5SkfP2h6NtnksxEIkCiDuj4puqb/MnUChQxzKRChkc/7T1qpTjp81LsdqdJRti424TYTNE2JIDNFwNJpUcnUDzKy/B1PardVCOmPgYCCcFZwwGylGWchJQLpGmhyFAMSJMUa2FFV5Ble6xC1Q0GVZlqjw1cAQ0UdAR83eniK1Fn8ffzgIlwrFT0Fpvb0hlDpKxxJ/v2rxwuu9OXVnWL4s5oNjaWvC2cGQsUJcXV6KUC32Lv/7w9ItW998wS3XX+gz85LghkZvfKO0Qymoy6In+GoMO9qqcCqgi8VhRjOtqgSMUxZIkIHyZGfpKcY8XyFb4uSOaexhbSmcGkCy+oNvJkf6YKi8LKQElhuxJl1sC1fO8AsPnN9E3nV1hARdu2SCLANpOij/1wzIPIrcvjFig4H2b+EAhnabvU2UVuhhmMSbeEzlYzhooTOSzFhMkgx4I/zuWW0Ward5qZti53E1NGC48xUdxlZcZIX+L+llIn3qt8+I3naJaAbB72PxHlOkENm6VGgb2H9uAM9RGb7sVSaJgvL8Jua6mp34OM1odOiYsSgUpWJtDRRN2IuRH407L6HYARmwViC9vs53tplx1Vi2hkx8OoO6ebz9JwW3T+88QyVAKY0xzDni9gnl0kLkyt3S51SKKpFoihpAgWBstdfKnzeb7RJra1LTCwz8hkCrq4FRgg9pioNmhoOa2R6Doku5idUPBb+DuqTWE/I7IMBYj6w88a6+JnB2ttYCfsjP/Dde83mmXD1sWTx6glU2uZGUQlfzwvpfXZufBwUaQfORttRRThHXNntdtyHinaIwgfizG88h8yMuqYCPDbmQjDpwpMtVtPXHs6k7418IHX1x8aHbHmsG5JK2bDHl0Sv+WJM6V8/Z+NgmdUN++ceNWjcZXBJGuqcO65U6uLCPofodEA66ph8EEbW0X1vuBL0ijjJcghzVxwrEuwB66Wa7fxJyrI1u5HSl25q9AXVbTsfaTo6gkCIb6ckVmFFDQLeX2XuP+cv0cY4S4HYRKFYiPQXUnGBj1eg4fRXkAYn9qMIm+17sxlAXmYcc1xnWqrwRdKsqtnIzPz71akUdWfmF3vWjsCgPUJB6hnyNci8XG/WmdGA+vQZecgO4dewvswL3MLp7WQ5OeHhpsvrhd6Zy2rBLNGMApo+6JqxZSVdivJmiMQ69dZwmZSoL8Pon8X9y4sWw0QcBCW641xdW89QZk/vdNyXA7TYYbUrx8IfiRZeku5+Z6gR+Oj5fSdjMS4+IX4Jm4ZDHRKNgwomrTKqg4IDPfeaiQafC8C0N2bD43FMCnUj+LEpUqsEjcMAtu1MWdfmd8prj1pJ5JQLbc90tRvuCQAQKxToLpUit4rT50qjE3sbRvI7/4S9uPx09N4SDtcUJ1FNCIuZE/llpybDYDbmst21zlBThBTkE7U+V7neky6p/28NcWxFCSvhMHXe/1dZ5I7lXuJvL3EObhlJ0+Yvb5C9QrE5LG+UfbXsQYEHwLvOviDtmnDJPWw2BT9XRIe37VlkpLpHNKNjQRq+ZDq6wPzYChsra0yju3cnkmh8gKoYDBMAUT5qvqyBV+ox+RznYjhpSJk3stm4p3bMb6jUEAMrFp2Yfpf64gguxzBfAU7O1gOh6SvaxZaUqotWQ45l+jZV2ezpHj5LxIxgYJMOsTUKtOWVjDMZEyWtKzQ6HfUQUbvIWvHBs+3nJD2Gmu4/6s8RaBgbAO1w3YAfhjycVhB+UxUdHkCHags67vmyHM7MOqnH0F/PMxhiWbExF3Vj/VVNYZDyED9BYRA7EclevZTaA595D2qcQnG4wIgumujpJeX0yE2p+QhXYFm3YCLjHoBrrZgYosSo+ouDynGmNCJedpmpC6uSeBrKZorV4gVSSslUFKm1+taAHaeaChlEJqQlDGBwaLSwTVoX6kP4UAUJsLt6aLOCKAhCqs5qQyw6nl02/5yigD7+WnVyXPKE0b27ajb9EnHCb2+3g6MtKhBi7tNJECp1kplyKzjWYv+lSd/w16HZ7X9t9GS2+73SZnhwrxUksQHDl6uWXF4Uy3DJ4/ifj7RIMJY5YJPUSfboK7/ydLZmLE6YQGqStblqmNTRV8Mc3jsDxtU5r4QOhwe6lhdyWwpGzCV00EVETtBLqtO+EUPLUSHrYV6NYkvXYGAgmMIduIxVNDS91//lnYKjOwjf7j69q8oEaRMCic8GnHrJA/rLKSFpl6I762SaT2Ou/kPihDcvCnXOMHETdu37Xy2bFzd0TtpuJW/K4J4WrNkbkD+obeI26dS3AAq+VoZvUOBajJKls34VJKFh/w2HsWqi4OKPrSMgfEjevM3aX9u57i/0IXaEmgqpQ0cfhZWDpns8PhwL/cVQdhzoygmR+OptyAhJlKjKQrBEX5d00FKBG1+rQSKTPsprFbNBQzsLifYUZJhzvRFWdPDi67975yytiWaA7Y4rC5j87mwjqPKVVucTZa49U/rzLFEcJ892A3LvCaPkg+NGCT8KZe6gAXrLJ9SdKgdj3EJns3tGKSwWwQDBbISO2PgR8K/e7sLbpO4ujAtKQXfOH4KS2js01CaSl0/fL6I9EkUHPjkfPwS7q/zLDAb6qH7ldlP+jwR0pj/2UyjcWdHbtQ5VWXUVs+jQ4ckBB9LO+OEQtKFu82ZYmDvwczadx8nvHYvqz+UlH37HqhNdH7zHpRSfPHNxhY57HGpmK/9LclpcL8aPK1auZUWhL6zyEhcAiv6Mh/Xqfs1SJPoVIQFOkV7os9rALVWm/SYbPu165PsOHAiUNHzD+gUe3CZPbI9puT9v5NCRIBx2mek7Uv8liR710cC5cLBAb97lkGqhk8VNlCW73mUwRJzUMFemxRCc1g1cZGjOzu9/XU9Vz0BWTRhZ6HYhHYD/VG3ZEPnlFfJC1fPgE849I3e+kXS22SDW56tSku1itnbPjjGTXDkFZ4pJoCSa+Wu17Z0NupDiiNF4I7xyVCQUA9BsRK6hGXFwXSD8j/uKkvLxU3X11VdEq0DSO196J2pCC+NUF+ej/kptXBdMLdLnGaR/grT3+juIt9WRfx5OyoyXIY7DkP82Sgo6QdQ9dgqw85WFkU9c7ztpc5Fchrhp7E+HVNFwwFcRwqQ5HnGAcpSUpvJFiXkTb1iZvCwHP13k2T3XXotDO0tf82Fn/22VW6hA4vFIsKIGl5LENtvpsq1X7lvEpLHkgJ6OJYYtmfUNtfyJrmkYEqX4tgjbfwr01/xawWc9uu5ag0sWlaW/se2LBsCHnRMd1nreYBs7jR3apPMjhsINFLIMhx9dZLIr3/Bv7a/14QVRAkIvagZacggpNUwSZd6JYExR3UboGNjwu97/bVDqnx+lqdr19VDjO43oh8nZdStBHsR+amvluQUfAwAg/IetQTNM4Exvz0akZIXsTsw5oQF8/CDGPz79ftVgrcE/7HuW/Bq5R9l2aUAwq/Z4ncwrECTt/p3VHU2MaDCd4VtEFaZ38GUThQaPbn9L0ifSbmvGN0WgGX+GB6RyUf6L8e1QYyqH09fL0RZvPOsgU7NA76V7AheZPUZ2oPaZQ9AGFNoDl8VA/2Nbi/poFNsyV97Nm6nVJMr2VFvtIQDbziSb3dzG9w3+efTBhAbK3ZCTbGfeZcH3X9wMLcbLYcwH/9Aweq1j2N59IpR+bkVYgfUiPezn2IDh9YTWIf7rxb6G3RoGY+Ylo78abZ5YTGK1dDwk2EcVsjKEp7iFdHQEFwZ3o70TUfEbRetOOcW9tTQ9p9IWrUXA4prIdgff3AyrPfEBda/cw84L+XHz2WwJdesr2NKCFC1wiplRHK3cP56xUumF303qu1uWwZakZ2+Ta0+2i88/OZG6h4536ZogfSAJBu1jqFW62hQ79Gl9z3FTwQA3/pjw4bdEhTimUblR/CGIe4ua8Fk3A3GXkNnzAYJ8OCQRmbwkwEiPc2xFXIeXD55g2XILww9XXQRM/su1TNatwKHWEM0cz5Ngq7Dx8WRm1Ujseb/fJDk31ReLImR9vpg9aGoNlAnGLUHJhLK7kryj1ICKPK+od8zAmvMV0IDkhEHJMfz/AiAPQ2XaOCfKAY/18J9is2vsHsTM89sPsxlU9BS+cRSa4xFHas0/CehnXOUct4NyY2VtdFhsYbx+AhHyKNKxixoKH8GWFgNtOju8On8Ykto8UKRmj7Xjd38zs9brDmgA8rf835yy3pijBmWIctVG/cfxiDyCOxFTb/k0hDxso3+BJKWX0gO5AFlJlVdPS9KZsFAis5ca1M37CNJj0EhYU0sxf/JSj2eKXU84uhfC4W7MiFXM/50YLnUXkwRzfb0Mc+LkJWpZGW2yzR7hfr+wbpCve3n7bc1JqBRXztZYA2d8VJze6eboPMW1gh90+UG+Wt3zQq4aCw4yob7bCssth2HAPX9J6lg+rvdaOS8pV6/5eO1w+VqAjZS6WkR3trqkE2JkSYpy3VwmARzGhKdCiDDvMoz2TQFOZcuZylwlLu3lcfGh8R3DLNJTKOBWg/hxpcDXWoyHqdq8V4vG9orqakQ/ngGgxwiajAmpTplDncsOvaF0TyLUXZCBQ6uoAiEIbGkBp0QmndNztGlPEmRWqYHr0i92aKW5HLdtYtb/lRQRmdjkgc3j+c7/te3+NnDsD04qyV6pHLEcZqnoIEkl1Rqk1fX/pWAsJOvZUoZ5+xcWQeCTCcVYqY5byEKdfPtwFPYzvb5w0NxqZ5hViLcvNd5A1JoY8FJ9n8dex0P/E+BgkrTJ5PbRBTBWWHPmr6sNBQyrTkn+osVeRBqH7zBFz7ChMa1nJ2QM52jsH4qq0RifLOeYw5ryFAJA2g02DSeMqRzgf9qDxljxq1JJP+cSSLo0NtYUhZN5rz+pnXREBPpuv0MsCVUgGgHTdrd3mlK+7nReUkrg+uOVGovgtaPyfuP2gD/LyffQnWt4ozhW4kGOOSFxv+Uhn3IhEmuTqx6RCzqkAsOSmQ1d5kqL+uIQTYAFzlD/j1oPiuwRDPIvGYTLWO3HTmJU9QIT3RpEp8ysqdMQDtU3aAX3wDXndKc7RoHNAxdVWWuNB9Kw61ClwROc3x359pVsuLZHVmcRw+M/vYx7iiqYkxBjUA93V1KvdX5AeufZ1PuvH+afyzmAOyp1RQXm72dqWL9F5I5TgFdwa2CgAXTlDc1xi2jpFIHJGuoV9Yk2qhMeZ59r6WQdSoKXZr/HF49LalTnwDE+Kt4zxDk4DsdozmVJpG8RZ4w6YHmTVKw3iOKX/aKHoKYq7OL7xVg6XEiIoy5ndrGHFgW7FjvC8/FLEfs3ULtTNk8HD/HWxF/rnr+xx+HVCIFL757PGv1hAflUAjtT8hJEiLUUjmoXb3XI6k4Az1+zY26+JzOGOaqNXGBwzoDY2h6h0VFccr/oBgClQ3ouj1/sq9ESehxUl+3jo9ggiNldOQX2erQnxyzZhunkhRfg9Hm6G0jL44XvPGSJffyhzxThqTBhzI7sRSQSyVQutVScqsmVPRMBnRe5XBCIx/6Fb38ozzxFB+KXsC4L3m/KCyzdwgd9LXhKqf07IcO3A8FVmwfGkJ96jX/GQ09Hq0GbKO6OpMf7jIDUWdQeyY8GTWHuWaI1+so9gQpiIBqd2crj8+gwxaZtkSLgdEkaI23xhXJry17/RFA/pSOd/No/VHQNF2YtV9SQpJBLOmf108DS7DuRCOcUWXWbZYjPY+0brBL2XyOGp2AgtkCFs3l87Lbc3quAqYLxptJyAj+XldknddHP/u/0eLuF8bV5hFFxblWBTJhJJPVHnVcoYjnlurW+1oMDR6IpdoZkkEgNaE7sX2uKlYVYqeiCCtFkjPhDsvyYoorELeac08AoojNbvCvZh94nHr9muXy/6MUEvypw+BPRaJ855u4wuK9DhZRM9LIyvo7KpRFQcuGQK4NGZxttBA8BiKUMQhyQxfwGnhCufKrF75LdMaBPBwaIWamUS29zRtif8ZSu53KPzqj2WxejsRH/CYTLBuZ4V1efFGcdxeEkgQ64dx3x1Lc5EjxvSw73u0ilBRioxF5eiIfpXffza0wk0C8HPeJqowK8YdFzP1rTzvSw1bfThFgMUavU+eh0yfHsqG21qP4Dz8+5w1SZx1MwqOOLtwL2NuaUE97PTI40U+UXQhdxCJHkxkJiq5C14S/xVjFZnOTKZL+P2KSRu8qlDKUyZ1RGGgVazmu8V0UIyt9DN8AJkzow/9wAHZxhqU2nwNz8fXqGZn5mHuU5fKRIkeih1wo35QuFb0oQuqmsx4vVVy+Fh7eCK9HQNNxGcpwmZ7+avhBxRT2/iUWUU3c6usAE2UPT2VfcozumTkegvrAfhQN44TNuaUP9gRRAm9WHXyglhR0bfWXKu3AVShM9ZhMR1J5OL2CO1ylLNm4xXNxc6GfGq/pMjHLUtxRujgR0tG27O67qvxC8xnBNxR24QYAWBahxEQencNO21jHdtDnqmt6kdh2siQTv0OirJKvRtxokJRw+rNSGUJTTTMM2PKcwd1rWC+yQfxQc4X/mDcnEEO1jQvrt1KV3P7ON9BxWJ/pc0i2qg0ir9xWB+EEfa5K9XQbxYWe8jO/0hEbjkSQ3qAxmC4oIUqSqk+MVntzw687gmzTzXgBKaCMWH6dXeKCHA1A5Xbs4J0gOxwuN8XQTjCTiwImqAWLYCMC6hc9hDsOiOKpjDqwBDxQizd5QDtGlb8MKy2hU0YO6n+FfE64vamhFG7cAz/PNBNysQVfktgGe3+J7UI7kLv4xSgKz1A5/0RrXTeFNT16LwFjza8mZUAqBDHLocIqFO/BOdsGkPD7u1dq39mztJ7iLR45V9wHyvBD8+nBwM+i9cz5au9KTsVNthEsNXoCtPhxKwPyxyofncNNOSsXEC0r3QL/XqAps0ezW0u1dtm5KLGAFroRXx7whXMjPdJ7+a+JsYJnQetEOj7d5xiiyMStk8XJFHWhGRar7p/dhcEMhbVFtZxHSYvRL2tmeWlVflDRzfpKsHJq81mVeTgdC8SFN8au+/7WIX7T9GCjb6aQxJAm/sBiMGK3bdHD0Qu4K3UFipKHyqA5F/HDaLEgETWRAYpq0oGkxTG79vGU/jkIU5AsxALEDL0mqXhUjtULZNs3gH68DCOKmWHeSCswBUMg1Kz0t7bfLjCobHsHqK8wsOjFVZ1Gls+7MoGr8lHDN2se+goaIZ5mYgVFBb9QDt6LZSL2NbFW4glMAq8GStBV7wfHCP+w8xl1APaRp0djHhnuogJpTVz25bScGv6fAwNLagxd/AV3CkQ43XStGmzZXWfHDu35+tVABoRhqy6ihkFAUJxXaK0zllPUPTc6i4lVU1hDtStQL0K0oQ2FBDfg7FzR+wcxC1WdWC3/1Nzvf8k0/TrLJkM2RZeTAvU38GCWBCeIDzrTqOonDf22sfrtEBcqb9vvt1TKZE9h1syAqtY/hnJK6/cqJIZXupo5RWphYrtO2iuC9AqDBEllMezdiNUJJfGvr0gEG7gld1dMGBVWl7aTKRrWv1HVuereRU9W2ZvzuccpPwdA6ktecH3mRqyRC3SgWVwKNhN+4LXoZxGH9g5KFPX7p2OJzVxE0o1U1Av6TSeFtluXUuhnjw7pN595tXAVh4hdXLo7Oc4/HCyN12+HyQLs0ZYw6HACjIg6ZvjWvIUIUhUhvsbper/lf5E8VqEIl5RuAVMGWwo0nY/EpZ9tnWxD3knbU+pETaKpppFz72CnLU/dVrdvZQj6AUVu9b1Xvn7f46OGlWy9xtyA+mzgtaL0oTpHuedw5hMITMunfF+jCfwJDiHOxSo25x/Y+5ePD9y++VnM9vstGX6Md8Byn9ChLAeUeZMO8oRg+o7V8fx9cL8dCgx0xU/q9KYkm5OnnMe07hMh60WOG7vSl6gMCTm/FaSfKOdec55DO9bfwBwl0uj0tSHDvs0zie0hNj6FicnjJLRUWS7xFulNSz+usFw747ZK+Rqu25Hj+mWtElq1Empv8Bt40x1SBNkNXQf+7XH3f/lHQpeI5QKQdFAL5al/VgYLufwUHq6CoIyhj8N/8CTHsEAgnZDBFPo2568AbHftXFi8tyhpwqgUYyzVJP/axtnetFJxqqKXEuUItua0e/h2+uh8hQnRlfRKwVA0tEvmnMjW5CXOrDncuov3et3G+fUYJu5W3/Xw6tC7qComVVovfiiDLav+BM66A4BGPj9DFjGw5FiJys1Vl+7WGEIWfkvxkmoDc2j7M+XWmp31Haed8mS+GOIsfFY7Hleqy9Vhr6mxTebndrlVufaebKnmnD0FH08e6N+seuvm7RZNtgl/cUrWveBcW1YAamuyXH4STzzg1x/7xYNNVKGh9UGKvwNKEk4e9TXhj/dzysf5xWjEaYpTnzkAJ8HJUu0Oi8RAEPE04prlENy/P7hP+zex9mXN5GPtxEWRVYbXvERMuFD7+CvNqLB7/Ec653lqTMeX2b3hIVlychf1FJiwMoULZE6c/sODQvNQkKOmcfK+F94JjwmSayLH+ZPJJ1WlvsmfnCWAaH0aORtAurI1aMb2VUO9Xj+spf4gIs77gGnpZdBfguCAklL13/ldatcMSyh8zrD+UWSQxpHZ4nrHU3ocntZNyMm/X2O7ufUi5N8vc34086l+JRyiNxawjnlwNiQ9whBdklfktNfj7o3l7+K79FrzJT9QFQpIvTJlt2ja8YOSCgKVogGiuySY0owDeD06UO5eAL0W4xUgUiIpr026XvED3QAwSorBefSmmEdgqmh2Lw502Oqrng05JJvz3IVa30VQGUQ1+cHHTQtkUUWjd35vyzopDZfGTM+o53FvM3k58qbSIN4gd0vIRVtLPAvf9qYhPifrBQHz58XDnrX7YRf71bim2WhCICYyS3SbP/HWs815CrrqwHllTblT7JlaVniZwk1ShmB9w3Iq7EPcRnI5cy8+sNNklYAqNeH54UISLtLl5hPiRVcyp/5vdSrVrAnSSJC9XDP39lP9Jl/BDiD0J+uUO3tKHPBb/wI8P5C/aTMXGNZEhPNYxEM3v0lUucG/g5FkBW/sqO0XBZOZYw5ValkI9qspgx18Px1N+2g63nc3ZOiRDUbiBIxO1a3PyRFSHtg4A1ib8swNmVywWb/JGcQ9PptgosIq2swmOe6Qn2uJdhSs5vyCJSOf/NtuOBnwKvotyUrLt4PMyLiQxMovhdCFhiL6U1Lf1GG3hOxIOKEmOUGMRpGrA/k5KHiqFrrt3ne5GvFU8ji4ByGTLQkTT5P1SJ5MlvJc0g6r7Jr3w036lzF03iQ0uMExil51U4YaRKWGQp3FwK3fojrxtqvN4dCvknBOuMIKsBGr8VdaH/gymy0YjJQh0YRgfbXERrzEkgJ2+9WEb6qMfc+1ClJLnvSoBp5eSg0XLxM1Brxln0q3T0qULFhnTDjGXD80x8BrdN1zYuphvJ6i8bbnmukQjF71rCyLNCvePL1wBJpnhY9wKb7KFVfgOv7hOwjBNJIGLq2vZVfArOynt0pm2Lx3cMgeQSBDO2hjhde9Di1oD5vEMFwXlOcgdfIn1VPQL2nv1izrqLpZUoOMGYuTwyLcYoQBgqUtLW4i4cn8WPgzCZB527naiF7XdCuaWRuAQs+Z4fZn7YEv0+0lPuRkYI3OWecI862PIqwOTQuDd1QXkC0KhyMMKl6sSVOT3D6jKzroWMVaqiEXQ2ozG5v8wMDD4bA+mrQoeR2wrnVnMDvHjaDyvStEdexgyuFQp9PfIHYctsVF+HQAey1iQ+qqw4iqoWpWXR6MdqX6X1J/Yz7LdUHdKv3ODc2502e4/jbyqlCMYHBVJbTE2MWAuDqk77vNZLrT9vX/PO2tvV1z1+o/ArESVFj67fShZ4nPBa4/3ek54mkOwmOCosGye564W0QKI2V9jAUmPl48M8QIzcxZ5s66dUKQl2fq5QiiZ4Hjs8zktyABNj23Dih7PpGrzyf3zmf+flUP4/ABXw1zR0BCDzZaR3jaJ5juDJLgehFu7za3scINO2mecGBlR8IvXbp2ao0zFI7EEiCzAGeTugYsSG/vsKlk7zEjIivyPH31DFdh+LoGhLl7Rd6JJSpccvjlfRqly2LNiUMkFS4jvxVLhwHrBXlwopR+9IY4oB5u92zeonsDgL/Z6RQP5txxEOvR7pRrwOLf0vJ1mFQ30LSyE4fYnReEf8dHe5KW1qmvmqgtkDgnoA+3vT5HcBpU2Vb03tr9nTM1sEgEwYHOFFiiDqTrQwKQW5ptETDQyMeRb4Q6JzAcF3UkDOgndhzpPlSXzBNhg5+ZjVgrdh60NDDmYwrfX3YrwU71r/X4lUWcT+CEx/2Kcjtb8kdTVdVeP4y1NIUogK3y6pJTp69IPvKl1G1SxMiNNikTgQNBAV6LrqlWlvImQgCip7XOak+nIIvwBEs3qywPKoprDClxWVMY7RnxWjX9uNZBW/Ul8V3WPJfKgO9nuzOv7c4XsVRh9V/Ml85VBjzIkaXHMZSFH3ezR8gPmejQU0j1YMBPlFo/PfbzSMwKBa/lFOzRyPHWYjHEF1RNwtiX0wrC2MGXFCs5weQud6M1MOlN+DcY3vQulKJR/90zcyYpwG8JE/PzKYW6hX59ByGcb2XZdrO8MRyY0RXJjMyHvcN00MMk+i6liAi48a3ncMiHXKeaGPkvfOVbq9mWJ6pZpAKZLUWncJFWYMvpUSKIoj7Ym66SNVvHjK9DUNqLRMUtLfL+pXhX2wImbmTuL3fpXSHgiBz0HC7wxoc4xCjbJ+vQFfB6jNPDymN6hin5rRYz0qJqkTZoKvvSj7Ss5wndYvcwWPb0EKW+IoJVN8zh5QhgVTy+kmeIH2MzEXBxMteq7bheCHNBG5I4rNhZSMeIH4K+V2MGlFgzWBKtHmCfk70tYSSiqW7FLxiZ72I9SecWGfHsD2Q8K3XNlDwsqTRm7xVU60uuwTj2Dm51QQmVSu7G8OeX3KqctQIiI7+fQDZQo+HkGvfggrVReXiJcxv2JvWOlGcNho12DUCN4jllUMO6AWSSacqVU8SBoX59DmJdXoTzzq4HqrzG5Vbjen23bbTJcvmGCWl5csHGX/9lzG8B3h12J6t9nCBuVJOK6jnFSNinJR2OQ0WGwcsoid/bksBTCZqPVk75NBONoCFKdEMOlmude563EHwdoPsw4LV7OBTY8KPSW5HoV/nr85S5+wxzTvasey8CAg+bqa+Tc+1XB1tCYxPx/8b0UEqUsQnVgfxRiTTAMyyr2qC/X9Y+PHEM29DD1Y+Ul3q228VwWnV9G2BPmGOCdfhrPNcwWKSAMseo106Gj0zii5DSBkERLnMweovbfluOXTfJ7kUXVIonmvKVmuAyRab9YaWFospRfiUktjgHeNKkmZuSoOO6NkFhiqjT59qH48up2gOVbDOv1H/3RUJwveIGXEdGPq04hfh1fqqbVFnIPr1fXJihQ//m/ffQneI20P1sIOctvdxZGIXBWhsb9rGprrZwf2Vz1flUtMD3ylLM+V+6xS8a0jKYA9WM6rsSXDTRP9WZisTsckwwR+xGA9I3dsei2peXi/fWOVlfUwytUqv9anRO0iYh1r4v3zox9lcd/VGR0w3Kj9QoJhZqq3Sy1SsA8FawBZO4zC73AxicKi5QtljTeBwedTgdSxM+SYC4TGIdrKWnJI97YbXmlDOKBvmIso2/2uQV0N/NxDchUOZer8+nt+gNDBiMRc3YNy91IwjV/2R/07I6739wED7lizvkKTevBoyCpeAWNC7RoQOsqfCFC8izPmA+Sdxe/soyeD0Qxb36O5mZbpVfTsx2qaYc3ZteJOQV4cTwCX40r7Oa1zJq4Ra5ijeHkw7E1BiOcpnwERyqBIUTMontYHyHv0SG9KNl0m+PTocaHImWfzwH0vKcrN3Wj7p71zyXsej4SsIK7XmPrgf6PIQsMEnmbEbhG7yiZtONnidgZEGLbhwbCcFUIIahJ0PjG8oOD/BtmerVFzQY8tZW9ZM3+XSXITb/F6yTtiyoVd49d00ay9odm6NBKz4Riz7pRiD9iMBRE8nbxA8mOCMU6tYK6jgZlRWi2nDwEfrMjhcFnUEPB2qK0pZ18Iahpu9+H0rdoXFe+lOofAriascPnkQCxWWRav3lsNHel+PAH+CGCrxm2A2sEJHOl0G0yjqtShhwB2hyfxKvUkA3TRjkZwo56hm1efAqtpPsrIa2vHZmKd3uO+IessZakqmeAOqHRchC6/UjhMPTDv7ZYizd8Mv/UTg9r3C2XBQsmUqEojtMpBZvz69q5XvnZ4MwCdVGDWbSsPlcoMROhv0OZLkK5aHVHcKIbPF+E5KyMz+IMitgR3q2uyqXt+2d1sjT35Rc8V2NauN1+euEa6bRx4aByXZ8Dmu/8CSVfGvSKBoUR6rCIVQquag1GVznDNTlqcDtN533DCQn5fHDSLEBef58J++YpHzJzaoWtRToF4rcAImRNta4+EGAUfs+YJeHK7bXySB8tS5IyyK1LpwhSEykWgDKs7tnN+9xmlmFFCe7Cb4uZuxF612bTJmxXBkeG57aN69HaWYhwyqwAtspYZiW7hLpwCoZddWb5kmpuKKPU+Iue+anHUdgdKlGAUZiD2bH18nWvHCs5cMpPdYjpwSHW5MqFdsuZFj2eJJ+RrE76AxH5jN6MnzC64+Ki5vqdo1wpHwy0kaJP34Ccoe9t1uLiTx98/CEQ9KALJkUUQ1U7wk35K4LAzJ4zrhcyDdTs2+TgbttxmFb6cZpgeMvZ06stQA7hlIDXyI8sK6FG8mVPVIo1ykCr7StQxkRF2j3HDPMUwKgmEdpMuqy1aD8B2rcW4SIX6IHljjwkCujpQbXw/+3ty49vM8bCNidFpI6LP87/Mvxmu+QzJMw7XKq/AovsNOoSE3a1tAgzy3TiB5JrX2aFpUXliSq5f8PUpxC0VfnRIiKNiAyCyTBH+pc9E5kR5Tr92yKgwySXRp0DFcPL0FWQRll763v4j0DT3gI7D71Ifl5Bu4T0FXE0tOX52Y6zJqd+qHsoFiRxkZ3ONHENtPX2l8lsCHtcJnw6Axhue3J65XBAVyyetYgwU+5MFaWNwHKelzp2OLwYKR8q2vlyOJh+jIiovPXOB2Es1PLLL0Rjhfh05ihH/2fC5t/IZOV2LxeX50eAuAhSXfjmF78giRb+vVIcXz+d/IWfEtnK94X0dwUwaK8yrynL7cOOACPqdzEmTD9tsR9ErwikFYx+deZcpEk7B7vZ+7vPQaLUpYVvwDy3XfJDNm8rqAnE+Mgf4VNYL2TWvLcev0Fal6PLtySU8jJrjf409Hf4HA2n033PMpi2+KAxJlBI0t9hVE+kCTxIQFQxUui21Ex1GpQXa18L7XsWCqg6ijQtKSdq29Pvv4fw634tXbZYgIXOmPER64WNssOgCPrWs2js4aPxYqCjU7TuU7lgUXC4omIQhnil0GL1O3jInyU7CWOOiUiw459F2oJutpquhqn1AtnByJ5fF1lt/N9FP/3H4ytPeBhUtZQdbsaaEbGMPT5F9uflSbdUXx0sh4DUigQP7kbUK2juajhGyJhigBB3PUGpaaGB3nThNpFWTGE3fCyjHvgi4Zs3WM8bfyDsYgIof//3Upt1SLVdOqY6A+OK9JK00wEkfXqZe5bapQYY9QvwJ/T9Gm0xzWJkmkD9SAP+1qL/kMwPNYYKLlxffanQjmwIt2Bka4lJ+v9h4dmUVd1kYxIq68T/v2O0ZLqJfr8kPk4JPwbvgcvndBeq8RfgRUj/6L8K8m2E7KVXsScvKXh62aeiXl1xhJOXhucGuKuhzm2twURjwJhHS8F3JQP2WleNYceoEBpTK/ee1XAgirV+VuaYVrvXydcHnOjloKxWeBo5oJa08jwfosesUssLEug511kekneQuF7sUP54u+qZ0rW8hPkgCoB5l6/GOyoppDiCRxgareD1PEAiedIipM6ZUTMXtcaCvYl9rn3XgvhjxDhs8uVRfcanWRiqkEciuW3X1AgfmGCGUlfFgyK8wPvr1U3yAeNYm3NSV437SJlBYvKxCD9kFbR1NU//fJyWJ2m1qbXE8+7H0GfVy2iPepzv6FOCxS1H2ZZpIz24uhh+Gtd8uvxj/lTNeVBKENa7XP/vurfLND1P3yZlctkWQSch9np5p5x+PI+asGqaiutpEyYwKnB3IpuEnF1Iu2jA/MpY+WyVuDsw0/dNDx2FOu0sKym9ZH7/IKPaNSHlitPAIRWm7/OBdLBs9UJUGTXgkVlg1W2JJ8jYmbuKuDQu0BgjtA3sTfoSYH9I6SSrFuUN4jGUxMOlZx91m7vLjbUeWKg0O8Csy+qKKxwkt548IO9vaRVR3dPnKIc+CRGZBZFKpuDhNdu/Wc1IzkztnGQYyH0K/L+4KqJjn1NnlSgBfm3CTPbOAtcfue6yyssRwd61WvziIxAAGyvUKw42p6RRUFvxNQ9bRhY8DRHN7jBYpD5yJIz2Fy7oJGRLRHFcRImbEsPB4CAIsW1LY2GLIrM4AcHxRuw0nZTTbvl0XHolHxqZfvdtTv1KKGK0NBdc/vOr90bRdyTxKHXV4aNovo1e0Lbs7LCILsKjd/+jSE889ILEborz1VnZaitYwJw6UAFcdN3lNmB5degw+a6Ye668sjpmKzjovF62uxh6Kw++j/6bu8TyCGzE8HzcUbPimtgRJrbSlEkUxSVz5v3Nmqw6YSMRHuJ7i9ry5Nxi91qNNjY0ekR9VQIPzAnMdZd43zM3pTEzg1u/TdYMOL6/K/BNkicz4+Uopy0DtG8ejDUqN/A41mE8Oc363DgSzupyY+jyp5VlYqlO0uVayryuM6yo5uKnKTEKNCKyImsx53mzICm9JzD+dgkpmJ72PQv4I6q7hS1FzRwAFyirHIF7wYnOtItLtiulYdVLbjHQZaK7BWu2HsynQB/bO9WoG0eyiYutKqQqEc0ZNQjS32+87IMHzCTziqGaMaZzGNO1h8vx9PqpxjZW2TYlTXXNPcG9H4z64Jm522aiW4EwZFhRPX3lW9sUCxBmFlcrGMApRFKpW/BcEGZaC0gXbs7/eOiNer63N5AHi0oeBpoCDTYGdSJEcD6wu/C/7gyOvcVZr46vRjR1cT9bRm31Gza28jGC2tu5HROrfsarm5mHZDV3B7qFvfUQbH4SpQoM41hV13sG2SH1qJR0StB2mdh31kzjiE7CG8oG2B+vDZcfE9SsOC+/jQeIcNfvA3i0PKQSkbkF0PLjKiQ5mnqNbXTDv9CsQL30Kg3sOFTMjaQDk/8NlbvRpllC0LloOmpCuq7BJVwlE5DT1vAaruWFmEkycV444Ociq5VhWOArfJpOKic/hv2nnD9n5AWdsVfGeNCN0MukMVzvfU6to5IAlFcZO3orbpN4g7CZZVORvj/KNdyJ5JCpBTBzZ8YbDzeDF6hMWKB388dAugGcoeCZJyT574mzYUzo6XLHuGZ/l0ytt4Y4KtiE2ydB0OdzcMvQ918YXiOtOCB8zXIiYQz5lj404LzncaDf/SBCcpUpXevedRIThrTDysvPD1AJAix4EKb0a0FQvRzWlALGr84alhRtHce6f6pZddnyCLSR+uPrkrlDZaLuuUf/baR/vwZtNUdi0Xbnoq/hgrm9cTW4NR2gJs89iY4WS3/clU531HpcFyNcX2mMrZ9ocBwytAinchB8MYawi+myeFysOrodAngx/eon4jiyZITrDiP2HCft+jjUITHRdXDm73sJHvlNGKVrYzKJEEvqSyIQgRinGjrIy3p7xaimR3ObpTPypLQu2Ik/VNHhlENb9KtUzQmw4rg1zMgmAgQBQYaHey2oS1TGbw8/BKwHenvFXIvqHPiyrlImh5nRv1J1Lj+to/LyU2xqAo5hSBcUMpbWA7mlj0GbmNrIVVwPb1cH+ugLiAr2K+ZpXDjsTygy/UXls3o90WwWsnKxM0ugLs3PypQRh/7tnMvbUD3jKV9AFN3BZdDU9DV3X8aHKFbOXH62/yKAJ9cssimvulPk3wm3V+77WowN+q16xgTj/CXjz6EJrlUiTnEKPkglQhrLlmieMy7ABNHLJT0sQx+zp82t0TY6n9ymQVqoYZsFlAuYecSUu49JQ0fuWklKo+qW14V5sEsgxDh0lpSHOiA0l/7pV2S7pxoH0bxZoEPUZdIllVpvUluK7qZQimVZW+wbGxw1du6+hM6UOvwkkVJJ2DZw5gwFJfj9xmTnAU5cGvaHgdKGY0JEjuNVycUPSdsHpvneS1asAvR7zlpgKNLAnT62xiL47nIruBSe2mwbi/A6ziGnDy4ESACU86GUrrqDGlCN4gOVKkRIv3HBSshxQt+qYRbJkQA6/0VE24d7APr8rfaIAfBzz4i/wdQoJ/uSpObQUUy7D2sE/TNUx1G1mDiGzaCisqku3HaWEF/t3HGxXmeL0Ca4DNwUhgwTGiHX9s9uKe/xfdwM4PAWS6fGZfdE5YeJy9VLVnCasigEHSUwddSOBpKlKvMUI1UinQvpPgDXqEgUXziEuG2D+Fpou8Oas3H5WvgmkHI7rGxAWZjVkdRmY9cIArvsRFFPkdaHViFCcOtY9N93UEWnRFXi4h/kgjjy5srnbgV98HsKTW7Q6is7iqcD8cSqFsSLvQBlIVYEFbl+fXZGbB+mLBHdn48Ub1XAmC702b8UuxwNd7wyG6QKPGlBnER/qlBtToAv2Lo+w8Krjh6UMh9qZZJnszY8DMM4lxLE/BWmeMU/LCxWHgEJ7MYSXABJ6FAMxnMxgMh+YvZIVyXS7K4J5nM9wRQqxRq8+eEOlkDddWT0c0T0nN0ZtncTGpQ78Sz5MY8r/tQYVRMFfAcLLHXWuTpc2pra5V1ZTME0Yyly72rIEKycBru69qghDoJZoUEl5p+80jZ6zVmq0ao3bxzHHVSnSJ7CEsbnLBcES92QecPyPjCxLiZb36359QdK2rZjsS0XZYZUkUdxuVgGEiqgdGUyiZ3IxGv1jsiAy3KHIL1+UgjLJHY08xDIcNq8OOsQ/O4G/+pfeijMNNKlCO7R9tw/O9lID/5pfRkRa+023w1omLNLcM/3KLVWHNOUOUPacONBbctPaSFGS6AvUZc2CLre0Dv2PCtzj800LcMXV+PQxwvTQFSx7GS5BCDldeeg3cFGiwMJM1c9RHQiQN74HXtPJBjuLVVSFXbuamb93ephze8H++2jZjFRRCONjbcskP2Z1SV/gQudWPNmBe8qnXDsKQVD72pn7mgE7p1lA0vpQ0DCnW4rOg0xhbwEqfAjGE1wUABE+aBHA0rnJ9rZudPGhC/cc6/N6DU+n5LOzaoChOF48mnXDxcPbPRDpa4HtYguYgq5wFMnR4VlmcbtAnBanR5KhTVfpbgG7GuDbojRJJdqDrfjfFhNdWuOpaA5vepE1jRcY1Sjxun/qUIoQ7aOJyqpGb3tQLwMFjjZNLb8n4fUFi5fOjsU5LgvgaDbvZJXDvBOs+863fEod8GgUxpdXc8W43kkISE8g73jswrIAbFQnDdvZIqPAwLbTVz62/SGVC7s/yNa2P31p0XuWyuaPJvgJdTjLfIEFBH9znoIfoB7Xh02XkGch7qsPuGoURh7GHI5AQnX9GUvLkDeK+1+XCfTMAFs8z23x4jlSeyOwuXYHnOoGTu36ctrtEjXAsUhzwRDL6ifXMpnlNpYdd5m7Wg1Xt0R/wfwmA8t7GxyJ7/ttbkR4jK/iE93jPU6QAlSeRCCaQ5roeisX3zxVNbxSkgc9lClTvltRUoNcpcqv/qGgGCNWsGeGjwTReyS5Hib/iZPXSboWTvwrqnNQckw/sdE2aS+VJDohRmi8AvvFYWHWbN2oXfDsTiTgaQcmhoxP6X4uuV82L7Wp4BuQUru4sHXAX8iCpdJo4XsG2vD2fj2NPTm748sNL2g0loTLywQJEe1IMO0qv997zRrHjy/Tx5WYZmndbqHwl0QZ1RqA3+yLrY3P2TmFDOgBS93UKI+Yq/oEyRl/c4WHotDNa/hce0Urq4fjF0i0h57+LfetQIyg3Hkx1cLRCCGqqkfFSQ0/ryy4FKWXpttlQDRZQuLgX8Mp5cA7CWxQMdBDxH0D1IooUuGL5yBSxotJFmrsvWJ6qcZiG+Km9q1sgkGYk1mpknGZLj9kmGQ6QknPomJKl6afkzZ3i8mmghvWI9YSR32Y2Jcu/wuWh64N08/8orXgLyyywNhKZHxIpPlIprqVO5wecgWaHBMQepuaTnzxKAu30Y1R25VpOX/Vy7tK0NQvRipRylgTiaRJuBf8XEi21a+oNsj+qaiAUwW51zaNqKWDbaYEvzA5G3l+QPFENmRern57b5H1XS3ZPwTGom52UOnmqahCZ44YuIVnc9KBouu+Fbk8b5Mok6xYMVMoqdi0b8zixINseu37tfrO4MDHl315Pj3qSxpc5G/sVmHVPosSe7EERnkpclYwZr6Kcn6rW7vVFS32bLlY2qla+8NwLyULdf1Cl7AbX839s2fBQ8AHb5+b9l6bHDPp9+7x2knMHiwJ6BXhYZjDWZmHF9mO2y0TGPTjQIm5Q5XDX+y7N1CEIWpjDzgX/NktgFqtS2mbfEqv5fGjQZsZDzz29euLKCT5rYkxZzk7fOjCGlYRgjbEZi7R47/0aOPMx7xkbdtB1DpRBJ8WoL5sU9PAzR63+y20FhxiWhyO2d64XTOdjkM5o5y+wXxtRxY7wgtCyV/38TZZ+SI2o7yuwl3IMl4F2gzAhqSP84dt1nz79Nms2o/4W/Al+AuUshMqfLiUoz4fqIMzgcUAYYnpSsRigFK0H4OzpOa0eqtznJvnCvC8bl4p1uTCOM5Lf8oHWst1nJcBH14p3cbtaajwEvQvx47tshri1YdQ2v70cZcb5y50c1EcwFNOZN/9E5XIo1FCQResTnXPG+SjQB4JtM1IuNveu9K23VDuvnxnhq6ZKWMztoXyb3nhaTHtsA0SeagANJFuJk3xfChHt3/t0U+6FimIyiai557Q0lQ7Meudbvvj4Tv30FWnSP/1l29HPGATnB4uSERnBDnOT08fktV3DDqz4GuNrKQM4xoPhjjB8xjE2lvP8HtStWNvFBK3fAxf2+pChBdZp1VP9CTVu+LdhQBbtQBftFzhqrEVCo8UhY1mdBOM9dfUMd/utJx2P8Hly6Mv0KXMEIDhJoK05eQ+ffixXQJ+AJaKxMdWa+ZHRfI5sjNnp4YaD8S687T0pxvVJNzduuDa1xL1EGPt7OrSAXP2l4QOfx9l9eqSakKrhFFLaZHveruRudmSxs+F6dawjlv3HjDXmvqrfEY5SCk+dzOmL+8aMX29BnTyqb+l+8I7EU+1eO4ByYJuXxFX+3Jjewim17ocERcbgx/OrNs+pBInn6KxTTvdcLiB9OQr7Pj1sb9FS6WA5OrmwoULHZF0e3nKGbHsQsYH/SBjg2hwtp4HaOdQtT31TGqZ76vX6cZZguhgQBEsOVCqVX3Vt4cSTo1ogLwziv41JqA6ENPdYko+0HUht0DnUHZ2U7B//cc/r5pjz6eOKxq8UyOCBCzfLyU3zpru/q1VH87seAdjbqPdz3j4k1WYYni/14ay+Pd6p3atMOt6EpqCZFfNvAKohzJliIHAjve58rfjHRiqpAvn8bohlWSXPjngKHY31PqcGH7DtlsN5oeprSypPx2RNp9w6WgLKFZP7x4gPXqoSdrXV60mhy66tcZVpSS6vZtt9B4bCCXZpRoQBA5lbKKeHyywSd0/7u+/bZr0a7+jkHeNOT8pGJcaU+ygWBHZO3RprJMl9b9mkLVPao7fbmWfVnhhk4ZuIHV1N11qWq0a794uP2GmBtzoM21Xr1kMsd/4hl6Nk7SfR+GZNVlnl6bZpaCHzqD30dAXRyqIjf7SnJvj8+HkuVcdqE1YW1VZ7rTf6sBm0oSnGRbvyv/CguquxlNCZwXFmf1UAnA1Zduh01e9YvHCu7FHM++f3falwfZY4s5KQRjC+Qz7FiaqK7J+5PLzSyCiWWwKeqzuH1CEYSXd039vhE0U7DBTBxCuRIsOLl9IYbp1r2rQjIDj1bkkgg8Vt6rddwFE0BQ2/kh5uqUinoH8LSk3FCgks20jVHLzzUAG7FkZFf+p0/7/G4WrOBc5nSER4KjZXCN+szH0+usrvrPidOtNgg9BhJbR/99Q7aWSBaIwgWpyuwaiCvzI94oUPQlrXdP4diaZXQ4hwR5FrjbYl40W5f6Labx/IATOdQEcEz+e07uINVW9K1i02IR7mgD68xyHHBlx1x5nCJdQj3YqCFBu8KGLsdPs+YEgDDOiW05qKmI51d+Vd4VEz90F0P5gGEIYAROV+ttFQVpmy7hRBeIfHP9rjFGsqVGMZauBiCmir49KyK/7EnQTfhgEzTCycW3nENSD96MvbXVqoiT6N6OBnaDM+ajcC6p8tRpD/bOFt/2wpzSqczG/n8agahYcrLj5AaZSM3WQU45tjeDkMfzMY7SAfzyWtoSlKsmd5HKsQPMei+VogLwsv7oK4tIKWEuq54CAA0d4arW81/kws6AYnE7TNsL2S+AQd8HLXcFtYLu/b7qRv7DTzQIOUultvhcm0w2a/H2xZCpoaS7lf33o22pZyaPyqurNR8h7i7a+cuXzyXZ8zvYs19ZTixHKNeqxwPw67mhkpzewDYPFC+98dfzECLpFDTQnDPQQHBLFa2QMr74AaykTZBdK+vW22ChFHh8TwW87l6ThhNo1YEjrTnIw+OfSTMcwOrcnTAgu/KVU5zsuENFs5768siaNaqQ1vOWJCpJJAXN6tcLRNbigtaMpqYnZmzNWcmQAWQ9DyJbjs4A5V2Oprd7n2EEKq1g82o/QDUVRsv9F6rYZ+PvU4eIlPqaOCMYqPqb5dmMp5rAzeny0WgUYYUg3GPYq5Ov17pDmxO1YppAHhmZntDwlppoCQhiXyNzZUsFAJw83gAvEGmAU1xsciZDhYaS8C1Xc1dbYOfT+3j2hhACJf0vLCnS/rMbD1DgxhfteqCc9U0X51D86P88a+fuqmg3JjTtPvwlg9QTOf0qdKP+wikcBiBrI3BJjMDo12Z5X2NS1dB5KwWEZfUhJNmuy3MEauR65ptL/R2NZjpyO17g0WmnxeLFhKBDtzKUhvCzq+99cYbDPhGHQnefr7Rf4L7y17IhXw9o9h6PkwWbW6/B7KtYe3ckhJfX3fyG7uBF4OiSmAw2KrlE3hBuGSw3yzBsjXlnLsizQreEHwrXX5MyTZgbeJ7su3n5sZIoXwla+mw2ujuomsAdgdt3T8u56LsshtmBhWOLbZSj1Z2nEbZ/k9PsEbFiHwRgg7dc5dN1whWCc6jYRlRe9D4Hz+uytSw5v1MaXwsnhshsN+jbJayVz56Lk/v5U+mUWAnbm1jzaFHHpJwNK/4lWTsartuyW3di5GyFolkdHDEkOgg5NWybRZUng/t4Wq5Jv1WpzvjHvo+gOUrl76Lty+mmv0ysUPXEUUQa/4312LjJtwqVlSDKZP+6kMOwXMz/Z6q0n4jJhIggfX8NO/+UiQA4j8RFWbTE8gOlYuo4KFOr8BAjt/i2Dx1rfvPybezmv2eJrgtiK6tGWT3C0jPLO6yFVZm0JTiOKOE3P+tXvobSwnh+Q/miUKBnLi6WPshAXw3Hk+MqBEEF0vZ3985Fndu8OzFqAA6wTEPVQgePpnykv2aMfb7x0olbV/X60oBbm3k2bzdWLZzkdhpgpRbbkt/Utj8emkxBPgbpLSCXdTDuQy+O6x34k61QykFuMGhPS7jaa3mkBZJ0MxsWFjGHnjbUlwy7jsBDDJCZPsk8hSgotERjUpXKPcmBXAOgQyZDxLRAo5vc9pd52qp0Og6yZWtCDa35c1JHXuXqcFwZFRths9gE8tZN3MZMIwWUhHDr3alohjX8G7th4T8JTamu80RU8RS95T+zpecs6i9y2o/edm8pchVIkklGc3bnSN7So0hygt7qf8uKdk7/j/pd5v8j8/Ojn+7K5n9wobNa9oA4hT8h6TzNSN9JECBXjN4w4T0b8srZAmAp+PJa47p2HUsXZcVRpUy12DaKezSzc/4D8Ih6+8jBHlEqEAkmJ1Aa+3o+gTiAxH8PUau1hMqRtx6oBCn83V7xFXp4WukSaVeB1XigHnTA3nE6Hi+Zo2BttYKSwO215vd+FJeLMAiuEH4Emv2l+HCPgg1AGyH/g8hoy16gXKuF7Uj3YcsxQIzIYFZ58NMY7F7s5a1EqY+5/EePcXDZQUGzUl5Eq00JROijabGArkeYVCnJBnDazKV9/HP9cB1vy9JOlgjhucxKrZLOmQDW3tLeRlhyCbXwi3K8hzUVA/xynhPT1OJpWDUNsvvYdPL5I/9dHYU1ZeQaQAuPsfVv3mQRWrKvcrpaFHXaaLos/AR3B6GsluLqnb9eiFWAMriiAO/SMO8yH+1XNkYHtDX2DjrZ4FPHlXiTrLVgdvgHF3YsfXPo2oi8ChlanKSESTtvgvFWHxVO66JrbkZEU0TH9S5lmeZZL2ZKCN1rTMJefC8Uv9BgHy4v1xbCtZGO5Sqfkb/kcFnk05Vrw8SfPCS2nHls2IDm9yrr+UQAjTtaqIX+HaxhW1ZiwDUeLvORr7f+SY4BbHMVpg707BkeN+ah5uQevS5BnXuj3aRWf86BCts7749pKjQV/UAa5nxBPDh30QYQGdNTlB9Fj1hRiLuTJNZ2gJGtpXBpd8cvucxQzIkmgmeWR69Njh1fHSrpGWtJYUQIKOzrZOmCgICEjuQ8h4+QOH9DA2rQ/zc88qUofTFMpL6J7QX1sYQ34gYTQAvR3e5vmFvl2ge3KIaS72B9Wo2OfUCHk7ZH8PizU9e2hF43FVTty5W+vW1sZQyxteh8P27cR8sOEnRQ90HLselq0GGZjLP0j3TSu8slTnpNi2oa3T4Jnfz3m3KhFG1K2+QoTHRi4EhmcPpbK1/ibYT9cyateoP2D6Arhq5oIPVOQcAtitpfnUpFcHb5zThQctrvThUezsWPyYRvFOfCRMZbxpbbTTm9cK+k8nG1mvL17MvqIdXvwnapwn6Wn8qegotlhvA1py6dSUtmh3cs9Td3KC+GY3089fVPLDtC8r5OqsKGXQ5dg5RcxRuO1B4JWgGMC030cDEdE3eD9c78gvzoq9B6f/NCjXJUUWAbQavEtLxqgqsHKWvv5YmyMsingsI+g/jR/8zYa2FiMJKhgf8I6j0YaDHVuLxrlhVSmQLAkIhSobU0k9PTr7i5JlGOFf0KRaoYSy0WpZ65esZziMG9CQ35e1W4rQXXrg5EvgfYI/NUIjHPfcblMTUOdPzG2wqQ8WF0z82PWdNyaoaR8msOIDFepbW3phCMDC/wqYj4Epcayzt8zhjfnu4zs4MfgjTjdbFZaqn3BbUfR1sd1Vu3FYlWTlpfdDLloivN1mnYHwJFVCJ4G0oTvOusQwVHEoOm8jhv09H5OvJP5aGF5rflDAHougNqW49x/kqjbZ4Me1XTcwsWhPZ0gJMsI6E/M8gau9Z3z/39afEAoRAO4IeO85A8/aTzyYp21K5RBMhrGntk77XCkaSWgE+AUinOo6szrHf+LypvNXkafGiwvKSai0zNsSq+bO4I9Fejl3eKMk4sJtWyqJdu0H+7tEeRyb2s/6LQeyN8A5HYPLCl9f6sL8BT1Lsrlwfn4KTMyi0e4ELEWrn9GnqDyX2uDbEpt9I8vT+Z8xR6ny8alybJc8drMNbZuoxGq+N+4BDVTLfVUJRGHDMr3JloOM8F+ZDKQjjtqs+CHipWPV4/cal58j3fL2APQSS4QaG15LEAhKktt8XDcLrIBt7+DJxxrNtg3mkQv9lzFJqBFMLmicZvUthacnR257S29hmO72djT22fAP1zUCjSx2j7VARJ1Z0DZMT33899SfJ8O6Ij3YlHN+cCz2+1sWK/Zhz0f0sx7/uYLZv5dsfYs4Faj3ktnWL6/rCDxmXA3PhNrjHlQsjVntaVeileLH4rix3q4IVpcXbfxJX9G6RxY0orzClyw5wx5mibsMsDTaesQqRXNyl6xTgIg0XAIWuATcTavYZM8aqM4/cTcl5COni7z/bXHVIz02AeZL9PC9X7KTVtnP8HR/OjTKoeoKOEcqpmqQdmra1YOlrvufERuy/j1T+wukmHnH+myOd4YGVvHnTIGAqsFa4bXrr2vqbSBZPzM6nN3PHp2/X9Rtxn8paz/9FzsXv74uu9aQYurAyKzEUd1vEckgGf3zaYKt6ammm8jT5QIoNfQjMALzCQk+DTPOPBk9aYFBGiGJF/NboKHfK1EUZ8olQfBioYkPiysxdTO5tihzZTZ9wfl26bs3OutggReQG89WOVqMUpZuy6mDKgiK8lCGlSsxJFL/cLSwkMX2HIWEWLy0y51n53UWERmuipquGfEjznjdY/c09mT/QnI4ZKBSS0FW/8i8+tI/I4NAvjchRERxS+pSGhEyYKWwIlalJJSMg9gapccBipCASJrDEQDOjC1RBq4Vchla3mc7Wx2qS4si1SBIYucAs8sXt/QQYJwnzQiUNi7dg2FU3LUXvTOv7n2s4SXEWKz/nHAPh6Dfx9TaciW7paEw1opJ4Jhgveq3vIcKZQayh98Dj6afjXSasg0/v4Wz2WpzRsYbmJchz2yj0lqO/TfKMGAOP0AZuuQ/YUbLthUCWbaRBsJuXDcPV/uqVYVZV+7xPu5pQ5ZCUKuxX0tVeqIZkJxb4Y7FGbiRuRAcWeL2N1/GW6QQwdzEG3YIZnGrZZQaxwPy+SXVtc99B2dHqT7f11NweqeKdn1rhfqfSf/P2AjCnjFbps8I/qQhgPp+gJIwIhKmOZajAomh8o3CJQaBo7blfCu4k8moiPxmYh/NvtiUcHOaVzyXYTn8W+ubyr2dARp0FPvK9dpBiVVyCjvsUcCVcej1gXsB7Z6GKmCeIV9w63hn+/r2HVzDRd/Bl1xhB/QNkcTpAsBK9JepVEzYq3DF47mww9Swg6hmQ4W6+JsEeL/OIRFz9uK64HR0rPzZAu0w7quHnDIvmKt97Oa9c3u8CfnERUAejitK2tGnBNeMFGIyiQkyVBGHEFyUag5gJRpQrtAW0XEJYQGZC7abvRei+6ZVq/sbbrENwRx5ONddQwXKeXRjd4BejvBal3ebLkxqbYJ7U80UwAy8bXiN8Afvx1hWiDmZh0nvIm6LJWs72HtnHbyzH7+DYYPOCu2qGst+sM3lqurb6i9bmVOKb3jVdtrHDWCChgu9X36efSBvo2WL0c8TlesRpaxqwKy0HREDVIE0g+SfCf+bn1YsC3A5EUD2weRu42WXVGkAoTDfeeYO/16NJaKjby1Vb68wHPoNf3Tg9jYs6q2jfz5lBedisqF/orDOFqNBX8wzFG+CHrANiGWP1/a+8KyQj8rqcB6gZrp0pre1WDC1YKX0/ghTOkmpifXcK2x+Cw4YN0AW8412q/3BaaP+ISo2iKpylQcrQkMduGYgdSQxJB9+RTw0Lmxjj0oyXDOKeTtx6Q3ckxZbe6jlJbyn7vR8JKvMJ0/p/dj0lGTI1iyQP8HfFiLDtzQXF1GaxBXdvGai4k8SewJq3ezszaCJz+lUy8Uay3583oiD74jCJWVFJhyXGLZFCdTiRXwfI0Oth46sxSmfLLqJQCAW0y7HwcZpz7qKdtxsPpAXNp8Ao9sL8B4nP6ip01VcPXt8s2rrTmaXGv+eUfb4sfCB0rVkm2/i0gX2z/24JojqqnDySIECnCNGt4LMTYmt7QDqM0jaFLw5Jjtl4lrS8Y4rI9bU/Up3ogpc1YVttl+58TGTwiyw3uzCGXYectPIxWO+Sbtd2KycUtnyhKAK2HKhNwltGIPSp7YLizyNemrr6vWk3QxpkUDhFbDPpYUa2s/XJmuGj428YhG6duK+LxYVxJSVtuVoCWshGHAAzWS1HRXK0tyPBFBTlJrvH07p7HulRGm+h4RI9M+ws+cqUCyUJKy9mHhK1W9d0IZP440Ii5935n1H8zukSuiXibHfi9PoTyObBwRRYsfN6kAhk2u9uOz/wOFuZnWMOAqu21gJ8iXP9DgoJkeEwbtBDSoJg0r8JaQ3I9psY1OACuf42naP9156RJgpeRm/PKFssNfJi3F5KihOpiuZsVI5sMp2cZfo14H8r1OlNsYtBRsHcQgnyzLsHnanj0TZ/IkQkYZNRWUmj9rM1WBARbokiiSgqVo5trHfwJ4rU3B8Y424j3UnQJ5OvZnnhRdmftB2ae1HB2VOl7Lh40oKTxDUvhwMbI8e0J8x76gyYPwZ+1SkOcfGA9pg9wXOgWNklF2g2+IVn+rP8WrFonONrc7jdYZqp5Wp9/GPCVo8WstqxVxOicd8ewNPNzmOqi4S+xkKGXX66VAS7xr9rmPrzxZPpP36Z7oScMGGZZEsKlNNnt9Bct3VBSIV1VI59g5L0qUR2/Tn+EtwvEePwx/tI42mj4TRGVbrtaCr5VN5etfIYpswl9oa6ScENM52HpTgsy0BKm4U+yq4XCGaRld1auWj92ej9t0BHrJcp3mc342vUuyZpQf9SFARJLshvIc4vVyMOJqSWBHpSVf7Di4Ft0+XrbH1PxihljowbzIWfthMsFT+vwFaLg1YzMpaIVeic8rdlGYsQRrCIbYQpVc9nnthAFCAw0zYagT9yTVdThoDaOifR3dvbCkdjivbIAXXz+RtlYbDvD5GytPGm270jO6KozeTUP17waAH2KmuOSb1W5VrrtkdZQvb1YL9NHiwE0njsB6gdrHhwNv7Bq7xenH7g4vkWYhVZpTHaEXSJzqkLPGhHdRh6fFcXwPI1PdtASDUH8UiYU5z6UI3+MeOMSp/DH0k1ELcIBzfOeZA2zd73Je24n/E9GRHTU70u0wVzBxXAw59VshyZy4ViBmc4LmB/ozJEPSH5obw0jXFr/AGv0W/5MMWmaYd7UpZZ8fY7RldejpB+1878XpLxFK5Z9thnhEL0rS7lZ9TeDGhaZ+2iUwtQKhPOZ3MBeLFVCqugHP3PxHdGAame8cmfYKjdg0RlB3bUhYD856hKD8dvRLt/UekhgmxwSx+FhhK78rEwglCT3B7LHxCd3XhLI8r5DZweeeDap87qH1vjzmR3694s9lys+eSzKpQjJHzp9dcXrnsoOGwgfJdB2N2zO77e6Ri30r8SCULAZxDS7bkkStVg1vm+MBeooizLxryT5Xq3beYEoHg1ncEv1Ips9xuwNe80/LuqmI26QzeWYA9A1S9WbkJhgy4kEdkSzsAGctlhp3wnUpIYUQdSMGV51g30ydPpET42r6ltThAmcm/ol8UrKxPCj/foZlDag+bnoCevEJmJkU00FyzJhRTO6f7zHyv43/XYIubrAj0juIGuH/2zMDWnMUmkDAiFlNCJX+pXKFgyjfBbylWM6LB5mI7UeXVcXTvqRO6q8hS5+7qaEn8m3Lu6ySWvI8b+fzHd0qyAdqtDP2Lm94XzcYBgS32kHZk3SRv7XL3WOztzikQ91Qttpdd3+b13vZETSkYs7CkEjbE2wsZa8zCwxhoyORNv3sR191wrbXNSPLZNRypcXPv2h0x9Fq5395+L1GykAujKkupjw4ekq4RbXB6CzuQfs+79+PL+81zsbOmRNO6vPM2yHstHGkXRnqlp1//69E8nhq6LjdLK+i2h2y/WP45bhBhteGDhFOnMrmEuf9K3mUhwy6VfirRVeffe8pbPfaHlrb7N/gxN5MNeoI4Zk5OIMcOh1thPioiDj1fYCiq2HJhwEywKbilvn4fxXl4uHpacfQ+LBfLpEp8NWalxnW/P4x9zLAXuMi3a5RydJrCrgifddygWJlO5/ZLZa6eHAb4Ji+748r8aD2Z2glwDwlu1O9AcwfTqMXHx/QQelxjwU/eCpy6RFSboTRY8aO1g/srYpa/7Cw3GCV4WgxQuGWffsTKllYiNVxeSD2Q0AFbANlGKGy+BA7Wz3/Pu50y4d3v945DHJmW07WoDiSVxMRC1VM+4euuk84ceN6bevQm/IQM7TLmEYJDIW3BDqH8U3LuGp3d0b+IpbvhsqBIGmYjAlLdK8MF27c8uvvNRWekDB0dzubRGX0Poi+zttrvlGfjyVWNWtMkR3wsWBczq3udyN4Va601zAdK224ddN0wOxqVktArko1xw8KganenWT3xC6stdk5BQxDSg5K9AyYTgBAoH61i0j3xYQ6aUWQWUjrpCP8qkJKxJJexYlJBMSjsQ+y3tuJ9ncSmcU/8k0kCk5RBXPpUrq7aEKnvRJoGp+kTFEZupkJEBq3qv5P7RWll9xSdNcHuxwycIzwRWIZQTn5JPA4SvxL5Xk+DR/XOCXCfxXgV21iBn3kCgmfZQiqIwxhCbHMMb2cH9XJAWL43DS+65Z1D8aDK0szdFVCdkE42DX4WvcqkBxc7h2usls45dSkhVjx2NZRDQU30hsj/x9oBsXpzIXV6NpbgC5erwm2lnE5ZdEoikBsZVUBXIA6zxtrIpqlZk42n2WgV5JVuE0PMrbzEmBU9+LmaHh+5qUYVNNRU1krWKHUV5jvmuh6ytHkDhHw7OMZGCQdM/I7jn7PcamqbAIujxebymfdbkyZiBpyq0hDS8ti48nFZk09SuGIAYELTxKsrauDtISegKSeUFcM0XagXNJYKHAuGFwamYBn7WdIIne7F+SaPzWJrVCgN8yNED0SfHRRvR5/6EUyQlUw33N75ST84uO9QFcua0GhLRRLoKjJHy/g1wVNVeTs7DIFCnnT4tduIgHvqmG3GWBN2P+TcG1OGZPhAsamTgOzfXQvCumAXpCXsPdYp9CZ/9XvW06ts849H8bpIYNb5ktznVujkEIN2rWyq+ajdzTDPtbt/+A4kkfmzYjatCnhVeRQalk6u1ffgNBM+whGzAaFoj37Ktw1gdI8/AEHTPV1mRdLzL82W0kve+P3hyXyay+g3B0fiaUA9j5kOd7gmuPfSsU7QuKCWOQFNkBkxuC0VpL7OJRgfCyFvSqm5eYRazKAbNJoC7f6jQ/evJIea+JDQVdtkjipfG53hmPMnRctDfefayDqj7WGsXpfx3x9I11+7ytr6gULogCWmF/V/Y78WdP4VNLAnA71yfztLCBQcijvIxJdFq8XHByDY/iTN7Xk+6mBOT+CqHZXr1IJFJnUj0+mHBY8rvs/fDRuuOJbRy3SJpoyMaZCWrMFFVeu+D4dgcJOMBzF/dhKj0De+CZrMTCkUMjNACS9smyzGz8U/luVtUfwZklHfGHjaosVq84j+hdKEfbWrFOMKFCbngk4/TK8hXkSKJ/9mqYXusvL3pdALdhwy8EDd43cBHQQqU8pk/HROeJj5c1qBQJXp4lrBDmznjHq7Yk8BGCrRMyAZvSbCejL/cksQOs+y5po1jQXSJF3ZTiFkhxmbcTRKems8Lxz8vmQOMqbMMC7wcTYU87VH3vaDI/xOMNhlTl/gHPQXTjgCrS3Kh6Qe/Ivz57O+qZ4m5Tjb3tZvE7c0jTxgd8XlTWC2MqWYufl7n8juiR5F4NZbUjNOF9RkKaIFvfvDTB7Q0ztxLYPHyT0wc9B8zIkr4j+siQJSyjXAsRI41jkMuMAXgALOPENhlQVjDx+h+PfX/D4HEm5jUpr82+1HtOxzss3Q50YwQZXM7KZEC/8T5uUxESvtoskDFh6eU7hJMRST/T5rA/Ret/+iKLtrjddCdbmsMAHm26cwhEX5Ej2JqEORrjvusom0NE7j1si3C/EOgDQI/etaymxC3iiJoP8AcQiZfjnEklF4nlSw7V7H6ER7FGQ+P6BFcNOURQeeEhKpVN0WzWBaZMnasTPlpY8Al8HqSNh0jTLnWV6z3o+1t7DcmkvJhxBuQo/EmXX3wTTHUx3MKTOiLhZpxvesrR9+d4dF9l6L4GI0vsZu1ey3Ji1Ahj1oaTcrHjrYiX1avWLsHPIaEdYvDL8eeJo+LrfVAJeh6pOXGnFVPdvN1fzSsK5iXfrCnjNjfs+hKmMDE1MK6/mHPw583gumKqkL3QvjMSehIjNsrIIQpeNt3DKt+HLZg9fUs97PCoZ7IQ+bFpnvMtLcDz19Jd6NXSV1k/UieDkIeerhPHjkEvNK3UJ7C9+5dNoBupP/ahoKMqMSGhlc4B4ESgblD/gwkv6p04xGOhLQpVbdOH0gq93VKhgBL36y5szllT6lotRLou4Z4amETQ7YTTApndvwrTKtyoX6zo/3Ki0EJqtYT7jB8R1q6O6slClPVNW7PWbn1Ac888Xd4OFN9RoELA0SxvjqJrvjEs5SO4HvA91zL3hS1rRFJD7e/RaALhMFfN4rpEsb5TNZQGkZgE+DGomfXtF1FridwFgMpeK28BS5fCE14oVJCSyMFsWT1LVAFjOKlD6SXB0Ve3Ry15whzV88zaCXbVeJ4yVU4CE46q7b9abwHsvTftSqHA29kTQfuVWHp8XSIBfwMviknzab153/z+S76yl6CEKUcD5gqi3iC++5oAl6ZQqMXpEyopdFRCHM767Mj34vWOY18XjXB98ow/VNQ625FkE4S6UEfL3fg8phMO1ucrAlGQae2y456EGVLQzo6ANtJgIWkMn5yCGl7Mfv/QUulgAESMLsmAwGG0+jnb40uWgsgqeSYv7jw0kYTR/1+Bt9hnF+qQ6jaNZIPWnRs+b1ydaFWo3PrAKN1q+g+73fDuYiW5Fz8ZNSEaucusZrvVz9fIrJSlkxMfpf/VDGxRibwKOH6ekoz4FFcUUZmif4EV1qIIRH//undY++HVKUgZymb2ADmJ+bGT+f59iWZaewSJ2uxZ1i6ZGYWOKSE/bqCBH83D044vEZ/ZLXOnsguGkINDgQuFoe7diwDw3gS//A8b2aLzQ7W8ntpgdbnxkMYNGn/ms+DQcMalwFMGQpyVvyMS5g287+Y4xRSpuP/frgUkHFZEXwUc09prvGFdDy3Pc3KJgyKQrEQ4W5hQd95R43EZkrya1eiWTs/7KgrRfWx/9+C8Q6WFiiDiz68jA5KNqsA7BJZOLx69oQj+kAkbJ8aQEQ/J4I44zD4XdA7IKNyqD7Fj4u2ppoa7iJM19Jk/Q8EQjvVXVcUBlIg3UYLZh92qYWgzr889OipiSbvNqaiIo+schzUKpiAL4rlLk3mqvgTBb6z4pv/PeQ05e6M+TV1Qvd18KfJXyJd+L5Mjx29mGww9jYf6pUlmOqULpt2axxUzj19/6/UahrIvg4EeRlOLgp49Nk6tNPHdxUwZ7pglVGh5fcO1tLfzONslv4N+oS7tixy/OfH/dH6YPr9fhbbXT+Gd3Ml1YEtZefRyuXxV5YM2OHWYz8CuVwrai9CMhSHMmpN5XbWhsEVQWVwfYueunthqMyNBVKQGDAqVrY8tMkh2j1LZKXV/Fn1tIOqDilgVGE/WCEbFwu0sSVP+mvyRqj4ivTLA7ew5w5rjx4x5oorF+twcHNNdVzFG4InrGMvqN8+mPxqRI+n+KsX6j7IIsYJYcJFbEFm6QIdW764vmZyLqCTIXdHcn4vGitJnfeE9okTvUGCRquGr6WthE7bLfq1bBnJUrNRpRF0Pl+/rvgWWkMfUZI0Uy1pYIb7/jMyKQbVVl7cM5PtALB3r0z/V8fHVGU1cpHOh33RX+mGze2CFb6kPJTWCIL2DkDpFFujWPzbtatrdTbqtSrqV29kBDuF84bhMMgKayPikZlbkeHmAq07s/gQyfpAJSioK7LcD8DSaATvbaFhZZnt5NE6j2iwPoY12PvDqHv3pA4C6x6T7X2gm2QJIMYUAsXnUR0LM63DBH4ffUXR1XOXwiBaDxC7TQUj158wu61Y10VRxC42SQZu1x5UIwVb3c6Fe3aqYzoPrM8N1QlqxYJEJjWyAvp0MEhzyvlN1UcJZZzwMpC2gAOkNECfEX6w47IlQtsVvfP9QkLGvu5Ig5U/R7hiCxvmGIA4x+YgPHWnmQb60ppK665jce+Er0+pyr+pndkpFhIc3ei4e1eixWhuaB+Qm3yNNWsM3DQVVrSCBzvE3joXdDxCyZDXNlWwfKjNGblGSWHYF8wdOHj2Pkq4vZydpBGuvGiJpe10ZCDbhNy1C9SRt+vAzVm1S8KEyqAaQXEYodkLJ13TtAZPdPKHta4C8SZTuvmGVb4iuAwUNfADbMYmmraAdEXnsuGmWmUZJmAiO7WdmCDMG5Fz1PIKCu3esipolbIhXXNhXgx+BYRQxxZpEfZe4lPb8Ixr1+ubLkJVny3VGO6zaXb1BU9MEuSpJ9IZh1OLx8qpCwgWumaoOg9NqEQHC56+8+N+XkYs4GVlbuTnCQjL+kYkSdVbg6HYl4HwyUjkzPzeFivlabOqRMIhVUdLKh3kfB/Al2+zb6rf/wf5QN24g7+yC130IS+K4+mZACSySiM68BNO6+rNzuIfLNrCHgfz1so+LJuPLCIJPlFDrDqVc3zQijbl5ClU+82r03R4NfFv41gOc9Hrq6+zLMQk6xT2c4JGKb7byosagUmrym1R2vfd7kw3UT/KqiI7dirf9DxWv+KbgaY9fLkH+OEDUYJklmNfh4srxX2I5g1J20Z+cNSZi9p0vIWt/sczJKdBSX8209WQSn0kPadWCh6XnMA8hwdZGlf2MkrkNoB2qYXHlLsaAfQ6XZQ+EUwZtEFwVfLQuckUWC773JXtb+VpH3kXN4ELe8H4Ze2S/B3w86YGxiNP4whuNP+S2LUqKIqStflhZ0wB4+nRepTD+iMUSuqWDmjnmz+06rJbXFI9Iny6DiD5N3BqVxOGvMd0SK11uuusWygtL6DDKLBIXHiXSeMxQ/Cl5u0o9RiEaDZhjtxr4M7zvfziutCxWNdFD5QL1/jJwV3nYkXYN5HwtByezKsM1TZKnoVv4xBvOp6wBc+4cZIguud/ZQyTmvNF3bi0LR2bhBMUPSg2kcDD5rGjrhYFKClKPmTtXuwoTpZbdw/hS5IdIJDCS5Jbh4AeTdi0ck3yARYNbizTOkDb5MzuC+YpSrf4zktGnSGHcpthyDJLJmc2liiYdNhGFWvddVYmDf5ZmtporVa3DCFgdq3HY0UyYIovszS1Bo20v0kd84uT1UDn+KRGEj5VUR/AftKe8Kc1PmUkfuucswuX/GFtnJnNhek+HTSnNcIx24CtwaDohS883h/0J2wc2SNkApsKKdEF5aRzGburbMRMGC6e9SoKk2Ohkd2HP/DUAVs3WS8PGNWKu5SO32r1BbL7buNLL2TDBKM2nWjJIUPLckfnk6urhcMTMmtZwpHXCB5jWmtaZpRpmArqBGqoT8UldU4T8/qhNYa7UxaiTJDrnO6T38u8Nn4SsWlcdRxFXNJ19jNygG04G6pXXbo+lUTE+6cdKneKgJNRJtw2nhv34aDUQHgHKHShJvS4+tY2iXjn/6GeahL3rqtxA7CgQva5UCKdlsUz1RIKmEWo0uA7JfgZclWSYu1b8YN4go9xYBXs8sehyD39oYc7g1gRuRc6RfsgV0nu1Y6JiZq0KS8NEw3xCN4Lb3kXtJ7fTzC6Ht2W8Q9Er/MwhThqA8ERkzBikmcKH5TGSXvPCyZJmhRx0wj57XBYs3kYSNxJlncJcA8E9nOp1O8Ri24Q16v8tFy4f07jH452JPgnjiCDKskq/+H6oZi2rhTCFKy4GGVB8tOIAJSpuMOBDBt2MjGOkc6VeSbKdLmkd00a4JbsQjLctJxwWI1UjW1vTZjn6do4byJbykPintEWS6dstn36MfsGFe0RXnOdkOOcgNdjGiU20ZJzG3GPZbr2OiWHGQIQ0Bfelg6NO0s1UjfeWhzMJb2oy1P7DEnq8nlzNkkQZPP6bV5/V/GV1IuxlNR8h3E7mRKCigNufxyzEFf72hV7TrLnVxlDYvfYaXBhkEuCdUQ8HiQhy2BN9IZLiygwvOTmGxy+Ag1e95CyCCbgGnO9lX8prdkiCh7DxcPxrgxlWwFx6NtkAlS9QDLiqr0HTFVw+v5QHOGifbZvZTvHbGxozmfuqF01tO+1tWFcrwY6OwzBhFbQcTvGAXzAucEZ44y9cGUpdBgwJKswl6VHnJttkWCkK/PKAX42Mu96DzxdKtEnhaA3yP7hcdj4CkG/UZSmcgqJXOZ0ypxbW1kDoxuv5YHBUR2jqmOzSJSp784qmmypl3XO7OdL8fr/HaxD+ko4wU86kBDdWB2ktgkXl1ldCa8bqPVZ6Or3YCJ6vCTL0D06DhK7qfaJswXx1p4VYHnijAcvlXNf/oafq4fdFRFahbgA3/YqUxcDosGbojP2WuK4XESD4g1APyvGgTphhbK4NiaqZVXdBFk0nCwe86RUoagTO1oH2nA/cz/cW3I9XQc8lyc3zp5W5iUSVfRxNJLprup19tjECuVGbN8mNJ7i4Pq8HyebLgJxk2/79cW/IV+39WZhSz/3jHJfyzosrGneiROmEofxW1yRwSAIULjK6iii52h7ehZCljB2vCqz5Pw283XA/kdgitAV96TfWZSOJL89WUfkIvc4iardeegEYB7cm1xjy2dyxc9Umochhc7fT110h3E9LZcAXQ408Hmi7p0OXCtE0wE1HZSTUTqBYpNDYjlMIqBctAn7X25ZYc/Is7bkn03ll4NaGM5OhB2Smi+JyT4LYeRs8tvFkVm06QEL8qC2KHLMr582HgVCg92SgqGAvYofjT29wCAzo3aF1s2DJEG42UFXg8yfYiy+Zkw6hbb969Lh/CrO4uCkbYBb9UtHZCoFEDbwdpaykRShB4YdaZoohuXsSn4oO+NKoiBXczeQwSo2w7gbSYxkHlDTJiwFdHDLwUqFE7z5cBGc4kSb0KnKMglUGnZG+M55hVtZP2LVffSI8UwwioXIV6u5wBardNd7MIm6KlJQI8fXXNa0SB3VLhV3XEZLUMpYSUFhzRvZLQOQlPztP7gp2i3ugI3xynyhOd31deA9PvPhp7QXJlFGaveqHaDxRxi/0IFK0pjijB9bhJeYqqVgvb9eqQYLGiuPEplQSms0Yhh3jAFQTPSWSgfgkHTo5FdIJfr+qKUZc7watq09QRWVSc8CVcbMZfONqRs7ROsFzB2axPBohyc3qBb9o3jR1M0/s/E4vJqKKDmS7NeR62wm2KhY4Bt3IbRJzUgjWv9O7G94WiuhzT5IeWxossVZikP6O3rQFKSKAPbNwn/cpuJP4NunmJcPF/WqPw13cmPbkK0Svz9rCvRCxdU8mTm/krtoafV2iZJaOrE1cw6ZkhbVJOk0722Xl/qvha+u9XfBrNd1xK/e1sAkJCv6tuGEwnFr0GpaP44M31oxolY1dPAXh0uj3vJUjggU8wrRiMhwwKoH153/Lm5gtpSR00KsKNgw5QwhTthotlcB6Pndn8ga3dJifQWkcOoS0BM9Tdr7VAQAmMPnnIBGnsGEFJ0gHMcsfDjO+pVwVAtv4YKQft1HEsrGqukQep88GeIPWmYVzwoTYPQuVMgr+zVQObR4kwQuvPi9tgnEOU1CTGelCIGIp/qlAJB/24MI7HaQEilDDc5TmTXJxfUZ+zm598rm1xODgDqr6tJD39vcMfr4z0fTTB/NGlF7Vqoc6L2oVjh0qxDVtb2SJBPcHTQivNkBPnd2Laf75agG/q8O25fV0an28yqRZE9G2nJUlvKZ84AGy4p4u16KdeMlqUAecPnDbHg75uYOkbSAw+lltkNGfEzNxOD+mjfMhlZprg5LggG4f6H7rp87/jSY5WVOOzMDatIDEdVLUqZ0oaPIf69+iT2ngzz9UMAMre77fYJrMuQvxrYNukMGQjHXTcxiOTDekt0AxhXskSbzBt6rllbkx7cp0T8mvkCdVGQWLUTDBva5CkO0wV9sron/Mw0fKjur8F8gy6Gsjyr2fFz+LIwNTuR6wlqP+8++UNm8HtaMZ/vx5WJIQ61/fCiPfGAXtDRRNbhcGR3mXfK6TlYUkI7hx3YDUSG56aR/CSGUOmVTHO7lbA/e1Sqbi/dfYUPnb5NwXBcG03JfsH7n3vbHXNTVroE0FXUZpoYz7iCFQSVzC0INli4OBJwyo4arexcYP8ofyvKYObda7JXjmN5uyQrdMlsfOTqyHN5lBlx+Qdu+rMsoEd6iBg55D+opIsnrCIUTbhNOzZXJK+Br7qan6pO9L7p9fOOxk4qM1hNwtDqPEq4lO2cXlPfvCXNhmhS4RfOApFVldAldP7TWcTv5fjNQxrt0KCcn4Flj0KbPyOcYFkjstGCxb9qyy1IaJhQFcAfLSd72u92bQLhcg4H8dMZ733MAUTd/6BBce4tX6xY6rYhR/IUIx3s7K6iC6xHPjL0Srnd6SqU818tLmvXdI94uRrI64DQG04Xb5QeCYJ7rO6NhzgxPdZMzHH6hrxi1qsizPaRDpnPPpeDmGjBl0Vksy9LDarNjb4YmDPjYbBkTd41d1bPHw/eUJRe2hcQKKijMJT/rGUOWCsziMQB8w4HUsrihuK0d8tnTeizSqIaRbiWl476vAqa+Q8f9PTIibP7N+RHvJXt4fojc3qupw8BzIaXanysYbGjVUeB/X0MmlO2X5VZqSRcHSkVjphQ1F8Hubh22pemTUloIpR1MCKuFQYf5MoOHWt5uZU8UgelhekEoCKAaIIXjXEVAH32kas/E8pvTjcMYvGoUBCZm8P+DxwqggGUACq9PRo/hgD9onEAeMS94A+pZcokrqCJM5yvTZ/BwftojVuQvgsfFkHvQ/a652pyECIu7dUByEHPem2zJ5+XcfDkYsNWqAW+7r4dWcfFZRPAVV0n31beh1sYXw9QzcTCFP7YicYvIopgdEBDdxCVwUppgABqrTZMzQ8EWxZFt32+YcAzc6SEhf9xRrCQo/lVrKUdcd72PHBC7zRmNngVX+3otOvG4ICjaJwzwTNHwmMn916elQ2fIz7OlbxCANN2j2Bx+yDngdcJmyZfzBdX5DieDs1KSN0oBTp6YcgeSTcBuzu35z3GhUl4b14HRS7yKmVCcAp0CKyxSqrNzNYYlYhKWhxxNkf2efZ43eibrucXHv5TnhC9XLS9ZzebzDz6NrQS28ZDv0H8NNTZp81/BUNJizGezkSklGF/9nGy1dW9Yr+4INrCCceUzWHCttV/1XY6teCQafQ3hsipjHuqJsnKUIhWVsRk2a4XnJiohqw4xtR6isJOTI8pm9JtkaTuuEPdfio7T75y5B6C2w3Slz3Wqk9CxFJbaEgntlFwuEdt7glLMXwCnDFnpTtDQEWnQdYFP/kUl+WuoVgHylPC1gIpJ+S2iWuCARuFRMPhjZImwJ6F1JH7Z+Rp4bPs2pZ9OiOh26ZAKXLNMS1riyHWOl5PKaG28go8eaOoKjkljXZuWtUq0ZbPIICuFD67ahY2XIBfYK+ubAetL3GgL/2dG9zWCPPvlwnMw/YJ2KtltsBK9Fu3Ul6ZOkp4h5LTYELzD+8g6++ggBxiPGC2QBIWlEnw9oDTQSEVdQ8qBKyW8wxYQ1Fi6uDaKE3hwiXsfK4BTrpfuUETteyYdNYwh0IIeZr3gnR3/i60S1c3dseaDQrNLpcigvRlFsaLTVKGeDlU+mCTMb7iLuByagyOc+CUNJfJIH4Hc3HcYjWcyPFQtxaQCnRKbQC5TDE+E+4d3kJdi9POkvR0vx6zVUg/EigeCXuXTYgHrz4gjKy6OC6r+6PbL/5uSxDhyaEsTQsCKAnnFID5pfcNvPojJ0MavottDFoJOO7gwf59ojCS35S9AF28JvWinUIOXZVMnT/vwwzomAqdEVBdyjk08PiJtPsi6lf+xj+eoh3Nm5sRzCQoi7AVAfdtmn4Hbgi9kamJc2JhIrN7JONROKRFM9KD513hrFYEpp7ykpBv9BdC3Bd1swbb+glrPYsqgQPESt7jKgjmWUBy+KSLKeadD8nLKWLTgM4Woo3NvXZKPZRltEUN9y6kaCqrcMxEf/A/7LH1t4Ycfljyt64FoGx3wiLNZpG6edWejxgMvWFHGG0S4JlnrEE72PqMx22BghbPWMvI3cfnAUHziXw0Vp+PBsyvKE+ygHDqlzm2JvGlNjmursxiyJ+rQkJqVwSqv0W6loefB5gVnmz0ngc7+Gc3DrBJ3cE3s/xjYVtSf6uzEqlBQDD8ekyO8Ar2QJXGGfMCyVZoW9qcvnGTuH1L2PzDQnf1PdUFe6YP+kddTIcYkQXEAPxFmzXR2x62bANDO/tEkTc1pwCxUXbK+1xRWDAmWGJjyauM7IMDGRh6wHbr0TjEaI3n/FXwRu8RmmBzLp4YUCMMxNRokYBe4Dn6kfi8vptVDNiRfiY560Um3s0Uqpu0ytIGuARY+Cs6UwK2mbzcE+To0M/w42TXdIXaQbjxq9DaSQVKoaVpAQ6rWJdxej8X2CkSdugplH67k2Nhlzc1+Bj2V5p0y2zPmCqsD5cnjOFg4zuf4W9i8/HZMb71q3bU3h4a0Wbw/WLDskxI57E1ALdFLLoNdB9HM2BQb3tSpPRDsiCrXOTC27CpUGnuN+tfNSDnUID2FOfnHwx5JTJ4dX7OI2jTrkPLn9Xf6M9bsFPwBwqPLpDlExyzweH7qp5yPXcrhSSP92DqaC8PTJnClaBMafmNvhOp4MSv/hmyaiCP5ZsAZ6lCx6KbdZo0i6MhhoEBZUj1CoHjXsXaBc3XI73amabRuoqKDR1ggvbXo+vtASF7lhz6TC9k127sOFRpK8RT+UQNKmPa1MuiGvznKhKGOBtaOT4J5jFUnp3u51w6PeNejSsfq9+cedfW6EoICQH0z6rFSgkaKDR2OKnIfwUJ/NSTQwX7AVrchruOni7HdXEkXE7AEM9h/ruNofcY9XsEA1dzAxXnW3RPUnILv8X7j3k56ETizYq+pfKhgNFJ5yydLFvhKs7AYGFsdhuowQCAmz3IiRt9omK+eWCSVqAcxNOmU97iv69qAiaSwYky8TCsil60UmOyrpaZ4USwBtLwaHIxYETnvPXTzdqSRkBSWiF7cjoBvCgomrlMCL7eXvvq2uE1Jq6BM6KCqvmNn06OxhhL4WFZS1RfKVPwR9XM+esjWKwfaPlcQtiQCYamFi8jj/PYrV+cICisGgtWxgy+8zaXlzz2IK6GRD+MwTEU4rwKtKTxVAet2zMI1TKSW4XOqhisYuh9XXk3VZdW1RbjvC/HRubyhdl20OxGY0qyIqpX6aeLdoA4Bz+N6MXybM2/8izrF8Ds6tX2UnQ1NjgMOHQkSz1FC7q1Vzu8eOEt7riaIzwaFavmJZ+n/YB2whHJ5fOn5HQpnhz9e+pCWgCoFcMgYMkvnDA0rREMLYFrUIa55Fkwet9lyz5TxUsaiOqrNrbyaWjSc+s2xMydyBo/tG9+6tvgHLa18A4K96IvnIZSrXhIJwj0INreZClTw65QMvmlylYWGUwEw1z8YMAQPHKp8vshzV57PnfpaD53FbfUvuZaFF8akSdt88ztwwhFq19kk4QROpBYNZpWXt41RYGmcxyMnbKJzaF8yHgpo/pdM+TVUpgSMC3TWvZUuBCSUQBV+Fzb2YXtsQgAx6Bf1jqxXsMtD5qyMjgSjRHGGY7BGSZ+VZAyNNGBJ4jnRKzcR3/qfDmzLwN9Wez3/BDeatSDE9ySvK9e33rLPljTQKrOwIYmINpKAygc46JnaDfS3zamnpkqQCtNd8/fvaZPUxggV6ZEdFYk+BGdEefeUZKA/3m0+eLg34MgKuqiKyelB2DPMEFmwcah3oCWxn+aQggn0yzWS4gwNG9BhpdKk7pzLJVPJSHvoyKqOGslFDTafdXz9bJfSk4l2T+Oi1ow9BU6CWXhSRgdY3K0QambVnFL86S9ZS1KaUrU3MOBTQQdJwFI8u42sXh0bCwZAToexSbHX36Rsz74lnKBMPRxbVI2W27e6N9kwG5mgn3obLsT8RYpHubNoF58ejON5h8gciIKl6Rj+qqlITCD9ON3YzCQwcnZ03JoIKgolUeiE6p5cpQGgHl/5NxwrfGX5idYYT/uv4sNpROfTB/Z4IBhIX2x6vK1/9omBXUE8371ckIFjrfRysh4SXwGQu4omCKNZKFbXY19hqV4ICwR+NLEQywusRuIscYAKonliCoEUq3tnunyfI+hjT4np59yRlTOERjb90ZNBUbsOpVby8F57vA4Ry3eQ1d1n7sK9rsrtNOBARixgwt+jWGEdg08P+z9zlzxNDxWXzeZLdXIs7WO9JNnVbs/jRsNShHbKARtlSD9OcFCbgmi+h7S4DVLkKPNT7jjl1xFu8NQqQ0Suh9/uTa1w24MQ6tNLAa41I68chqmvzhOhIC2Bgj4ceVHe14LT2JYSPkaAXsLL5zXCLBW2CqWDRPMiDCJeRzA56+fduSXBmcHfL12OnlVUzvv5mop0kg5Ex93Nw4UYbHvmYM4FjA8QvsmHtZrOMkRktX94XBsqOf6SrsiflpDMIetdiNOF3SOMPtnNyJ1OCziSHQwB/032hEPYrv/7VSbmKrAhDAaaiii/pjbG2io60f2ASQStavEd52K5iPXNemmVFn/ouBOZwEmfkDoOhHU8J50Cp7okYdWawqDZIX2pLsT5lcy/BCpciyeclaSeYrgkWVuvoru8bXOkJKPkW9HFCTvxC8NvAITSu5ddSAetGdOv7M3MyeNCRLTrjb2DzNIrZsohOqK6DmNcclzSJnDbRLPKMWGDvU2yQs7l5Lqf892DP/LAeZJS3Wa/YJP9D1leZ7VSzPYfXuLy6mALCnVFZMkD5qUZjay0uqNnXI6HbEUhJMeeXvQ/ekKdr0i9XHneJnkWgirkaBlLIvRHMcCG+mPr0Rvf47XLgNt60/ZtZncILN9g/urLXmiqU0rbwgG5oubxGioJgKgIG2AVVYm+fV5fneh2h4Pn13j0tqNKfmAPobfyHsokXZSQ9aBWCjiBTbgMGNLLHVK3oGHXgKxjTZh2ExGlbo104PwJUy5HzzTSeNbECoz9Pte2qzwie7IzHVuXU+xyFA4ZD5Gl5meUhj4ydqyWuxXt046qvj70D1wQbmC1vdfVhqvT8UkW9Jmu4WlLLF07Eg7wjELYX5GNPYPQWGx5guaULwyjgfO4LV+Dr9HdejfO+BzrwGmV1LC6u6P7JT6r956dpEETa20NpzPXWNEedeIKWLNoS/Y5gXr0l/cjjkbKHYFO1mabTF8IglZfge0X6q7h2MYhHq2FUcj0ubiuI45oE+vOowsjdwTe/HDOPiIacm1NlG0MiHgV0wWIwlglUiGnm3jfyifRXP5Nhz2Py4ilZmKZX/EkDPfz5kvChEfazSLXGKHE6K9NRpeUYRtWec7PQ3q8ZO/8AzAyaF+E+22QgRww5KsS8e0AKYkwJaq1cuY0x/WIFHYjX60eiEv3JBn3e5a7ogrcurJBbtwtjGpmegsUYSJBxu/gnFS1Ez6yWPuFObePOxMYwQ7I8mIeLMfXxMArL9YCgugUJiPvc7LmVW/LsWr0LmuncxxY9OT9jtL5f9C790FXrrGqlB2b8cuqHhl4HBNM82WJSQniNSuGEyVukK6iysHrJeETlyVTviF6ga3cGcDECtADV76kmO85k8LbQNNdwoa6YnLGD+KuraEH6OjAnLDOauNrFDREUC4lVmt/sWc6foZsMvfYiWk7T9+qe1SyxCca9mfcJ4YgifzBclZbyT0Nu9Tqjnyym8AAsMdnX5NRedPq36VJcCeDX10ShoKl0+vNmERJsnkDLsfD/Z6SHi0TNQXnJ9NyumulauLKfQjldoIV6TpvpXKDM3QEeXrnTdLTWzRbxYBlRfCkJiX7K1sgU4mbokkcpGiPt6+eK/KQKAWqX2+PVTlZgiDWdlSkpff+Nw9S6tuwe/Y25w/sKb+pZN6oKlJka5pKsXOkMEdE4V31U3KjwT8hMja+3U5GrtaPxzileqj8xB/nC8Y6c9+swNnYIiI9crB/88dhxHgjgdrqPobMcRaVwzUSj5Q43P282ek6b1Or/Re0EP/K5dyC7WOz5nnQgXOvIac8OjjMIG6f7sdwFKQEiTq/P3mt5FiVbDn+ujV190Phsd2C30xaKYQntjU5ruOP7CaYQj291vvuVumXg7Rj/FjBfUgma559LUoN8Rec/AfVcC6EEYQ2/84V8S6kTvCjhDTi7LWgAJE13O+cB8q402SNns+6mnNB63AOlR9ZwHgxMC5q3ejwJAaP045r1Im/wamUZKzkMarKAhPtSdp7q81N2Mq63V33rSfH2+lbCkwH+xQ1EHHzq1og+CLPjWfua9uGgBqVeckQcbEhQlXRdQ5KocP5pJfFrLfDhtjPagn09vQvxePw1FdBuBhEGhZaHr7quJ/5+/kpxluxpBe+UDSeMOg9Z9XQy/XEvjvZeGxr1spWr4Mq1OZxk4L3p7GdPPGaMYzt+0Zj84AiO8rvGDBtY/gWgzYpJw34HjM50Zi2b8N6AjQXY2N/OcmkLFM7+ZUzP0EEG5o5Dir3ClSKmLSuVAiDxo3zydUNibL4LQ3yceK374LWPhKel8EpESPSddfdIJy3ySotQd1TIjPcCX+v/QTbDWzB+8HMsfb07o1Nfxw6+6M2MqoQuVTU4YxvgQ1LI1rzml6pLtX2I2XXbXxBULaGelwAidKuQg+hydPqEsvFUrVivn2H45KMC/jOdeHPLRClQdxaYEsmIlOaYDME+X9Nz4RcC9m8fOpVsd/kH/HNWm5AyGv3SJjkQLsJVZX9Jn74oytfPAuCQPDUqqY7aYSo42FYJl63l8nGoTb5rmR5+dDpwJo4wP566gf30Psi5dBFwagHE0Ap+Z8WFVWW8eyLj921S4wvj/KBs0fDRZI3a0nxdvGQwmp+qgJJpF1oDqoEVkwtYd70WJ907LYLX9BxnjiutKcSng8em9ssstYJCL+ZQCKMmsWyFR+fQ5fyB/V00hj324Cff1IrGCXeS6nYqrBvjSsNNY98BO/iX8j4CzS/4rdXZtGuuuGGo313KeTxWpjQRq4p2vwZqzKNs043/WE2s85nLQfZYjGGC66lOCt3YctrcWT38BSf5ef7cQ98jfgoeiIpkhHirbi3Gn7aOVS+HXPWxy8G2tUQkhEN7g/Bg6F0dW0MYRRyF5v0EgQylMW70jAiEYXnvQCfeFnGpqJksEJftKHzAHWsxxQb23QoGofDlK1ei4awwtPy0Xmu9UjfdO6GVZMC260A3m5/byov0UaQAGMxdTc4eaVz7nOebQmUlVaxb3SFTiKUbgHqoRBa4j5ur+NI3jiMMdgRT9FMae2qPiavfq2bCRShVN9tw3+mcHeDRZFRrE/RhM+oyAqcwCwmB7C7ltrQWCXkj/6tOfsCTJTROBOy77Da9+DsJQqvY/q0zkSeCTi5DgLeTx0iUjoj1bzjKd04n3JStCjhEO6MoYF9CI84dODbpTWFXzXTQkaxRBviyw9VQossR16LuSxbjRW7ZkYGopLmQZ22VxWCIhRyY3cdO9y5yg+kP2cG9Ckr5/5rF8kSW2+aR7PMoI1BfqgLCrmNYQzt9Yg/I9VkWeehTu/J9t6YlFx/07tZGV2r+qsPV47sN6GdPZIpGHyq620+Z7FECFkNXHHAHOXjKfV2XLDmv6ZwSNz/44jVc2yCuMIPj6O1R7CLjFM42/ErmrDsIDaubFOoKkPndcaiyiyTayVYH7M1+uPoKQepQRHfFlNIEL6a3jU3sqvVm0huKuMvHfU8HryXJx9H0vZCaenC/yk3t/lEnB1tbiMUagGcy2TrTgO0D5ZEv4N7/t7BJ8Nb2U0JnD+FqG/iCoCrjFmlXYOVPPPi1l5n+K0SNWVz3S8uE91G8g6UJGpkn0zXHQH1APaiyy3k47a6BUM8A7K3uEm4IAt/RqrdhnbFoQBGAk70yG0kWh81NK9TqScHKRXtFjUlHo/QScvgwa5ZJNoEHs3tm9kydiYfFd1vA4srcUTjfSJ6ehF7i17Ou4kFL7dbLkhSn6S6uq9EjyaJqh7leyju85CUzqrn0kFxvcZ7S7jQznll/80QVmA45NoVY00zm+tgHRkWqqCudv4Ejg9lLg1c+Z9MkdqdIhgRyunB8KiEOcfHyuSRaN80LOK3Y4A2Uc9F5EatiHpzSIWFOvUFI1h3YMoqco3EgiI5OQKiPm/t1s11JQoPzjWjDgd3s+54pdD8kE/vWUZyNhGMOBnanfpJhzogTuYQjdcBQjymRjZv7OJInK9SDpgqSufDLBWhhJ5ktC+C20bB+HxULiv7bxfO55gMnfgwl3+UwRoLW94osdCmsHKiCo3qKWIqKTH0koi5MyqKlmfEz14hYgdSP83WY9hiR5tFWZmhqqgwR8tDVdCemHCzxL9+nqQiWf8XB4Jps+Slj3bddNxfOZsXLcPp/V/UAMB+29DGEQGl8JHCMTwVJBSQQuwWwepxJxdMCFCYfsMMyRFNkbVVX1FmQUURBehbolVSoUJQHnCWR25fr1EJSgrCuaqZEemMmjPIWS6jx13cq37egwhgJKFEAuT7jvGGEH3onRgoYPWGZkB+KAeL4wmq9vIvO7/dk1O0MpL49bzPIRmh9jQlgx91CZ61UPDIygtC+jEVkJ85T04AdUcZeVFcqttRyds3Ljiohpoj2xNLoE0RdcFIdwKm8ltYOAcdTHBUUw1CKYQJzisldtcIVV57q5TrWTFNiuuq2f8dkC+dcUoo6+L/iAhfRRy2yfN7rJQM4Ol/sZr5aIW1N5cSRRR4IoXhW3Lb45FVjyBap63emVQKNaXFegY76leFb/ATFLZ6is1+oWXA9kAEEc4YA9Vy0C8H6SHCaGJnZ9+sytGJVxblAE8uCAAE0ZueCtvmEmc6Jze5eYf7YF7aXlCR7WzTBiN4Pj/Q0tWZZiLBj/piZ8DZEff9XPWj/+CbHHMHJuKWDvt1/EXSjIySh2ZrnCi9dwNgtErj0Xx858Nt/VWfqCLaAGxh3nLqwPsHDxchb4MUniBB25OBaavMiEjceUWCl2sfcoPf3ZHYjeP2YJdNf6ntNiJCBLS3ifjzE9lMZucUnIpBZwcgL71iessdq8JJzi/yLmXWIv4mfOpphceY5wbo1xWP37FaA2DTB0ZIMWaDTz/L74scglkuFmWJ9a8gFlolUDvzjHK4biM86VDuX8dLJKr1avWsGezOXvR2AJBdoM0R2yqo19QGsjKdz7oXMyCyCPxpigDooZ2FxDuzByrDXIaNcXStyc0DdmYSixQ7xcrY3wb9yJKMlv9rYjEtXV/a5OCzuvLEfxQJwTSmPdncJM5LnnDTIlOimNfouwEWkVUsgZKRQ3+FKvp9iMjMYULin/DAYza87ZpCEgypHjRePv2IOGID6suCICRwTfmXL4ICeLrv29OJtdrLMorjd0qYgNupH2JSnq7kzkQ4johEr607084n9qf753KIj0FfpC1fdg1d0iplclC7pgP4uyzVrX43tkdYGOOPlEjmxOwtHP9ETY5e6Y/Zl18gl6YawQu4xxBt/Fw5N4PXBh6qNEZY//NK+mGH0tMVRnV0m33n8g7gmuubrhpddkGcasVk8WTUUao+RfIB3e2Q3Y7l/usXjvXp//1i2FyL01wUQTAz1HsPkJqL/llMEQYOn/xKu4XQUETb7NUnM8txNcdOF935Q+Lq9sTsT/J2WvXgPuAtvrydGduv0+x5r8tewVpDxBfjC963qRhy4h9ElWiNbu2WN14rZGu3Wcy3SuiVWZMBZ17ZLFXPWiKLhm06E0/fLhk70GI9B3ZoUVj/QQDhk73REM2RdvsB97iPkyP9pw9CM4vT9yFF0+QeQkTPEXT/WNTpqYuaQk9kNK4+USzsI0B9fbx1png6dV5EGKMi5Ik6t1KctC9VepOPbcMWOAwedRDfZBCu22nxOL2BH7ysoqiWvPOC0v/q8PbqbupKCK4WQpYlJFVySJdT36FtHvNtSyxc7X5LPQ8l3HGrR6SA9wbupBrrijk6juVawo/pf494niLmDaL4FuyWXzBhovhFlY5zoktBl9Hs90lanWVmX0QtrScKncUZWCOFZbkDwIrqN1wlhgb+pLwGMoo6NWCmDty+6r6iu0x6t87Wfr7SAnVXCfGws2Xq5MyfXjVuCpbWq4tjZEEKa31pAga1T9/pMiidRZmKET2kNI4tGPzFTOcktTElojzu+Tb+ccTsCbvLiaZmDWtJwt2f8or0cUH6sjK29PU4ztmPkQnECQHc7qkwBPYLCRmNR9bYRg2z0eICYiMfuajnfVKr/L3lJ8YW60pq0JqAQQGFtU/pHSK5AmSFRJJH/QBxT+wyn+Nz9TRd1pMN8Ci6tQTpOzJR9yWGm9g30y142sZTqRmUtmtLdlvdc1UJehJyP51Oc119qOQ1m3I4t05+uaLa/BXxBdXIgKQ+/ma4pOtX88wS5B0UDc2s/B/8s8W09MjAf+9BAgiTNYPBrm7EaXxyo5qISNsw0oKl0hnoC/eUbkY5yogvzw8ENUqL59mq0zSvyb+O63mEJI9fWSE44DFZSQ35DHFxS2/c5gnvc62CffxqswPwHzP/JdO7ajzqM+2y3yHXI7DgVpkFwQ2DyBfumv5qYHnE2njr044lr4+oPh/6kj9LEH0d8xWLGcYX1bXQUoEThWNmvVdXQEIzIPzmIrqZiE+Nyafz8m+mOB99oxSaTFdMjL+mHGU0telHXOFQgR09P7joukZUscOdVPvWfFuvzEBZBTyxOKWrRk8LdwxQcxar0nPyEU9VGDylGwlHgvMA176oWMvcY9UdqpAh7uz5yr4zh+CgBhv9GF+PRokwRfa6RBEoOVlJ867oXfFuDNzMp0MxGIjL5npPZBURWbXp6pk3bD7YdZ13d7oRGiQ811Nd7etYTJVSuwj88pUEo5mkKDFZwIIn+XxE/cdCrWjYxJjudaT1cd1GTBMzWGTNbX1HTJFi+0RIWBk2RtZje01KTzS3L8Vjp+RDaAFaLIp5xOXWhHkkY2NbQXU+PwPYb/LCWxeK/NCcwUueE6pumOTiQ1DWUJ1yL7GbvGTK/7nEd6z1GnqywZzbeJ90fSh2kaCLGu/PxCleuCruuXwDKUfk5mCHlJWV98hu/Qscp5stNajoelmL9gNfmGZ7vnH/4P10iDF/KFi2bsTrGx+WLAT9ZEPU0S/UNL4i66EreOKmbfMY6zoDI5QNkgppMP6AUNF/tg6Nin1ATC91G9UckC4Tj81Hz+xP9sb9Cje5PsmR825WCqT/AWG2dEw0hP5HIWVI1gQp2/beaHH0+lIPwSOdOoMsAyfuo8/WTnVkENX9gy5alRFqy9L4YH+5rYBon59pi9ur3zWs7Dy/98FzD8KzosljjuR5F0Skygft30WxewLkLL+mJbiJnWmIDqiblBZz/uzQb5ERmG+0JzsNvFUr1F95ZRyKx7ZHMybpHOAKPda10pZ7sjLYw1zU2O+4VrRZY8GREVL1N8wWhQLpc93g1q1x8G4U8eHYo8QL1RXk5iMUQDVq6vSCfqazti+a08FBpk8Uct+frtsemO2TTqs1TjCoHZGxopPjKr29CjbGDGVXnp56PanSRz646Xc1zXNnep68S2aW+cf8BfWHT/ezLVBTirICgcVUHIK6ig4yh0DY0ar6J93u6MLyAjNw9nEZWGZjHpGhzLqtpIqC47vgVxWthu1VTDZd6xv+IdP9PzlLRjiRzvvfz0n/lw/A1hwjTjhps98c6/chsHxK718NbCE/hxaquDCpkZWqCWrQ0sbdw3277n5pV1P5Tc8d/+Ym12BbPffNc18LmnFHQbpiUWt3idXwb4JZjDReQX2LDRt7SSBHfuClPnp6+iDrZ/bml3XkgcBmjJLTAlWchqixzgE8F2kgsNH3Yu+SsOeuMA2ucP9m9XHDuI4UrP0Ix2fBAOXBcferWI+kCsZjlO544LlE9EI47CB5rG+t9TcPW/yhCWnQgenvhZiNbYGy98wgZq+YLPoVl6OVDfkKGmRidffyecOZmF3LAghKk0xdZgsX0gjlhml+QS1IEp+P+pU2Mcz6igs8MeG+l3RAcx7rEmKHegy572uYJ1lpeeRYDxluziruuAI7KWdByxEeeMy8CLWXdBXPeYZ1xvJ9DwVjqYe+ak4umi45xMFZCSPGjOzBxXwYiMKXMge7aI09u3esgJNhyq+mOaad+5tCkRIhaqu+kD2BzHwjt15q0rO56XWeEnv6enDLLWUqyrdaeBOY9O9Yasn9VQX6gho0MH3n5BGvcFEWPZpTlbqsrlfu3FgvtPh3U9U0miQc5ucAJPN9ZQrSIjQ7899/SNHyAR6LH3cTmJEzcxwOJcMf4SYeK5N9vlXACvY7UmcpB9fFN1gWWST2wqDEAb+6N00Yfh8v6YJc+xynDLeP7LuESHlhWKgBfdYtcwtGf7IHOfAHRRXQ7RAl4sKX7GzAhyQl3CdfUsns6dENqGJdhLSt9ulusE0AlbnjpQ5F3hlrc385gymADnqZC3xdEm3UtIQNuO1Bcz/AROB/XuhAEfo8mn+8lpKrkOVXrmiPvhuA8bI3warkmvEZJt2ykve5aeynUcWzMNcIFODpGzo+oYkJ9n3CzNffpVGbBSM2OaAcEEUSqoKaCU3pbhb0WG8AOrzyj1s2/h//euXOw8RNWO7gts4AX5/u8rz7CXK05pcCgrNMN6v/FrkMCfacw3MxHZUyyQTpAbnC2bCQv0tBGu5J+xQ6IbK5JPVf3ocJFLMOidlEePjCl7Q8UiIvCM2IOcR6WYJOnxnRtHqGovhDdRIky1twlKi1D1t4QAARCNHAq0fvVjoVOHmJFC5GizB+C4kSHc6NA3sfxLqmPHq+FN4JnhLZ9RVS5RGuzCvJxUZJq9/yLbKU5iWVlKvzWPP+5TSahbpzIU8SniOhajdQppHfOUdQEC1uVTvjifUIr6lq2ZPd/D1vUDtcp+OAjdFuW84dvsAEqDtnGaaUSyA5abHDB4B1l1rY9l5HXWN/ERIZDIZNeisCWpsAff1PTs/5ac+jhjfiHKRz37nzpFXyBaaPYLVQvjFQfk60SrQvd4tNaa1mfMpBASE6pI7k9UGcQEldG2A9NlzvR31Z7EIRGT95DUFJLLVmiUHvC04gYImysiEPzkM/Pw+8pOD0/OhE/aBx8yHd4kl3jXzk17zQcbhuGFZUyF3VRECyY/WIkyUlBNn+TZYNFPH7fayHpMLuSw8T3+vYSKYfKjelRC99nMj1AaCT6faMjSPI/Y0jz5w7c72Na7JxlEEtoFstDGM+NhpLcV1xTIFy4elvAdbXf4zrYS4NnosSrnmqf5vB4OzH299YiMYKKcIXeSTo/KQ8b2ufztT2oABkwKP+t8VPexRHCePQYL55OTXuwMDjj3+WOdJ8MoIzLIDC5Y/y3pnRfl6WWcVFyfRCOuFcyQNi1Jq0xhQKotBjA8aDYBkAn7eq9U8eitdTWohwk+Ax6c+IwdwE/DFE49Pr1IECVYgnxwLlbY30hhbPfXKdJi6OaoG18AXVUV968gjXuPaK2NWbQ2T7lXD6t9MGEgUTWhJyLtgv325Su3hC7mDLPW58moSVzEUQXtzf5WvB/M1+XPz1wv4px6+YOHYOwXvWBjufUm56ItnTp7VR+GaHq8FSCUvdNK8tCm/xm1yn4Sue7rUqiYCTnxPnnJb4RL8Unuw1kUUE2NQ3pafP5Jpv4IBaJbYxSMIR9bSQ/QlZVntOx5wQ/x5ZT/tzw2sm2MVVBdi4pA0agyWmbfAC12ZPkdLPUFfCgV8ZABBc+KF3yRY87zfMXar2Ibt5OK2SOlfeftTWQTf2tk45LyaYmaSSpRTCTjrrEpAorD8WNfLt+QWBCTwmGAJE9vCdR+wi4noEUyypK/lFFBF1mPsozQC28q9mGfSVfNgSGviM+fULoO3TxhNXpSsC8A2y/18pjGwb2quFgOLAGHL3A4G8R1SXEFkb9MZ/DxWb5M8Zc4teLTqv4FNjd1OG4tjWfgbqSpo2W48XQ/Pe65Bfg8sL3vMxD0nVVALCif8rGlPfptOAwo8Vh4kRuUd+yI4KCs9N56KndwYTYuXhqeSq7zihnp2bJa1ZkH97CZoj4MuaZdRpWTSIQ5Y3+GSqFicJ26WWgWNLk8IcSOrJnwzgHzTXhNpMIjK3X2PSDgRLYI0iqt6LYnyJ1KC64wqL3cQZQxThmEFQ1YxSNPzAfoYI8Re7XsA6EuCyqCtg7LKv4K8TfbMnzk3jgkn7TGsGhWApQypIHUeN5J7PKm1OhujDnAGYPF9HZO0+0v3ubxoZOrby17/Ob0XVnXfHEN14E6jMx6LIOHzmhM3OGAYgnm2fh2DqlpvP1Ee0Qj7PlJhneU6K0B0rKegRbEkQmfnJBER9qFI46gxEOtyImEwOq8otbWLNvtjyre0wUavJW814HGoDczm1mU/rjVQZcx+ZDwfzvGRx4ekYO39itzceWOseVDGjAbKOEJRuMIPrS+XwX+p5/zTvuWzQzmKf1Kifke45/hVStxZoja+wpUQMe5snDA/88n7NUnbeVg9MVODgXSPBbxS/OaDrQeiZO3iPAL08Yl4d7SQDeIwE1S4vQWrEuLdiMMSbgIYs6piK1mMBmtRRVXBxEE4zqRxQ7xKQfZd7dZ7fAAk5AVkYfLwgBSnzU7ru7nGZQlOEB7qZ0IkzzpQ/H63IaD5emQqfJGAM6c3UUwlubqLcbgJI8IfB8mC4I79qykRHtdzDo6xS0Xp8McZTI3SA5vknhr2ejx75eXWDgU4whIGkYSVy6WFUWX0QyOUC99Qkhxag6DhR2MbFKGJ9s422Fncv5n0vBPK9LtCrQH5tN7g4yPdzwaEu9TYCcXxkYkZY4GX4UhsOlMGwFrqtm36n0TpEecPzsT2DQ3yaAEyrt4u+Pv46flhaWhGx++GmBsOfevL4KGJ85EdKp0AJV9Mj8nVI4/Mjc39EsEQ77R187vJq2NACTPbRDh8Ncd6mh2iy8Sxx4vn+eVkb/DLxFGiGaYYtvvD26bXxCtXQctuwoHve5iuvi1AXyWVctH6ehdHYk0cXLttgGyUaVb8GKxdPif0QnCgwZG437chpEVx9m4phAm1OZBJAGtMjsjmCl5gCllVCAjbhkvkkngsFwJd6io/kmBU/H0tTgeq/9WQLdxTE1KDOXGE4D3YuEmuefTEqXhxaVFFDGyWM439QhXl+b5Ie1CuYyZSZWT/dUn4G1ZG5ysyqWNXkg1Gl+GLxCydfqYevybW9WL5Z+BX/va7LWPrg5zwFvHvZ8VuqoYvUJ7psUqqnXkc+o7YGTOUg8GrBFI9UryjG1efiU3EE2pRBOnqvHMgosgPIhR4UUZFxIE6P6dADMGn+9S395UyNKk2/kKUdEsRRjpynkrOJ/v5BfP63iIFm1I4/xhlSBZHbm34IZxlfT153ctuAur8Ilp0sKPcFYL8B6ET7jVhRNZnT+lJ8GTrDFs4GTCdU76w2tPAULUYsYBvos9XzTMRmRfESrrpcoAz+Z8TkMA+G1petbH/KPRIYsu0uDatLn2RzfJA0ufQrMfrBKL/bdZQKnRaUdPr/xPY9GqLolMwmzcvtGvVz6W1M2cwQDUvhgMU74+ipqVJCuZ78u+V8E9g0MvHQEmbzFFL6uaj0l6kNkdBF6zMtlEYdxJsL4ISnvRJp0crl6Sx8irQeF+tCLcYkOwJT9kq4ATuJ4p0C9jjj3lSfv0cGC5/R2R3eq74pgqjK17TkYl/PRXe2Um5sdtqOU++a3egfG/Hs5h53AKj1KxhrE1NfjESWKk/S6goRl329j+GllsxMBkhpmpLUB9WEUZmiigEwQgVLxg6ky6vaX6rhndVQ50kzCDNT+6YUTOIfezcQmkR3BFKV5LLKF/w0lfOJW/m650EZcx57WfZmG+fac8kB45sIN84QFxgvKFFTbezSQAFpj5/H/m3UD3zsAssd+mEIw25Y/73rX2zp51sLmH3ki81fFrMdmvYgVZDSta9VXCTDYimmMIMd3ge6uAjr0S3OpneGQ1+6XAQlpwwVqDn+HgGnTAN6K4DMfR2HoV7qYWDqp2V9RHC2F6qasIPvTLGZ78brTzaBofYVGC+QocMAjLN4Unlf2QMCDhqvFv7CDjPWvPnohtkAABfCZOXmkNKh0mgIsDu1byBzthVncbsreS2K46k90wIt32v6il6dH9JjnJNCQGrhz51JaSwt95xkiiyDq35Ge9FQbj+FAb9hyqIJgPznC7mxQssLVoLzNSd/6otleN1KoXt95ubnXWVM/2FbP4WHRuxfC1qHiykNYkOaFo0CriU1egJ/1gbgKhDgaXeRgCqrPNLEH3qfpD/aSX/fYUTUO/izsWXWyBkG4izm6KvSC6KUwZ3GhZRydcv93H4z/58L/W70F6FCY4rQ6Mn5wJC21tI6qi7UsiuWmt7dxtQm29eTa8HtkuP6Oo0S4miwcGJ6Ntz1/UClP9qXUmcN+UcQ5weO8Ny3dZZXwC168gHYvx/nB133JGsPX8a14bV7Y//OPNu/aV5vuqX9bzFua/ItXm7OPE8XMymZP+Q6XMcgJVKZZ5aWDZ3k2WBKXuN0eFs/8bTWnRE+McPFUmef8nEpn9iXC6F0amCYbJe9hIGSK3FJ3m4uZk9wVRw9c6pexrQgfx3B7lAT7JI7wvdurHC3mD2Q9PGjn0sYchjafa0VsED6ngsWnfiq+UeH+6EO9r2vfohbHxG04izWdX8yzcgMHCLA1ZOruWGXN2bwOvG5aXmGq3CHPOv5JcdL1zLxgyt34Fd6ykNjxHmC6YEC9LRPPodJSH9+D+8E1HvIYDj3+bp3VBh2SYVHN1YJ1dBT9ft5MrbCA2m98LCN9MxRjgEwsAZRMbtgth/FnZvZEl2gWW+YWCqZyPVp5Ju5DPSoUPkW4oeNI5yqpUJxx93XdxrlRu2zukCvqyOQxh4AlyjVQA4ckFnJOYB8U6RrYtpj3AN7/P4ne4SdBo3FF7pdmz1XWglIwmHkZjJJchvc1ibhSFqgNdleKa85DJK27NAaAYTPrkrrgPJ2T3T9j6jW5CY8yJsFZyRs2vcfKDOCx02lLImkSbOSDDX4rDCUgLTSWGetTvceNk8BwuQmE2bjdQ9qBrx0SwLyio3AHzq5wFoRBgN9THwoyuJw0KJunUcofMjfX1QkcN3T9uv9uaYiC83BEsuwAImyh/mihGbDwDzBZ38b9BCzySd77mHkMXeuCL9CzNFX6od+9x4jDFAZtrhpIOgDrZ30UoyYcU105sJPOlOBO4rB0QVfNcw68+3pQqjLGh1dDZG2rv4XDocjZArZahLTS7XaO+fsyphdYrRJvSwwwgWI681W/UGkZ74h7RzG7aQI8XejGN/Jk4wE9uvgRKrFqaMaQsuvF06fEjhqwrSLef4mb/heB2LuA3kJHUqbSr4pirzDT29Q1SSR+x1mWhiTgP4YBVPAaM/e7YnTK/xMjGtEI+ZG4n1UK/OzGAhfefMNz19fWu7MZlb8CQvOcvxGsX72JzEMsCC10WayEciV+QML4IC9mh7fOjId+9WM50O6X7LsPjMSQNAi5cL167AIxbw0vJZG9PTTU+m3lNYDWO9alRdPqLc/HHaJT8NJFqIW0pJ2HzyDUQnHF21f3URlkXXRwpDOeiG0VF1tmsDs18Ywb2Zr9dc+ISkmgIw4vsFFHfi7RdbVqR2byJbGBatnoBkuExGnIfxVsMMsFK/iT8QzukWB7kEYjSR3mVf7uwD6yM3/fbOlVj3S9XZPTL76K8XHAhZWie5+bNg0A11Pc3mA8dFnKDudnmQ5EbREBBJ1WIrza5QiTD7EBXTb/DtTB2QXa7Ps9qZNtka5Q8yd257vFg3zrHrn8WBQzELWSNEoTtkdBzXGxmW/YL6QYyfnoyfhnuWZALDqLwOwye/zEbjAUWgJH3bzGhdArCbTerTStKRhFAjrgd/R10rK7/DNHCJCJCyCf70NaIn1Lzmd7sfZkI8X7tdi64Y9wYyj7SDCysifFae+iueMrg4L/IOK/79NSk4xYnEOj/VLZaadrQF/NxlvTPtWYPk5kxYbf5rtg7k/++aXVDF8xlep029Ljx6UCpUsaz5PRFFp8XhiYE+tb1N4+eh1GUHmf+5y5EVr1WlEx6rcXaY3bpRIQRAok8TfXkt5ggu1PDEptwVOCBAU/ra7kKWVaf82Cq868Ekyk+hprxM7oFwlfaVvo5xtI/NKe0dYsNLeL5UoQbfXE6+E8U/hVCdUWQGqFhQDhlbKJdktbF8f/5dufQ2EmUOdTRPKgQb+eU8+K5bxZ88wO7bi+uo5w+U/dP7S/0xSxUgV9DnK4LfOcqXv4bxCPLnPOGxNDUoOOhxAORaTWCROECfveQKtbKVSzgQZ2VXkcFUMfLp39hN1+lWEimXBqzcJTvaxG/nRPcCkCBUH+qXbkY5s0vVrn/ZyWAY7k8NYibLCNbW5tH5frW+VgQETIlayWBnvaU+x6k+9+S78YMFqSQeQTWUbtkNmAiSPgCdj7oEKP+HAgrXPI6RaPP1m8NT0FhpbcKINVOsrblV8W1w3Xj5PtxBuc0Nst6lajqBJOqLnVMwHHZs65yQaquX0EAKNRT/jGyWFn8ZZh1p4Ll1ags9hWjD6zDmNViMlwTHAMQVkQXKIYGVbzDFpcSm1AcUUyKauFsZH6jMrnxp/SfwJz52uQc+JgRTEvFZxqAuPJADgHkw3moZEYPU9D5jySrixSYK5pxd/saWbE6Fy+qJPOXb17r+T+2sJwC2wIyhVff58Ga8Anpgm9bAIN5iYOqy0wn22vP6M3l12NWhUTLvRuIfS1S99bQQ07OEnQ0qEO5V+YNtcjl5MYxwAXqajDLAIPPieRS+2j/8A/Spn28TmmnW9x8p06GWeGeiWA37UkOA1UgY6HjdeC+zUbKmkmIBG/w2u5oYteJob79fs3ujzymorN8A3HvRiyB7SDgCbCckWv0nvo25GmYhefO+LpS/truPlF1twPSVjZCACiF9tVdb3yVKaMqRsyLMhQEwKjuM8db3Mtc9cDvHtkgPVIRxSbgifcsZqwoUnlGd1qGd0xXI9E2D3ekq6iR4VvFaiLN47aP44TpHV2or8p+CyPTozxDQJlosBr3n6p6lyRhPDfaw0HonAdA2LxNJkSf+FvbLcQql7WEqe31mraMhKYCXtsPgVNc6oYLy6AL4EqUFhQEQCzjcOq0d9voAPp6Omyr8994tWB0IaI0sSplgSnwnWN55Z35g3ZGCkxJan+5gbHbSX59Rle8ULTH8UQnpE/8Vd8CXYTB1D2efgA36H/61H/i61QftkYWNu++YJkOoAfOePp98DFe5HWdZg/2L2Byv6r+phPZL0oJnO0mywSDR+diBhPdNkWStW+pfTGz0dLwKAbd+kxpPG/Tidto1giY5fh0AS6G7W+DygCC0S6HFaPtz0ikcoxEAsMcvVoFhN8EFADVFul4KS3i0XmViFKaXoeEe8JiA+pSmq7UFNKI8NysFy8rrO82hRXbSz/A33Q9OD0NbSiy7mZnA4ejCZSmcpdC7kAcdhEk8EL0YlsRsV7bJc+ao7PUJwDs2HCHwvj8BcgLT10sDGpY6RKYmSYw3/TvAeeFWtVAyWjI/WNazdr/nhwqVNYAJsSpEf8pEaoaq1dh/0W6S4X6CU3n8r8kn/d728PPyG8OnG/gYM3TIi5sdg2QNBbmUpgmN693/iM7xeNloWh+0Sd7iFmp9GWSah+FAy4cLvLB400Pbc8eYj42NNe7jIDXKybnAks4JnGQTOlFeqseDSxKSrdVINAYP9pCENfm1FOfob8j1x5BDEn+PxiPXp+YZ/BX7TnqB4FHXjfTgRvOGLjO0Q03VFgrAqaQxHCd0ztmkgfh5NCN2G7qNM4X+loY81hyHC8HomoGgo4Nn3j1BMEZ+xvPfBowJ1z7ZccqkIW1wvJjvLPtwNp4xfsLg+nQY5iEjZ0YNrV8vnGjBZYYI7abHvRXkgmaERNxlD5qE9o51UMGF6V5Sx+4tnRTzfoNxlv6+1I1lLtMhuHW8LJJXE37c5n2ZdM1Vw1NWuIJUbqVg2V7Co0nCx1i91Za35uHTsqx0pW100OPNZM+f4iNTw/fxQc43tQLKwhTGQ+UeVM/7KM/AiUyr8AvZvW2wkXaC/Ux6LCPtzCS8AUXi7t8udS+2z+nYyZtcYNQFtP77YXy666YaimHhYo5lsKbcJMvrP5Vez8FAn4oiglB5b871cRZHfSOAmT37pu9oe3UHfb8NnkfOwcvuaghar26+lnbhBSRso6kCQOKfyfHFnrCWHxGtONaBRVC2Kp0ivTtD871qb82/Mm7rx60NDM++LiPfFIkeOUL7PhGQ4/hFSLcXP4mUJpEuj/TBYNXmefRow8F/YCiK73DXOY3VO7M5T52sADGCVcj2Uh+Caert8vHutBPb5DyLO8Xyl0LGkNenqOXWWUns24CBTcZ294E0FcWSWDO1BpEgWkRXSHDMtmsTU8UxCVlfL+1jI5J0hdgAs+TNOOwP0yrRYKKPXZGAhpzPhV6Ft0XiUKtV+nmDlCDCWrbrasCYm9v7Pg1BujW2v4GFDjr1DpDqzFyHTXocO0h20myaFaNNWU5vhTg9CmxH1BqX4fVlNn3kPyp2Y9jOJHUBlJ3C8v3J+sBdEwPcGnIXFJQ7SAqq200YTbf/PtLaMXUXmfL+8f0NS1WpS/Y3scGgrWkQh3VNXA+BBIWZjl32uZpd2cMhw7D2LUtj7406Lsverbdt2hu+RRlOrpklt5CqYAq3AxBUzoMPZlG69rcCDUPw7Lsw2K6Ox2kLh+A+LpF97jlocIwKU0lM3JaNQnIZy2r7ccq4gftIFWWJ4sxm+e2YP9iRsF45J2wO+su1pTfUugh1bSfLEOntXi9tRLqI1TS7hJSmbX/+3NlkjNZpLrOjgXgrfP2EDcIrKNN8bSdVzoGMzBQfnq75iUzgyNtNOwCE6DapRVgPx5TTlRZ3LCClkqLP8F7Kz81zWEIywIYvtrdm0Ee5Fp63yIqFRfL4KbreIEpz6mMK4k2yCD9iDGZNcfLJsXg1gkuIStNuSsi1D2bcrUh6bhpjKSy4uH9Zkp3n7qOcixTmxulAV1jPS+8ZFNCCTBsxEtxOMDcRMlUPrmZ7wlczF0ba+bwFWeAuy67Gzb82/niZKjr/Pqy8SfkgsH0TwCbCen3CVVd2oe9AB6C6bv3KsZOAq/usx2JdCIt1svpPfGwcUo4AYuLne1k/8xDxQMqgNjMuhYfxiSP9ASfU/JSn6jcDLn4hejYDQ9LO8BmDaYwbwE+Rc2rZRmLinglq02hCR2snTjXuCaZ4TpQoh03MONKQIjBt+x/I6mq49Kpi202yPMM+Lg1X9jVseZM08u5OCCM8ofHOBWZrJ4x+jyRPqn2cX7rsJwnAo2UNCSXYsEPdQAfEMaIvOdJJc8/Xeb0q1hEahMsMHMPwTmgiW6ImXBgkD1CT3143n2w5JvJsKZdQ3fvAstTUwPkD5AEFzHPJeU9z7d4NdgEnLvqaxXR+J2fVL2bFbSx3jVxgtyny1WpsWilCR6BEuLD4F8bpesT03ZAgDrSOGxnofv3UA3nXnsWNHS7oRBSlzGYj5DV1XB3f+WEAC/Qhy2IraadyL5GmaHaZadCzISzvZ6/hPvrs2phnPeD/ZZGjrKi1OpIjVCySa7bUAuV/MV6PaaLUe7vxyd7dxRLLqgWzsCpBgsOsOhQZlXD0DuX7YhOkJes9ZEAjd+MZXjYGeDGYEae1k4H6w7yPJur0f5GKUGccOeBOQdt6jsXXhJAp9yt5SDkmjEBk5vZ3FZ7UafTed2Rfc7CjmiVkFO//RCbGbgWWvNnnW9KgfJDNZL9Ei3fN1TShZrvrSJexmaeihh5S4WZM8NdPjoKOkXxgDl2JvGR/iS3HR7ABeaLpfsYY56RUvTgP3z2AITfzL52FZmX77+533qMuCmjD/iOpJF/48rhrVp5G6+X+k+H3b+wlx173X6BcE7G3VJruQ4AqYHcKSlx6sEbm30pdpcUhcisOo7Oee1JbuQtChJ+h70dsZZPoq1iaJcOtObPxt/ki8RbYY920fTGXL0jbXaXws+W8rT8W+Fk0+uM5nDzT1TnnM1apdelO3NOBwFhcfjWlE5udVtOPjBmBH5KQ8szxfHErgrvMoWetChsYPEH8tyI/ZhswRNmZ4B09pvojRirzhu0rLd9wyXyhz6vaJ+qm6DqPXbF4LyMAd8C+EyXT38Poaisuo+Ki+pbQZbPD0BB4RSFZlk/CW7sz1JRqLpESD/RrAgAWXbFJZ19ZjiFD70CuAqwFQB8x0606fdQT4sxRW8YQZWtIjpH3T0lSyRhZVqP3D/qb5izADlO+A94Mjn/wN93U7wbpffmxej13c8RrgpGTC9zE7pIxtWsjnVSGuGoVqF4Xzr4Ho2+VoAzJLQZWKhiHOcVQCGAh/sI7OtLtllgqWD3v80z0187rdvBRRLAL4tLQmA1Al0CtrXZ7/nhKLaZaBcqMaHlQoZKlSqrbekvg9BZnx+dUZdk4M2DohbXrPZIg3OgRHXj7tNKCIjYznJI228LH3U3RvHNxp8UPWQ4KsXi9PUDcuKE+JDce0ywd2R9TytA3KugfD82u7uph5VHK5eGmNJ6jIYgNcggnD2bS44sHRTdVsNfjiFhYpBnBit3B8QBlNZkpE0Grm/EWgo7WQQ8NE2LFMNachLH2VYO7BfWWwMO/v6sIiM9gV6zYtVao939ilQ//Hpv/pLHVPZdo/Qre5s2y6WoBGei6Qr9N/Nm1Nf4AOwaGDKlmvuqDbDNryOGDTDBUiflyxs9hmOHg+tjTFJ0ss+Wi6jEgznnMPxDGu+/r/6j0xu3jWR0te0aKNs+I176Mas2vBnP0Xh1q0d3Oa4V3DSydy9S5ueXFpwpbJcrJIJyfu76omH3EaV7mYYqc4yCW3ZqIN9aeTlp84bLABrZA7wshgxxxvsSk/TOPvfWvEu7njHRIUU1Wwq2uQFxE2/EhWZjnC4oDDC953xCa/V4jREIm4aITwl5OxJBYNTppsqW22i5Y5guuOYRj8qIk7iKxlWMe8kOv0BRiUNa9s/xLRyVBK0y6mSYyr2lxP39cwf/1dPVCLVSvNerQ/AcfJv8WihqdSAnXYI2mcj1cS3lHKRJ+GjJ/ctIMnntqhq1uMkQCRjh4HwOeJuh8XZUizvsslUq0iWyneoIijVgnRQfJ0O15ntS1ppRW/UkX7xh7oYjaI/Yo4WX4WNdA1kJ9AvORuwlM9Kza6rJ2JDlpTZcNkwo4fM2uexbjrBJ6fPjKUOPIAsLt1Uu87hEk8/1zllOLacStemIxpESYhAXMxZ/m88x4ZQIVkqoxl7xFNkDXJ1KilLRPyvd+a5NPx7PH+bss7x4HMAF30ZyiyoAkTLIZ5Q+d23xsNN6p5AaDgrAgjIvJ6Yx4aDWJvTukrg8OQElhFV88Ly85/4jnsLMhc80yJIDdb1ih/DdCGh9cBLIWLce1aHTE3xSUbsDQkAdiiL5y3qg8ee9KUQqHLk3NEmz5aCLsjH7v951Sq+VqFHuPBEnAoSi+yInZZM59NZd7IOxTxMGt1WFGqNlXOk9QBhvwxnJpCIegEfp7F38OMGRb0yZrsBf0dLQ/pHpqD30VbvQEL/fgf6UJ+HD6pM+xt44C7lccn2Z9eyAraZ+EpsbIgJmcu1oEk6TYlzPAfsho0nzMr44nJ6t92SRjJe5FaIVZplrZszI7wHjerBEJhjPVpghqNO04dfiAgkoeDg/1vKwYsgK7qyjESbfNumaGbjjU6IdiI54nU/cIKvBvvzHySmq7yMZ2+d4K/6lI6JS/0ECHYHW38yvgqYCPL4jel89oFybJuxOtLhgTyJ/VA21yRrSqUHgGOAkoUWUxizRjyzuf5Vrg8FFP8deyCcDhIGkgyc3mJJr/zMe4niavu0CCdim+kzrdCRoanmHiDRGyMgE74tPJpD2z9WYiaPitt6RzcAM9Gcs0FLiosHwKB+MyHlRNhaie5Fd1J+3nSo7TE+xu5cRSNkmLy/gawwgoiE3obMYtULDgMaKWyBaEVh0TXQJUYvUTiCLLyy3KEuDcDv9EbauUGftjFDFtHQGv0iRkbhNHPGfQN5NQEWlZ4zrcmzXUHhN0X+dmVBzoZpyxBuYYnWHkIQwR19mt+4bK8zakvmMwwb37oUX7AvXKkXKiNMMpmg5xfM0FnmHTW3KAQp13yt/OiB0EhnZ6yKH0J7uZQykPS6jIq9tRTKGdfrCEW/Ifw4PuV/k2u1tksR/i2JiUeA50CFBQdCUhlG3nT/aab8QmSPC9urJP2yJSYlgcehmQIwsifU18SIBpq1Yn7tNbqIQVcTmOu/0TMgLbXOxqO08BTKUQ7rCOYr3umb++0grIB0dYlQ347EWoEkaTjLlpj5Wbwq/VcnxAhBkb0qHk3sXk4rvKacwxhHwd0A7kaIDYKdE4hI/yG7kd3WRSbC6b6JWUu+WWvCREbH9xZEsmfP4F7We4JnQWe0uSmBGGpkXW5nSln7oSe+pbVQYgE5BLEumHktGYEuq2+XL2u78+jxVeFtp0PUhzpF4AOW5bTJZo9sVLapftrpx4xaIN7wrPEeq0AHKGfj/rStV1SJmkGn8sfXBBhWi/2I3Jy+YBKtcsmB9gGcDyx5RqqknjFQk5vPkSvdddkR3lJp62rXf9YGpBu0urvsyrq9PtvDIy9gMyn4J7YoJkgS7m4g8U+BqiR6Osir309G88lYQlDwZDiDKOxN8QFS+ZWbSRA+ENlVXjsO86SAInb0687UHE11Z89m1mEdtecf3FCa4dQpDKCQ6tcUs6q3oqNqcUoonXc2njcvfkseDg6cdN6m5Sa+2d51OW1MkSn0zZU0GoUoZJ7qs7odTl1nWQ1W2HBNfQveeZBIiPxfx5lKOEPRAj+YYoMv3qEMhjJo/nSJHJxbEiSRHE54e7bq/meKTaJwVMj9EDoSq+wF2YHyVw47mgKiN5GR4yckXne8rt4UBcxK73RiI8s1Rx4bLN5QiGAsJ30a8QZVWfSZQreO1CwtKVeQzZzvzLADxZnmsHJMWoPGRTYaXRW0FrlC6DENt0f4d7iQi51s2eGh+a6VUfejvxhTli5f/MNEUeHQXfsJCgvb84Itc1UfAaZItb73wcvzqcc4cteBN5YnhWOxY7fEy2X4rgepkKgLgU3DY0NCBBpk7y3ZfvcYcJPG3d0V9YCdIFiX6QNHPmru7GvsNlbEDkl3Ks73fCQda0DZdXazAkO7P3KzluUSfRPKXQ1f3S7LwhZXyXxJBak9dU9cCbFSxEu/ovTHpsFU0b6kUGK0SEwRopUZhKGwBi8sgJHgrLGJJxgEZnvDeHLlRCn8TI4FhB7s+JryScbD2Q7uXyAL1nX9T39oSm5EabjMth/ZTZjs4covS4VOBJFP07bX79tBKMbNXdqH+1CyKzaeR9YMytHGBGbaHdbYaeHAixaEniKlWyx+V8gbBJZeQNstmLUzkbJBYEpeba095GfGUJEpuVa92cpgXwWFC75oZnYkVRLDp0E6J3SzzkDqO49qwOpyuxO43DCotMfrQ/Y2oZdvm0WlGT4rO21jfVFZnaX13Q+nZ4nVnVIoCwxxNg7tr9esfTWGEHArzxOZCBpcBIOjJtt25oMC8EnBSaoxwtgsPZf2kG0iLTeZvGHslTYqsFEIC/gJ+GMi6zAwYFCZ600Oh9RlPlE/XvEEQBhh1wR61soZgxqAkicYHdB+RUwTcr8YjUNiWkfRStQr4gkvhnNUc88YjS8dbRMVD5Bs+1JzMxQq23lBMIB1YZRyei4wH0PHOsRmLbuj1D5wmPPb+eHbuNbKClhO0ASRF8ZS4N1NEEOelwLIunoNjch6nMQweb8b2/eggG8NoLgBM92JsfDOCt8v861daw+laFfcJyU4OBwiVUpERAArmx0ixKAq2/PV9P5wADe1nxvmlPth8O8PwK1v7MZpLJbJXYYyy14SntaUkAN3CJOHnIpMpuzr/BurCYo28yRk0ch1Qg858jTIxgLCX1ISPH3AGTiEfcTbhYQTxnNU+i9w+IpBklb2S0m/15PSbV/WszqhzIDfs7/Nr+Ov+E2NFt7aCt8/QkVux4luVQgZYf4Cjth+KAvNdMsoL208nOC4goo8TlRnx07qvADkCbo+ZN83CHjHmnwxsYUE17uMehP0Iiuxh+l023DBnSMDwJrPWVsfkumFcJRMMPv22U6eJheiqBFkq5fvaGqBYDb1tpL3jJvCbqVUG//IoFBHqXaztZ38aCymciJrl+N/7wRF6K0PrxUJEGd34FarVf5zgt5G3DxTAiYAyGV7xvE6gMi+rMTnKdkyAy7ZSRNJGxNzD43+SmatPNPulqPfnG+Rmb6VfV7FLB4KPUz1XqBFnCwhAAwi3kGLGqOYLW98cpDRNrolXdYj1Sz23FtTmWIwfcu/9A+iDyn8i4Q6vmY5T5sMCnHZ9IFVHg0kk4BPlJvBg+2EDEPw0QPFoTxKOv/Wd7ZPsSdrb791HRpQ/i96BHlYoOF9gIwZuF979hO0EBon5Q/bS4QzizYRfsVFwo7ZVMqAQU8Kg9tjgMhfYH/s2mbbx7AeqT8Z+poJ+e2qvVFeuQiiLiwehlB7RZzAFgeK8v+bKo5uaq8aqwK+rFiFoiPv0vTBV9W5akKhOM7IB0O17BkFfg/EAIcZOz9Qsmz//nC1IbN6ci8C/ntL3JCPv/NSDV8njPz9yk7i60e4vZtF9oiaDtRvObs8hSUcfr27eOSEcf64xnIB+w6fIadzlR9pzI6oDaVqZXBRSXMM2vOGjv9Cuyyeih18DNK4ugQKBmjq1Fbn92CMLkem3PyGrakaAX2qbzRfxcijWRB7zXPdtDPTJz/jbkoMHarP1OAWCjx9hh4Jlvkrtzeio30w1C/5ykB5lNR+mB1uOhVlPqmGyE7Mm/Shy76ECw2c1UfNSFJJIIw3LPkilaMy011tV3D1qz1aMrtuO30B1zbEgxnFrBluWDzaZg55VWcku0LwFgQhYcs7N9UGk3VQymD+FW/q304yfMjwsMUEEbeEJMvb7fWub+T6aSEDyBjS39LKvijUFbdQ0ySdYOG5RksAy1c+E6XAYgcgOb/aZFvowFBjaGTU0E+o0UzFgaEmMu03CFJ75mBYIADPKCf0n9m6f4Ww19FlVqibYQHcTvyAfewFiPEe67L67v8rkYd82QvTfp89DRdI/b4d+Xo1QBF1zIgLC3D8WvaGPjfijCJ9c93zWGxMrHuzxMU7+uC+zko5j1lYFfBSY8YnukQkQ9d+Xw2Vlqr/7Z8fpVP4/nRglLD0+YvTcKmcEkwx1GuSTKTViL14i3EzLMJD/rJpDHzrGMlw+BSb8r+XxXJO28B5P7UnCpgYAZjoB6FCkFtAr3s3QC+0hffhTwYTSayO4SGPbank9S+1t4gomAKGsuLPsdhnf4ouRWYOntoY+bFXtvBOXzHwTH5bLagRsT5445BCGF2ddQsQFV5fvGXxJ0AErJ8987Rv0Gh0t3632V8+ULBDVbEkoSHvjBv1COzm3tms0qG7WBBxMMlrj76CTgIOT2Q9RxrNwq76tWY06tSDTaazoWXEO2I6p/5s+ypoWBj4xCq7DFcgX35ZL1pLiEK709gV2xgHXGxBif0DcQtjXU+Q1eRJxn2a+EXcDm5kRZKPGF62dQ2NiQIeU1W+UxRw9XYl2c4rc9+JlBxm8CEqI4eZXBD+kphEe/EdvRTwBcXQKX6ikHu0UYL3QEkKWGDLrvVoFxCtc5FhCDAp3zI7qUDh4L4ytleLmZjZXGsSswslxsEdxX8pb3cTDfkuCuVg5zcKHhOvE6F++WQ4pIteDmrcvAYU5YsZfwdJTn7f7c7AmnVRfHTqaTs9UJNeFuwJd+ucgz4TtqDoQgQgQOZF2uVFKLmkG/6FNizaBCUHmN0BJDGjo4/K25iV+TWn77iSmgMu8fW0Z5Z3OSMENA1MZaBBK7gf5BOMRzaaq+6nLDpHLlNBxQG+nxeUmUt/HWBDyjFT7rfwjIUnMAgsK2niSt1XZ89KaHVKDXCC7Eqt53Itj/RAqzj2no494B3XqjUI9eJHyC9dSCqbKlP6DGObe9Pq8hlvIkLNpJ87gTs8iujQmQVUItenoHFBRq/8WdQUy3rq/PwEmf7SVFC1SLIlhbGer1EgJYU3+Ovpg5TnMaapdHGdNfK46D/x/tki4FTAzzjGVY+XTP4cX07BPoEsivtBAKHMGn4IUl5BW+M/t5DazGtQDIQ5R8B1KGEjwanexyhfIsHwUgEVqhEb0oqde2IgX3s7swyEYBtx8kNfRVBPai8zDlMoclF5WhqLRaj2wvPCRfw0Cu7FGmL/l/f3PhIz1zKt5BuncZZysXyQGaz0g6q+9YJ0ChiOWZvchWwgh6qfJVmHmH5l4snPofJOj8t8kJde9e3bbT5bOkzoztuUPB0YZIQb68R8fhygftDOJ6xOl38MAs4LUrgokaQkXu8/Jy0oPoY7FJZlsix9y8CQcdntTOK//AYbskZM9FtJva0Nd9avG+rUEaKn0nGMN4SuoOfoYZhiQnBt1e96L0DovoF+Ae2ktsJvIsSpTzF42qjFu0p+tCa2sIm3cwICVyoGcL3P0KacTNfENCkMXV/MVBuIZOTTiml45ncMZsNGTTgu7cGKpMz+L++mfxdqa40OqL5AAJzIBvUrUosdapXOcHFQLhCBVL22gCn2VOKFZIDTo/bcbpgR5o6QLwjHpRv97qZGrAA3aBmoH7v+UBk2tZfG/MKXg+PMxw1kuX2aqg/9cqOgMrGNiPupnGD3C5LUCglhMQCZAv4OPs3NKZISttpVFqajySz4WeDEQerNuts0QpWnpaNX/+3wshqwRIc83dM1908dBaP9+4VTHffr4Wy3dRrT6zdlMFB2IucElje945o5KqE+Tsoif0sh0kbLSFsnQf01MF2sXcW2fzKTLaGxIUlKLm1nJe/JjL0c7/2XpJKIJ6P3I2EbRZbSHEKqU2KSrlAwI2eZSjfaPDX8Lk+5XUyhoS8gHuurdjCND1TKm3n4O2ypTqtPFPFJd1ba6qgR11Iuk4F5HIFAK4p4GGpweTZIUrN1zjEToL/b7YrsAsvXlBRa16e3yhprzZu6khTasDnYiKW+MO2gR1p55akRwnZwybN9txsDHZIKMComxKZxnqx6ux7bb/XLrjrmiwu3V0Fb+I25EiOYSQf2Wap6mO5XhnBb8ZFtNv0PMJBmnukmHWPvAx8daa5JHUreYWIdsASc1g9QyU83XHECx9bETi3JIEMRLluqOoDUiEWYtx3eScPuAY1/L3wGwOHEzevjM6kcvpOBLMNNodFvq/xpN0iSY6xabapGokxO3ASv5uDSCFDbxAxhMwnnkwTXkxAhU+rqWk89bSOe99hOTolfniQ8QAzhvJH8x0rrx+MNSt5aTVAf4NwrCGqlPc6y2AoBj9J1nl2+iZwetsTWqDxaRrJUz544kAZzFe1UWSc7J9qyQnSJmup1j6yKSMhEsq3iZtwqW6JEAp0y89PN8COVVSXzFpYSPlQyeADN1PT/IZsRHeUBe5ZhaFRnVbCzzzj96XqbMMzyYGwt7ooQm279fYw50JfrNRI2W+2ImOYqAr4ZPg7QqHhUFzqtnwMcx9MjaFvdmr/OW3HZlNc0MnRZqKh+StUUuuIEewLdL/vIdYNr4PJAWhizSHT4Ye4PIHxsondyF5hmI9jOEm3xpMRCa/HkBsk56oTEtOv8MAke4prwXBUgkwgimplhzjAFMBt9U12Zzexac59Yq0Y+lW6sRc+dNXXveq6kTQJdKRShELPdcIVuA4jFrWllZYx3RvFOUqUsb9yOnrUZDqNDz/oZZqMGKNnaxi+W68OfSFruWOJLLbvsRPMZKthAXEupywtf3IElOpKZsa8r3ji6YuweL2A4ksnI7hZd/xKLq1MNM3tiSluNSzlCGCuklhI5SLyehbPvF282MheJTrCZXjaZPTZJz8rztMtQHZe5kA9jElaZYmnopYqQENSEzWiYfACkuhNSt5gtzBDjVg1UYTrDPDFFw6KNfvzQJcZ6WHtcYMpEvgoCyhI7mNnTNwDVS0MacakL3Ttf8i4Ben4bnaz1q/HST/oivKXZZNdgBRSJ5rWZz+3aSDAaQhlP8aG6DjWQyao/2vxy5amZ8UlDVvfnGGm+CLP4nrsHVBjmYYk7lZe4Kky7Kx7t0coBsiOsgonVEmIr6YFp6kHXkFJLuC8NhL5SONmA95xDkZIeufeRv2zUlaAplrJBrrc95clcEbXrYpfw+mghdwTFgHwkMuIeb/y1+whO5KvRM3t+HPk48acQK93vc3/Hqdw1q750USJKJ1MdNGUDMy1gQPg0AQTg/yBg1t35SMe2JoIFOaxDo8rxiuVG+YK02gNunDPaF00hhwJRtn5Rho1m08ys1dct2tKO7GAx5QR5LkbkGj1WWol//GwHEClN7kqHO9eKs1EHdV64o2nnb6ZCO7SsLQ/rlowqK6pGgsYjCR3wjxMXdInlgVMjbiHOwaa24fIssLJ/3b06qKU9Bpi0YwmV8CMVNgg96d1e/zHD1TPhtHjG/WoS4s3r0QX7MTOeLRBJZqwJsjDTYND4rZSPfAwSgtTecZdZaoeWArk4PzQTG9FxgJlhcZKysPlSGc+M6kL7sX+zcXHpRSzqebL3SV6YKrg+a+N6lLaqck0RDkCjrHZoYffXfAyzIbXaVqfNRn700gKlQ32/3sXESNBoy61mmfeEtNKtmfmmD+UGQ9A0WcAhsMwx5Cu9o0up5qksAYM/GvS9QdpBLOn9KDiGaCvjgo0DetIXWHJByXQjUzW16BILd+BnusKpbeaXbqZcAeGn5H63MH6xSR1UA0ZE1PzJ9yg1XUjlH8/8Zwloi1P26eY7V2RQ7DpUXuieorwytzsVTHv7ErIl3WupNaSrUDcQcO11khxAD+ST1PbA4gyJVqsUaNa7V3kOVMpywbmerWCa+NLwc/CDYAoWNlKr/yAIoK6tp8nybMZdfmzi7IFZDN90wJbqVEfTujoP6AvYdouEc8aObs82cUtCQ5/JoHi10eWU9NnHzDNpUC9BYXrLIziuuzKoJFJgvblY+fmF7rGlX3rK2gI6fQph6gyDzeb6GvbkVPK1fV01IEmg6QCtw6vB4cLpwPqpBCC3DA3Q4+PjM927aaE+ZxhYygOl/qNBkXa3XzeBrD75qYt5RaZ3h4p1P9ysIJf4HjDNvDIt6wwQ2R5F0t+ne6k9UZCC6BYhwlAw1QH2wdvO2e8FbiE0CaMNVwv+GmAgmfymgv7qDpmefpDBwf5DRGrK+UveYW/5/Zrg0GnXrVsRlAukistfgZpd4fMM8mH9ELlhPa3Os3fVTppNy1+ET3iqoSc0b3Ax/PP7eCDIUv3+piq8+I5zXBJmW+uh8g1AT5BLn3ZXFv1CnOy7m4VylPaQqtKXpfebvjhJnPmRDwUVxdd0ZuEpFBpMlB4k1fa1L+tVTNLqjtkkav/WFRePPspaauWWgs+DEhcIz7T3O7rcrxOHcwxnmXkmQt0W2jLI9mrA8vBsHfLlua9E5pdO6EAxfQL8XDl5ynxkzsYqr9f1oJcQiDhMf9UK1EC6fFv6SPjUr8cw93NFiCdGxTdNWMtL7BHh7+uFC2x0C5qnYmUNqYxtcLHKWN51fadzuPy2jVxup7AM3HKWp+uvoNE0SMQp6GgO+POG+clAgRGLLn/FEKCEI9/dGNK5kpDmxGuXe8MrLLmCQjAFtFsAls0f+nTXGtQZghKO/hn7xwtQALU3W4SHcacJazoFbDe8NjIn968CCUwA+TuQhgkYSRtC+OBluk+hhBC6rRtcV7+6q7b2jZZklEsCajeJ1YHa+L4ulNIExrYanYiOXpLlgJ5NU7KG10nGIoRSxL88wq96WXow6U4pDf0kNf48ejIY9sY9ySgfnJP3smj/E0h5VtD8zm6GiBonZEwZ/4O6CxJ5xTZz0li3+r0XY3jFKQpMqzky00LOdvPkkuCa12If+gl1Osn9DGWRg/DmVHyeYx6eqpv+g88Vgq+4GgJny2GeSktjEbwxhD6xhNjTUM1abOG+Kr03t5LnTSc/Xw0dL8VyZEo5vHJTh+To70+r6s+yWc5iPa2RPKMcCHXAgpWigAO2NswGwrFG6NTKEf7nVetqFyESGhl+C7XdicGoUOyELNoQ9FnpObyEqYQ/q5jqQfilE5r6HwbulErYuxM7G5BGifOMfzotBCYo/Y9euTNu2Ohvyln3Idl9xES7srVhzn2GAWk2gg500hOxmD46T89JpSNFR5YJNTkdboXa2UZ4GvXinv+TdDAak19F+GqveNcZnRPEYEF/xmH2EVlMrysSjPxE2SSLkHw1uwmEGoRTAjK2VNX4/IeaHQNxTP5MymJ0aVkjiwJI9bute/7UF4l80tnTnlKxebMxyAxf5aHXFq5yjAKC+U4MLo7rVCKx3G+DsHZDzsTmv+s6Oslze/Utixz/AIwDNGm+84dbJItWUbUUO7tCFZoZVaN9tmevPbFJwtxAgO5npSliRyUaohxMVJkYw0AAZ+ISNaFP1GXsUF8kjc+NG2clpCHOMCsgKMRSAncyoH/AHN9rdyjddVD09K9N1kljkPQNr9JMFfyiUwhdiBeq13jCX6IEpm3mvKyhcToLvSbhx6VLnYoIAt08rFF/Vje1R+59ns++rpCAsb9dwiw+ZH54EeFQ82sMKb3QU1da7JBp6Bqtx83xKNLtgMdY5VWi6PKHnxOczZ3LJA3ZhZmtVJAOf/QBmKNQk5Tfp3mtwVtkfh5wgONo+IkJIrijUJj5sDh0WQTRJGRFfFfNt5ngGKowSSoY08cZeZyzR1VZR9s3DGGGnaf87TDIbulP1WE7YjqmL4NFHrFnY78NQInrT5mIW6Lo9YfJWzZ21ihvJovXblLUs/fNjOmTNW49c+dDA/dEQWqpZWBVXibyCzMDfFIELYbrexlZDm8mCHK+sFnF59n4+4DZtuh3owGLywmL/l6ASplHFpSwQj0RveRYMtWGDkifaWqqjj+60qceJmC6b6wMKqpso3829rncBIJdMV9zazdmemKsDlV+CEBHNb6DwUKTv23K+3IElfxlz6uNOBXKbhbXNunWF7S/NVkjqXTmnZ3zCppN8MGXO2yxToih/yml6w4wXX3/DKCrezBiowdbFRDqGATHzVjwE4cjfMF1Y6oXUfF/Z7wdKwuYXja55YjtkWqjSCTHxtghQACqzFwmGmXYq+NStX9adMivGD8QaUpYXsSB8VFPnOy2oB1VdFfTV7nXIxHmsEK0VpUtiGrBdND/aTLR8wv6SlfTOV2gfaHWoJb1EkqJzT2iT7oLAXdHL4pEjQFGhLRYIYGt0QUPPnK1HJnhcqeB2g3PyMdMrF/vvolIxsFzfl2Nu9aVGOu+iHJWMu2Jyr0nh6qc7tCRJdly0Ga8lSE9YI07VxwrCD0gIq1y5xcK2fmSp7kQlr2BQYTcNR5GUrSIL0VhXjikrsH+WFtCpfbATx0H66jw0OZ0nZCbOq4HCEJZqHLJlO23GYpLqv8c/jF6FWbnLk42u6oJpNo8LMbrMP4MjytclXrP0pfBNpTVmR05GczteDfes0LoIiNLbAQ4RsMUXC1ALU6IfgiUVKEn6IZZ9+EBM96XooQ+aREm1ADoZgHHhJN+zhRbR3mg8rhIt9eM/qvpqMYaFQEqUoG9pqgaWv1dQ10MTPgEkMgB44qn73FddDmmUWO6+LKTA9BTMsgmWRinA4KQ4HortGgIa66MKsYbOP7KlBDRdpY61yDLdHo3jC32La4sVOI1laIc3cYmsAnqOq3kNm6ckC53Hij0LoYRXPDrneLTuqRqftjA+qLuGf0HZPogkYKxIhR1vnHdVqQrwHBelMjW6Qg/Sl2+yGOCGEybywvLcdhSvB5XmQUfrpYsnUYJQKZps1CTlm+IJa86+UKPbTbl/mA/QBacNuNpPLXS9cbmpFozzJhw4CTMTo52xWxvYuI0tATpZ7+no9A3HmaNG6q0P1VuLVhe7mAV7TVfuYy2Q6FIdwPT+Se61ZuTED0bnEhaSUjbmjIlR0YRJ59S1/wXsRFlKsjbNvtUj8QXVumO2lcnzNa9zo4DZgbcc2XRWsV46dBmaZnbdAGi2S2IVu0WCgUCV9ybL7YwkeyKkDKhz0UwpnnavfjEyQ459ULwZZvOCiH3Vyj0RFWYdMjTt0bCLD/6l78nZMAJKhRXPFeDpvQ3fO+7kZ7y884kWbXOCfmrpFBXxTppZs76a7uWSZNt7qPvjFtLhK7qGhTTeNptzCXyM06hpwWeBhpmFRdXJ2a7gUXiOCO9siyVlHf4xbGSgA3hvyvXh5S0udjeG+M2BNfH4BQgDO2ZpMhxp3cCPhiEU3enm997aWSauF5Rgu/qYQYtbHVDqz8xQwGcieRlDrvu1kP5rEkG7L5PtC0Zlpnpdxi9F18Icqk2y6mgv7dQbtZfWKmfrKP3vO40qsKmUhX7lt+Fw7Qds9PtP8/MUqLh7SkMf8v9xnKRP0i0mlCdbK+tCzAQEBturqOTxYN8s61/Ga7inBVI8fUBjJtRhCitVDZtcos1hVu9DivpPPSM+Fp7wj5VcdUWOpXB3/8ShnhimCI4Kda+XuvhO+s5qHNsQZqxIbfPsk/r1MXGCkCU3cspiCD+qgEkTE7vFY2BGDUeOFDCNhlpK8OHTXKJ5ICUMalnhlwU1JK7++cMkDPozNM6mKj/i69KWEG2lAjrMyTFPswDDGtNPCgKjP0TPWnFpffUJ6PaduMEbE9+E4EQwLir1REWbA4nuaNHbZ5C2Kr6djWBinban2VBmyr7d0LmoQrqVWRXz4YWBGfPtSqAd7voZelH6+LcZ0Go9fM53yyMk8e9I9vVKUMa+K6gGwPHMhfvdZs1ZDZIFVtMOaxsLjSIMJ+SC137sq6AFPDszuXMjUgrSCVreNkaUphWh5pB8A7YdUcO9MWepDhftxtYyhl2ERuRwzgTxDuBFhtuXhdg2dujES+xan760LD7gDrixwTcc/BtkwYOkn3fGAnBu2HVsEym2ySV+Gl4KCLdxmYNYWW1ZdgIedkWViGzv4NkrnQKlFQopSsaPVqOB/BBGeZlTGZIPd1U7ywG3K0KrbDPnCQsP2QY2YPLAv4ZM+gOAW2npXistu+kY+JRKMJ2YI/I+eR2RvdKo7i/+tlamAurNr0P9U/krwEAxtzj4b97pMOWgDAKO0rZQpQzxi0exM7/D7s8UzvyaXu/QZ2/4apfvOOAvHGb2GI9JRiphwU/nKrBwi6p7KHE76w9Qjk6qF6juaeJM6ncFX9FthkuZm9k2aDdM0pwmQOD0Ccn0JQh2ggZbMIBTS4OCw8F5QHkSBQBXKe9V+IMmX1FFnbTQRJh0CxqhOQ6gnwwuttqZvt55ZW7mgYEzCbIiGYIfEmgN3dG106/OFmT6HF4r2pCoud/MEFenUGZ7dfl9DFDKN3yoOoUZebPxiBSalblZTSPe8Kd13UBIC5iCWQ1l6VOWFYTiUbTQZ0zljPXzp/MDXq5PrGC7quuKkzO1ofevqUEpnbbbXb3aV1B8ONQLXwZDCIKGYFco8qiIpDovc8Wkyto18WGQnzG4um5znkH2Wozmm8gfwwl3BLEu4sWNXyTH5CkFip9TzJHEnaZypo/wWjltNUux7sdScN2iktgc7Oz7m3jl1DS7AVbruPW9RwkBz+Ibyud7To8TyLCFhgH2w1a69VuxWeaqsvAzHUUTd/PUXB8WUvb1ZggnZonzxDxtaS4MmSRTjGJkpVr0CuZMDX8P1nMj9zYTTSDP+4LlAsZql4iHMqPDfDT75gKQPtvGrmOS3oVUMetpyKwroHDoOSlmaPlblvIc9BKoaKE/6F+6EdsqeG+LHDXIGxs9RgleF7Q/oiWG3KOwL61lOn2U+eS7QmfY4Abzn7+r3q3MmkeZwirCO85TqDupIdyHAqAcDbgEime/DtIxC1mKk192c4QyNu3Q8b8Y6zQKYS/MARFN2gujFtlCiX8a/tg69X6RvFFXTt8Uf9W7tXCQmUMqHd5V6suCPLshYUApDv4GaXzSJ8FgRxbjHfxXodd2vGe7YwQ0V7TXy/CLtI5bC/ah0jDBqeOetzjiF+k6r9GITObbBs5DAaUIrnIv32QHHcfc+n+5qRcq7/OxTEJETklwEw35EsKu5STGT5Ov1+2DbvmqWyMKTgiZdznalqHcx7Cgr2kXUMDtbuYKMbPrTMmWzKqcDulBWLREGScNdFETBQbflM3J7j5Pgsr6q9H2y8mhgGGpuIpVCHIhaNKfwNjlb2ppouA82gd1B3ZSQMnWY0SXT4N7ZsX+cb8YfOAwB+esqyCmD8dg0ByhYMAgzDekd2ZM4tHcjqfRkn75Tbl9UckdSEDZnjena2dqQkwKIJor8zl/JNxnPZ/oQkOAtjr+w/3zBx2ofE7M/bD5E3XLDNKdikp3fUnBeRnuyEPYLJjXTIzoHlJN7gcToIOvovhycUrWXSNzfVF8KEyOg+BWevZU09rKXbtqd+o852lZjpAB2mr+r+aiq4hCK1kCpdpki8h+/g4P9dZbWBuNmgCAMc+rI+kRGgYofXOlbsd1Xx8vGYJS72J9BfKSyNy7B6F3z8ZaekB7lsz7Ap66s7xEes+x9iYbZoepNdZH32LZF6a6BWfgLKYDh0rN34qztK3hEVk6n5AQUk0CSdJUMukbh6D+BZ3oiUibO4mXgSJrYFZ5/Aam7jhQhupr3h1wKo9y/mxljBnY0gbAuOt4jkx9HE5dyzjfozmNh2S6g4x8wta3mcpMvBmAGG3u4O4xa9VXlWZ+2UuuAJ8tHnJigeKH9+7ZXiV1DBrKjgVRw2xqho9QBa51sDmtpFIN+zhPEiuxKbB/ulu2OaeXrY+iiw3ET5mQJJHlAwGGrmH0nzoy4xaeUlt1cQHvLjvfp5KEj3KQ2OZcJrC9UaSX3uZf+13JkxT5fcN9NZQ6+V8BpG4OzW7YpnCKk3FFnwiVF6p69/Sfxkvs8x2afCi6WWgma8uKd88w9w2lcEAtnWuD+9OpEvchf6ZH5nKcvbonuDk2Bl+rsdSxOGQVG7Vr1CYiF5vGe8N5cJS6lzn7czF4Avzzdco46e4uLKXAE+F+CDhY4CfeLekb84TKYNc40cLCh4eAU35vuQhyzwTFVx4a8KPEif6vbdQCyCxpCWvuCG2fHK30kwe4xE0Q+Z8Y87876W3FMOVEyL/8veSFiwe2bZM4ov//LPqegjc4bxBHnoR6g0bMn40kCPN+jWnbqP5cfa9mD2S5xaL5HydlbQOX2jbosqw6DQ+brJ6v8UvIqe3xxoyB9hLhywMJS716LQ1OR9CVXlPD4ALSvaezGWLGT4BCOXT27NPcnhyG+LX7tTT4ZPtQFxCC9amWWk2JDwxrlzFXl8vObqRzNDv2yup/jGBIPc+j5ujSwQrOUrK8LSKBGxU3HiZoce0IMb5v3QiEERyPRs+9gtHF3mORC34N+n85Ocmz/A3SFN/rv5CU4Jx3dq2uAodJSfiOWDoFuYMuJAOqQJgT3SnhRJKLPKwZFhyfMEiXPkvfAmlTJwiMG3EJHIxYzRqFNuGUaEyicLp6LYwzCl7aRB0PJxVdfC22HDfgay9s2C9oFmffzs8rkP43eNeK7+FnXEqiC1lPtOdYwzQzI1aIhJUbH8FuwgZPQK3UfUEU/3ClSGq1TrJqLVAcoODaiMwuocfHExwV0+nanZ+Fp/IKXtLYHQxIlerfJjR2LopPNMr95nALms8pt3DU/S+i6+W1Hg+o0PNCLWmhMqI2JbgZPSyra8BFTtYXAKjHQTZB6ogEEGxdDdwuegVh+mqfrfXE1Wkw/uZCTkwXdwZ7LKqOGKX3FFIsPt1Wjpapo2bf8XsunyPLcGxueWVtFe7CZMzJLRVy3KQWpDiioWwZg5eMgnaI96xvT3keNuH8NN5igfR8MHN372trnlmR2Ki1kVrD/9OlrwRfkmYvsGDYy3rQYLDM3NKgN8hs1haFJJWM8mQGM2fbIk3ezPgnpoRqBDynDj6F4boJsm50TJEdZOFLzL/1COoYjvxPYYT9S32+rrrlG+MejQO5omF3F9Tw0hM8b1ey4PHuDmxjCehgZ7GPgmSA1XANU0Si5j5LT0vwxmkTtkYSoZwgTrd4Dpv4EwmyQkTVtizsanzoYj762Zu1aUEaV6cdpsGytpWjjiG29Sp/jaOYpd5lWxaa4eIVYiTYMdzUHuxC5KZZPg+IHdDKwvmMXlZOfUzncMWVsjrZGtDUkiwsL+9jX/rXS3aNDiR2tz/Xu98V39ZOPwPhIdJu4RyzMLjRfVRgHem9VecAecupNeIH85p+b+qBsASOroEUtRDQLypdgbTwsfaEUUhaE5V1ta4tW+7VLr4T5k9JuHfs9tc60xTUECZo5okdsQaGkX2XY7KWaPWzVtiOLu1i6pfETuMPD5Vr1ZyDXZQDJniFaQWxPJ8OSWxFf7spOLq0yKbBnaeCQqwW2Qn/fsym0Uc6viZdjhzK3sxKU2kLa4JBt0d95HsnfuuHKnNTGE3vc5ZNMf67NsdDZaGdiZpooabSqMSkPDYgcCtLMzYxd1JHbNrzRWYZ2A2g0VO3cPNQxWPizTFufhwu3V4yVsPT7UCdssPfwL0/Q3Awb530GcSs9m3R45dHVe8a5VQctNCP66KCRzLaqeobVfnm7zus5ob2eD2YeFLmIF990+OVtzKYZ4CqsuaF51R+tNb2yArxf2oFWWOzX7+LjbzbagNasN6cD++P/Y9Ak54biSmsnXTIB3E0/kVwji/w7Dc3pCcH5JRQNItYGKKVdn4RVFZhxGjyMpZeJXX+1YGc4bu3hagDvD5tWk28x2kaW7bCOhrKhGJY2do77W+MAOGfcq2eXTAeeQHJz4q1WTxJWR1nK+yt4LUDzYP9lGunYWbwuidP91KmA6vvUGn3h9Up+O3glb/8GHI7Qcel2h2kES4pB3VXZdVkbgYAu02mxM4OdHFA749rQhJrqq3SoLen/i3HZxIsSHihE3Cex4k5TYdo/W9ebR2JSogXZnb5mKsQNk//aG6x1WITZttjGvJtsxLITFUqBLTf8Ithc57OjsRK712e4hSRdAE5UhUAKKrzHz+6tpXIbTPykf28J8x1sOqeNNXQefzayNTrD80gkoKeZJYgJOQQfuMgvgdKUZryyC2ulD0Gb0B67jL5xJ13Yy3dut4KOROc5XB8koLehlWyqv+wXYR8grd/lczmdNdK+I5pCwvebVZzlji/QNLmLKsgKtJqu6zYQlSVzX4HRDg+ttHmmbyVsyWMFJuyAmnc7Llt1de9PqMpmYPtD1Lj4iqggUr7xfF0KuUwgLRyXr8c31q2E3KJm2krV180ZL+WW8uDIttU/Vi+6SBDicpEklApzv/euoO0bdYwhzbn453S0qhdOsxxQw/695LL7oE6FnNjcG2tV2ENfYqs24xb9I9SA8O6BFjTi1USGe+s6dc3/SNS1IcxAoY2lkpqd1lw7mUvTWXMVTDhyZpwVVnM6B3g0F6bKX70+Nw2+JixdzUBvWTM71+8CPcBGTv3ghWwKDtlFvJCYX6zsDaqV2ij3LFov35xriqu9+z803yV7+Gq0yaGfFV9YyLb89TiHKS3VEH06DGbKYrTs0+0vGKiVojPGUKK2KofQlyaHBRrBw+wHMiBuYsEAQs2U3rKOPba6Ey3eXyBR2mM/C2ifL9K9nSLWVyxlrGukO2yeHkLHRpcG4a3LviECyK54y8eYWyV0n2DUuf5mSVljHb8+7UEhh9OooekCTX2UADQsyUByyvSH1IqJDzKCKUq2IkRJovrAQIJUSkkZI1IL9EP2bqcieGgptUZlkzLQtQFV8RZ8uRVhcKGONxdMPQv/J1aypk3XfxWvtWLIGbbX1SA5urucH9agy1kZXrQPk3zAuvU5SpcRlwQa88rfZGS3PF3oDg3opfWpPTHgvSTxUZ9IXbW/S7stQEmFAJwz8b3DIGVDSu1cAbGe5gGPWDa/8Z0c9qxwQZULNyk3QRIqG/rAcWK1XShakMn3ghuRCCgtmUCfbo9blDe2rd2U9pEquToUjJR17IPuo/Q3eGheGQjgI1udNx0XtfmsOBnCR4tirhI6mgUjtciLZWSGcTf2Ix3qLedrcPKKA7ZVqN5+zCkM9iJHku1WXTmyQoAML23ArZ9bGu0/xgP3+CbV2MEqG3ktZsuK51p4JsNjyO4lyKgeLQvpvBnp8LKAz1xOPJjw90fxNxJoFjI0dDJDMVMvTnbDB8P5sFWcAciJPjM5yJ4uor3Vb5ja5lk0tD2TrdtshMuTR8w5hsXHA4aWQAZx3HbdH4rB0GybdGODmwKdScUFJS/TmDcWxCJiBWejXC/RAb1vhzSWC65XVukG8uTdATQeMulHf1SP0acz1vTF/RE2pvYTYMyGyAgX4pL+bs/NhHL8t8ui/NOjEQzDzGS7hhJh8r4XMk6YUmkSCoq6UFEhEgRslZ4xFx9o3kb2WtKLlg9rcIUfX7Fm9B4te1/83Ybo97dLM5QSERXNsl47bDP+T7lNd4uNpfOgx1/5WQC27F9I0iBdrDat8oR09tWDPLSrV17voHokup9EEav27TGkoLO1l6xDQazG+p6zT2eyAKc98QvF9RujxB+tqO5syrF0+8izeqTGT/mx0Ba6nzFI0rOvoFPReteWHbk0VgfppxdcLc7ae6NJ9RnYvq0dtl1P+cF8OslHaJdoyWcEfdwDqkkt9zCnANxBHxYuNSTz3i7HWmyN8KSUjwZEYbE1gwq3j7xCYAtz70Cl58Ol+3u5InoQivttIsOBdoLd1NtEWF5P8AK+aVr3AiGNLIrLXaywIJPptG/TBAzngNP7TYjgZFq2ULKKlK6gmTMXFEzRLY31giqa4tPVgh9rFPIzAeo0A18wux7ZcEAYjNcHLlst28IUXuMcwPJkJlpfjoMy8En4ocEVuGyDb8Vfc5io7a9tCc+FVVe5nJNgznrK7Au6NURQky8sc6v5IjhnGaGCr7ilC56U6RzrrpWzVu9tp1pTSLD57eW8UWHJI8K6eBKOvM05X9G+yUDBmpP54jqMvTDqivo1WzetaLvfRPPIAZC1QHa6zRt3NZF8ofMco9K1GnXIOHlKrHoph5osce6mgp0LE7emWBr2+/H8OIm8LBMzWqSp6FCClytSyeTDfX/uiIyloIPiUeGEtwb71LOYiaOMTRItPAJ/VnldvGCpJqf6tyW7WR+O5IRtLlAjiMB0u2J8elrarzVRwFtK7rYx7bHKZWWOFTj4dvDPgExBUwz7gIjBn46vatQfJhyb68q79DPxrvVu4yeBGIF2Xqo9JT1pbiz42puUx354f5remBC5wTp32Xs2P4gCYineK3ZTq4M5grSHfTwxtyODaq2loJ3ASQkOWm00cqtdgOIlCwGZ8rYmW9Pi5T/ukMAZ03eCIFp3CCfmn/3S8hgAGszxi2YvvuxAy5TuGQseJk40qjYKaUaA1N/u7GD4aGx9E9RzMIGLncMjLWC7HDFaCccr7V5B9YliSD+fPvTVWrXbQgjxcWMhGX+icfofg4RSWOTjceQUIT7oINAX367Ch2QmlLsqoTduXqRE51XYwFq4Q3ELNfzgCCFhOhCdmIfdlpIniHMSSR54zNI4aMgqZCSqUGzOxBztolnCa0HGPDGuUHpIuDQf3d3rzJcL8PsCt2NtOiSsYW/62XqXQhLnOJU7smibCkxg9NoR0AdHXY3juFB0rBZjp7fgI6XQUk2JbsJWk3uv3JTvgzbXrs3gQCVd6U2awODa6xjIqerOa0ujhBxPwvNnHRKjcPtqtFkAiuQViZ8R3f63ui5ANkd9fmC37ogwHUdPmPdY8KRDyqeLd6MgGR9TAp9a5Dof5yxpDSpUVuvA42NZ5qFmp9KEkoUha65ZIpmJDDTrzcD1LpTdXEbhBmZieam8tu5ssYDK+iqk60vC4RTp/HHEMfHXjosWkMKl2X7vFpIqW+2UVAlzuS0dUoKTMo8fIQ01h3j9YD+QJDfzyh71v5EjzXMQHqeMbdJpZBCo+G3K+Oc5g3uAkm3uPSBQ4y7d+QVFmCUWirPEbfALjNZ/B9c3yycXkV4H8df27J80viRhn0rzrrjxjASAoDgR6Tiu9MOTkqPZboBr7G7JeuClDYOLLZ/7LalRg3d87y8EMn8WT7yzmdel0CGJb7Ch5B1rdVtIdtas0dqTqS24YY1QmYBbwSnrZZIMiHRed+LSmJwWOKPocQyiyRdIOohg7OpS3wVbq7iY9mDRsUUL79f2q/iereoeDeVIglLE53hKaD2f8ZnPmruxNwAiWdaVZIMsr5+q7+F9Oh8FERkoM2/2bMKD65WJB/64W/OSL55wFafW4bXk1/xVMLM36aGjMViwm3TtpIfJJ7xt3IJRiEK+aUmIUR+y6MVANvC6T8XserMLpj+nC2qaxTqP0qytiYRATnu55sTT0uPknM+u5EplyPqns7IHvtvopOpHzDYMPKL4tUKcn4KpGBY2fTS0rbOhCsI4oZeUTrQhPnM+8Wu8XD7LtcKkbCkpqna2FR4XMcT//y1XmZIHZ08CvGbINV1XqZAqIZGd8rOaQq3ZUHdCokhvjubOwflDKOTYdI/EIN9r4G7b4mHqgI1oYOIAnj5axrumlGG81zH+uKrGI86p1TekB4zZXtKgUhMw+iXuDBlrGDLZAyFR4E34Qgel8UuqJQeQqkw8m7fAzWjXtZUT46yZB5wDSWu0vvPo7X9DAj9emVxnyZt0cnH86ouYRYr8tqOF7vwBLhm2MeIVOEQrV0gFaxFdTBhkD8l3RHzftP7hkKRw0nPtOQg9UApdGNoAtQoug7tuqCNBVdZi9YBSa+eOmzAuqSO8T3ICR/UFtcjj0KvWbKZrQQ+fXpabggx4FQbSX9LPHLnRvIYhn8S0lWaQt6kxBalz4hkjX1IM3NRDcczGhygTR883FZ5j3ELY5JHqiQPTBLgjiuxwZ+yF0maYwCQ1csbZM2pUKNJUQfxp7oiH3l2TH9FgZb3OOz5tIBzqNhnBZrTJoCaCGKPinK3Z/LRXVjHRbFRq9qvBl31r182c/LAlzY8UUp6UZODj7JVumvyHws0wXEW6aRUD0iCI76JupEc6ONOXF303kEiqyvf3plgCqchVLfHR9kBzHJ3ss7u+JhjMXitVkl9ZHbM1pWXYcW3orIwKOd/u+oCMvDr+1J4XLcnTAnsQCDw4h75F/wIfWhJu8QkNw2oYYSHo7N5D6IGCo2jCvC1WfDOiGg9SUZZKe0ajk8wAY/6R5Q0SKYaHtaX81PSIrPhhaF0OaekUV/KvWiQKs9svzHwBjG06PpE9TWFpFDeAolWHW0PKaEuHmlIly6gSLkLmmktG/qcWxoqU/PjUURNc9y8bDfs9YODMxVWxWhawCJx5NNeh4Krf873DxbNK/m+y/sflza+vooZAxKBOK0W2As705FHDTNLYx5brDIY60bk2zOj+BtcGfZZtpnktLOTJQBlpTHWrGfbmWeFmQEWfo85n1VX22TdmUSCWw9VsJy7x87bVej6D0uiNL16vCiM4nYFtTj27r+GJyurb2NioBuhmY10SBwMao+F2Rl23lXX3JkR8gf/8a898t497KhaWlPAaCvWH9z6JNNYyS6sxkYF7HES6m+BMZlV25fHaPA2ahJhHl+iww6rIfItZ89hNMdJrVEFyQzVon6B9aUgwr40CjZSDvBaFGfMxNHDZmyC+WlhG1NtQfoVUlLeZaPcc2etlIWqk5RgBZI0lNn7FEasLWePpVyKDpTWmSF3z4vLCYAfxaSkpAO4Ouko/KlgMbiA4awl8Pn3btyZjw7zQeuM8YsygA4PXjQDqVeQIFswSVsS2u92qPzICVX7IU9kaCGzeR4cyiFoFByshLobEUA6uylMCrdLcfI2KeCypuIAjwKKYuap6chCJDSdVb8qFfXDBM6JnKuMGzS6Iwt+t4sOv5ZmFQx8yqec/5DCToHBqCievCSSWGZw30q8hMCj0iHn5cq5TzgnDn+MxINJo8m0HgNarJkwagrwDw82+WCX2qajigFOYJZzVz4+DS3ST4GUTVM/BIpHXuU/fktHXfM2fHOVwe/Qu8qmjCPsx5oPsRZro7KHbYO+Wxdf3419yYk11DAv1yVwWux+zRudzcEGgR7c+aPMtsXh9pA9N7NVTDj19X/6f2VMnpvePbd9qprn22BJkgtsO6pEZ+51hqwAjude/FKpO0chhbBRPtbfBX1+TbXNckcX+HNlQrGiEawdYQ+H1N7ITVEm+55GA258qUDOrKRzONRKZZ9Ya5W8H/pFddO5+NG2D09oJIU+pQnw1xJVhfM914ZaWs9ZMkkbbeZsZpLI2YRnsZZkeTNBr81c6c3XWU0bpEKZrPiWR3Yy5aD79Of33yW1U+c4+ZZPkwd7GtXj0Dbdf3pj/DRqECDlBeeoLhySuAwvsWzYAaEaCnGP/l9r9s/wDtWiyrIl7Y9N52l9hNo48mH7uT4NF+6YgM1FlBoIGycVlQ4PzC3pboonxOIk4Zsby7k9MhuPn1Pumie7ttNvfFKeErJX0kMXKS8ZSuEULxqFKsFBfGxJ07nls7TcPSUIXldwMI0soUUHFAO8YCgIPftmUQ1QYA/HlYdyfAh/U2T7UYLrINoqnVTI+6Md7v6Dm7GYosDl+CQ1fqVyi9vITXChZsXK31ztNCdegpYHDfol3++Fqb9SCfeuI3i5kbSBdatEj5H2qUEjDbLDy6ZuWANFWj5UFlhqyywuoc6URALL2qgNib/pT2DqL6ZmxnM86GXGumTqf+Uvw8wR+lrDwwilQkT8FDrdyL+2O7ieSUyd6AzbZCgHQUcZyOirnhb00h66LyGyLEjtI30nS1ML0yKSCo8Bd5Y4KNtaamvP3cXURQIE5n9xI9407qm3k/AxHSoLtwnFgAl/eCl/ck7WogSPWcavQv429cfnz+Ssn05Gr8Tfl7ZNwg7dF+KEAok/nVpp0F8jZahGCO/roELW/TQs0aeHaQ+AZDhJO142OBpd+soPUvWKHKsXMfaJIMOEqYYsqN6Xy/HnHlzNxOmVd46IXPMH9RpHZgGIKqlilZERCfrWeWuQwdrCSi7AFvF4MGWcc3DiwQ/B/yLfAN/k90WNr/u3EL3gwV0GbTVSQt7xWr3JuiZOcRkhBNQfn3Rj87kfd6rJShV8r5Uo4oF94a6z+vp178jOWogaxy1rSZ35oiDLgCH9dpqEVZgR2sTlESWjem1Dd9/ZBmiGk7Dcle/VuxB3WesbDjlMgJPgSZGMUYpy5qc3SsnNs+pciHIokpr2efk5Ki+DEYiQkW7LCjt/N0K+dQZX+NZCYMKrIHakEU3g1Y2ZOgN1NoO+lHSUweyMMFwaM/zbhFDRXfKLWx3pdfEm5tggj3m5El17t9H+x+o/lXuYQ0R5oqnWZgAgUluDry4aMmv9exi1xOD9+UXLmHiYPRka6R6cXrwFsUJW4JUFpr7Wy6s2U5S+C6Mx0ppQpmEBtvnoGV5mj9FUrewsZseTiPOS1X0GWVkyb6Aplnz0N+VixgZ96rYWrDLuIqm0BVBazfp0Rbsm/t95m/ws0GUNqNST0AxnniJ3rXccnzY2OvkDeSgKSBJ8ebhZuXwzLz4NQ9ZOFEtK5BQ6IW/mFYhQSeSt7DGB+ZNhrhCXm5PpWyTefqnGtpa8lGlcO+uls+48Y34rl1+L7AUizWoTWeVX+2Dja4gOU02uVYu8tGSn0fpBuXZqm5LH93OokgFyUtJK9YVYyVT2uEkyHp29pfJPNjL6DYoHmMLhwP9XV62mDmEdNJ92D93VFtzr/mA0gNgunXvEjiDY0Y84m72oOR29JBt/UZElBvwug/sSqmEiGmm6Ifn0NgI0FKwHR86e7BbcUpEbnUXiD9qoeCM8o+wr0SPNDlfxKtGNtTXp2sshoM5u/mexZIax9yNMkgM2gFoKCG+s4Y4alNzjTkFU0CnBku6FpSO9btRUAo5JbxP6ND6XNqTjPPY/CCqj30+KS1iVYI6B3plM/IktKOmpEl4avT6uwcgTqpsC+JmMs29eBBkVDt8g+TrUlKbHLAia9SuV6QghPWSRblbC4l3Y0aG+1FYoB8GWUoAO8xJS+x7hUVEz+uBGR+G0vp+DX9v9ThCPCB50l83m0rEp0JgOhuegEaTCxAoBMZ3eVwq3bjrzi8LHRzN7Szj3U/ppJE7K8ajFQN7Bk/yY1p+XApKREoVDmKrItd790eMsJCR3hKaGgVIj1HcJC/+s/CWLJ+XWCI4QDGvbmWiS0dUYC2fp7unH0z9cp8lEcxNpjl5QxiJjkqJgOmcJJVC1J7sNACAHANXxkSU5iYz27+0DT1mDBtN9HvPBB/ndU3QhP12FLzlFGO8XT40mCtS869Uvf0j4VNG3AhxgGpB2IVm70122EcDhQsfMqUtDMUndWjRXZaYIebSnLTNsocuwbPY8IVl2+J1cye/A4UQEiMD2IBowo7We1wIFprvAQOoV2Jjs3fD2kCgVjelj6XhkE0BOfxPGybKYXWEh1PN7qMF2c5etnLQIf6qQuITxTvB+bprvSWeGfl1e7WttkZ6SB2XO817IO3xbQzcvF5IW8MMv2Fp4WdhlFBscl02CvV7nbGulYv3nooFWFDmWZyJZZWfkI8EVI6vJwfIrFUWwTolcffKmv0YILdjTSo/5Gnb4rerf+OXggj39krWjNEaqbrYqBXNzi1IMzlO2HQE3X3Sxo8iSmruMWdZkLecFjXxBYzbhMVbuixzhFhD8nQyt9tQKiRFjkZtVMwQxS0NlGkDQ6u5rC2WIuToMipgQQIFLw5GwkIo02Oyjlg8fSV8SS4KxBS2Q5dsJfT2qY4iiWE+7kJSbgELEGaUvs3wMlZY8DviAMO0WPHrqniEhVpIWBJPi68Fv9nTCfi+Yr/merrmfwuJmE0u1k8JpjV3RK4ye+t1gbIBsCusURFWjjQuTs2P/KgWN3oyLEgg1UtAAGOv6VL05JTkBiKOHwPCE5LM70jNl//C0FRtAV0tHwEUHsEx3Tbw9KP5QCucEWKyQJnXbPMMZq0jXmEeTgokKK0qoUWyowrBTWlbdvdxFg0UfC6pyPthJEskifBc8xFdDC/dVGGWS8yaDytd6xae73oT7q4XMU26skAYf0v5s6YfINtuvAncf6jPEhVYHAgEQlusmKVEM0U7mXAMx0ngveOTE6JD7Y5M5ZpBlazpmd1jna9RTpXQ8VYKnLkeEABDR7Dyb2wBsd/dnXSdrt2X+ae4wp4qVYMyJKQYpMKhxG/b43xlyeUa81hXuiECJLUSu4oxd3E5xgAj3n6i2p3YgkqU6AFpk6HVM1GQ/CtqMq25AOleLssLz1WyKwpXhyA4UXcl+fr0nm8RSWmG+qcmF/5ZevyU+Asu/ZJDPoQrdAXfZjLNtJyv1BneC1AqWFfSfSasI3HKZ+CWWOw4ZXrDS2JX9cpC5oE3Fj/Nt+f0HIYSCyQ+U2tcF9zI8YVUTB0+rFGM9fPIgaB3GY9v9+zgnFoLxm+IePVk6PK4enKk/xk3pNf8jHDe4zUZPiZY8i7zm38/+PxREN15gnLBDtZ9Jv/GjrK0NILv8nGYJv9gE476mxQ5Eqm+lK8S1rjcv6KnKXQqHnKH3vv+7EMAinXfAOod9SW2RNOYezciHVlmf91AkgeswMwXDw9AS4DbiC25fG1Hemv5msJ6SkO0sDHpN4ZC6wwqQqjpve0G4WUwdYerNP0RFFSiwkdBDhr8M0DVKc0PvaT1uA8aag5cqLieU5eXt1rzyQ0PVjz+y1evgimdgL1xy3mko/6MQaExM40UU3caStnT9qlpD96klW4IZFfzLkJVuU3t+WCJdgt2OscNU376hzlqfBdieg5PixjTUxDG3kfMPsd/BUJCjI2g5V80VtF/EnXBhtpui5AYvgn+XAqJDArNXTyZ1naGchNobezRjagf/vDGjFuLUD8yL7+jEonuhvuHb8ONr0uKA8d9T7UtG4uPzsPBHauCzfnB2RB58LAhL7nzOnerBdiHDjkivlRsVdqe9Oklyf1z1mMEx9/TdaZtwc9u4tpWeXsib4BALBrbAlw8ptbj5R2EnXqKp9JokACRSRsWaUjSvLcVIO/P7XeoRrZnclJekESytOOVy99avmq4BAFp+jmS5JWw54p/t7DulcB/s0ZlJVhyM4UmZw+587JKJHdV4yRK9/UDthLMcSYy4Y9reOuDETFIQ/CBdssESAQekZ1N8Jv6sUSi3Dem1kIUl4E0UJnttDoks2BX+JnUXvZYqPA19Vg4wKqF4R7hIT4iFpKdsDWxqFwLttvO0y+XgqTnSRn3Y3Hvm01DV0dpzp3/p+XdpkrOVjHfiFiUJfw3LiWfmpiO2LLifVKAZ0PJ2cLgruB51kx1Xt/+Nn3zbXcHz3WajVi6IZgkQJa4kkKP2WASpfos9dHZlyk0NMRbz4kn8dq3WbxOnIyAF6GvOC7s7RrMGVTlJdJlhHKADJoDPqEJLKRvkO322J7QYTw73AvO+Wx6x3Pic66kxJjtqLp9LdMKHRTCqoDAyblv3Jfe7wpthp8x/6UsXpH5GEg+FoTE4EsLiNJCEVYFsq/L9qKP6tIw4ZQymcCHCbmEglMPHa4M4vKjYXiuCqNwKL9vw5T5zd7YVNMi+LA4IVTQ4CgAVC+9nZEQsRVB0j+YLZDtoR54GGgQpR3zgk/n+wg0K6A0tR71J3L5QSLDhKTqP61rbs2o0mD3ff5PUy3uIl+Ca/FUnyWfhfaYL8AFTQABd9HVrI6Lmltb6exD8h3JffUV8ckVPqR9xEW8p3YqQDYSn1CsHzUtLf9Z//6kJOKNhYs7bXzN50rz/ai0DVlEkLdr5OzxFT60K4Cvc9Y4btRD6HlfNjH9E+FKUb98dX6eW6tAEL/nj7NKcX0SSMSw8t5iOeGb2PRBg53vD/ALmeQsASihdTGsyCi2Bd9pxQdOJGVO0ORbdlkJyhze61A1keQKa8qXAXTW9kWiZ3mfs1xO/HllaFqLSHj+SyRUVvFgVqGVBY0M5l0dZAw51wdOO/jynkS8oqKlGtNwqxL9yYlR9Oue5/pujfeJVIYk5J3RQvQGfnL9f9y2qRqXCZS5Z4p5kA6MtEMN95c+mbaGaGqkg58kV17KeZiKxdkIXxMErHaDpXVGkaxcxaOVDkuhi2/nL+lAQ2YKZQ5g2c8ZHn9FmAr9eYeGejEqsrnaky3JVmqrnKhGx0RBs4QaKx2xTBNDhSNfIFRMxf7xA+X7xEUvYomH0caQL8vphhw1DYP0XOf0FIFj2FADAK8KSCD1QSvTSzX9VCQR93yDg5S3KXhs6XI5NFUfBGPDyY2JGJskceH2iujKVxrO//Xf+0UwJ5g1TavKDySfNQ8IKwFUlOAUgfXbbP4nkLkg3a7wfWNZsWFF2jk5VuyI79ocGbWosUp9l6MHO5R5Df/hNVlNSugNOKufWVbU1rrP8ZKirPnEc/srWHtmz768EWspGNoQo5aLDqCreGqBU5V2+jNqrJRiwZ1pzROCjoLepAWNRjYLp/fzGKCFH/NGpOP1bfDYt6IT3pYihM3Te3OY008Iaq+aptxQ+3lo8pNNvdx8RJdh5yGKIZvMAlfrvpj82+nNFeneTpv/9hN7VIuHDHbiPHIVi9RF+X7jXhA02HGf7ovDRE8X8Jkou6eqNtHkemXzdw5ZzIq9jYpFbhsyjKFYGYKu9HP8/JJl4CltNOkqm+GL50fGLPUMWHbQsthYkff8QW6ORHP0JOyoDkAmC1oyw0/xzQNkm6TLre5HFeviIaBuxFKpbD823whrIv/aIfTvdeJNSa9HFqhQyjik9Ig/nJRHhqhYT320Rji+E+yrY6m5m4oPOFj/MYJeaB+n4PrbQkXhj9PPMHQal6a9r9ti9hhfJAiWWYeCgb6PiDFdDbpXPvlMisSnUjbGOfdA39V61aXb4FYe8e8Q8SDg85ip0PUPMMcfOakzZ7O1L+cdWoRqe6jfGbtE64qAmEE56gQ984iVtp1rkqLlMngUa/k7U2idlXjTx1Yz440RWtmuebXlP0tncPr0mv7Ai4YjQWO8bfYZKhEKwUPFcsciCk7D6Yb+rah82X1UYHLmn3hyO/R8e2CrxiMpAf6mwEcgbxZ06M1qG0LC2li7//3ax1fy87Q0/jUKn5Fv+Zgn+Wkuemmn02ter7n1ZhSPoy2ZeGSWq18yFH8sDvPXICxlXuy+i9KlP6XcYnUoMXwY3S0HN4s5nI1Yrkj56f9OJjQJZFHnEOkxqpuBSHTBo8kLnwtoM1Lm3v127vGYkconu11ROUXgxs+Z9py6Iiam8DdEgZX7h3ypd7WIT5rJ2rReca5wgTPFviHcDS5RhSBhYQi3Diy92e3ncPDHPwF3OXGiWNR10n2qkQ81T+cHv6fRA9VwTzoQm8Euu2guQmD7h6YX6PhZcIIWbb/st6ILqTgZbbp3GVcDdMtRIK1Oh7+qrOVWDZFoVw0CLEVXGUECGc7uoVLCY3+uciMtD7q5syGicmh3OHozRanTAk2wNeufasGyZ4vHBCEeQbxv0wuJtl1m+5IXLIKbmEZgq/o6im2szOzqdRC4/zfF8uWDXYSc1EZPN1QqrBpGAJSCV5zNWtgCRqzvDgycDGfd+89ynqv2+/JdNznFWVXETFgftMR+ox+aMwnTt96XK2fTw8aCe6iC3J2Kaga2ebWpL5M1L7DGsOhhW+hfn67tGnuncxF9TRWnKplv6+1w7fYwWFRHa499vjSxxNPCfVTDddlQErRkDwvAW7GHTyCSlS4a16HeavGwFCTTM+z3a6XTfgYNIBhRCFRhjlKAg2fVc1t2yISzvILA18u+/C+NoFDrp/NKJhBryNu9mlxntMqFnUreUBI78/VypHoSOX3g/fx8aJS1cWozvyL0RxF1qvhPdBJ3ZLNv27WTdQx8vBbHP978pdvv4vWprXjyUbOFpXS59lZfJIEqQSmP5S++d/Q779Qx/ZBChVaBzsw9E+Oj199ywfTjTyfi2hjTuRZvGGqdPmxC6eq+PHtvPdwmfnGdLxjX+iSjk7QYyF8vvCaCA1QnQIKhmD7Y5mbR+cR9aTWLO5IGMJdlhJJetEg+DermxVpHYuj5vAWm+MJS3RuZb5qXNV4Iy0qnyeoqFwRxcQug4J4fwxOV1s4tPj+mx7Kfu12OcT1osHoCYsNdI8nHGB2p9cNWuwaY94pu7ekHhm2OQgP5c8vx00LquE0/yHj/DpoMBfpC2An0nS7ppwNpiYdxRUBABVun7UBpFveGa6wAnDkGieVVjFLep4MHc42t1M1WtxjYArHPa+x0auuMiIdALOl3KAtDn/MbXI2owpK7Rw+Cqsh8kG5xEuMDOMOHc/eA+7F9iumoHDe25V8cFzgALhpJrEGEotQSakcISk9Nl1JPvEK1E9RpjUeRR5d1fxVnBPTkx8EeBsJqtLfSFxhKzyo9iJqlYf9tUnndCsBwoA/7qywtugx/6LBoqchPlGWSqQvgG5mAOjyPs3TmNH7vmYaZjyt0oTqdqiA1sgrzBKXh8bBbR8ihkG4+eSiBBfAfQb3W/vAVQhFEXSTLfujZQRUFa7V0dVjY41W5J55hlSJHWNWJdLEkpc6fEyamqgnWp9AfsMHFd5Q2qPDRDh7G+OkwUpGRObaHTYdLBfGYSvQOeLm/WlHrBH2gbi1jp4sHcvO5A7ENqKXXySA4sEg5LKiwJCrCZSRAOdj5q1Zyy9TwWVrx2gucKDfanM1lwSlebj0gEnPPT7obtbgR3Rxi51DKnbnjm0TmZB0k8xLdJWrKQv75WDThxPpExinXHvqKKC2hEQgD9EP5mN2dM9dwPj+wHtcU1irw3szlnHBTbTzhu2ZAYrNfO70wRdiLxlVrJb2LL35vsRC/s6ItD2/Tb9K/1DIISSAN0HwLj2S+1lh2q3ZvyVliaTG6S1oU9nYgFOCudjCa63HMGA3i3GV0+y/XvFCOjOXIKJMTRS/LUpNIxxYbUpzdz03M5W2VFBXVE56C8M1N+mgaLpvzGknD6TW35LnH9APwWyrGXh9OFhotV8c0C42gUkqcjUSrKy1FNd/XXhK/nZfDPFJ63MDQqXewTca/Oxf6H65eYNysotIaPe/94YN8UT4bS2C2sq8Se52r7mgsGpFCYfKKSsAzxE3YVt6ejjXGobiODoSVLqjbhCX/Eq8Eu6ucF5LtMV1jzcH2X6IzuTIVrdIYOp5I2myiwA2kWhph3w2Q3AdpTg+dsyRz07+2YmNfiVgplLYrV8DWJzpV7wD4Dx75uPbISOl7sYC5NgSuZEpGS4GZxL3854Q8i27O8sDdj67OR5slGB65XsXoQaef55c0CIm/act7wJAqjbyGcHD0jvc1dVJnkz6jlkN7JOux1ciJkTbU9zq3yYcizQ9/ReQTbGGfoUnXRPWL9znmWAMgh4zMt18TYJXPp8ew2qraABGE2gMpLcDUl/TRx2Wfr/Q0Jy1EIGxvObh0gmLzOjrKP4yIk07xv7Qvx62iI2zXbdwX1TSHB6mZGIyZNNEOAr7ynCUwtgsg7gjr72MzRomFiPZ/tRYlCG5X3LwYNI0feCJfPRcEMf6dV1FuUeC3GLcExqpkhn7IGT1+R5ganDuCQdA6rV8RxEimmpZRNXxfae/FY4UTC81MmCu6+WWuvCr+4Z8f96TF6DDsv4fAT/iAlqnw96bLkONk2cb6MRPCxCqAXUIaNq0uwW5qy2qrN228ewgcgDLqsbrqh1fJREEyHALv0gHOtmlO7t3Mp2r+LJpeMTn4DbIa5+kh0iU9zEI4XMvihHZ+Ipvn0F3DH8x5mGtHV8IJzT7qhX3/LvspMixbpEwjDAwfwRgys4mUnqK6jOmVKBQBClXigQmhtg8eURtmbtWrQPiqFBmhZtQL6/PFvmhW07bXp8C3/zrhmrQVYcpkFsITGJNLgEC1DKZJ4hkK2CuBnnDAIA/i1YU+uRLXBvvKssfh7DOiXGZPjUMvrsi/GWgmrqlg0X63DLfOMpEBByU0Sv6dXsOiJpVIpSjbSmN531TnVff3c+a7SbKroFxBYWKt50TOq3uI+AgFSbTNAmkorwKxPbLdDxjzorb/d63spwkIhxw3Z3bS2Hi3vaClxjknMaZP+RMh4J8vBpjWcBHyPimIhc+koe19tozNtmktRJ+CXzLhVCSad5PBQaM9i60HHetZuj1ItVRAxpArkdS6Xr4pC7cFtgycgGTDvVywacnxDMbQbpiGxZkE28v/e11gwwxlZroKsOnnihaNSNCdpOaD1rS0q4+eJqHfxdmo3RuOdD9FCLx8zxRD9sr6e7YAsYAzJ4vJEo0IpdVFH2+mtOIqYVIdomG3J6ZCpCMkdKcfjvusIXmEyntLqaKge6MzW52rdlGCahHTn3thkzLuvJOKZpX2QNlgYIXzqRC/+kNqzdFVSmUgoS1ULSGqQvccltwr1IWfMVGjzcHekcptqXo8MMDglVlnU4xUD3QkJ6cc8q1XreBdSi0Vtcviz7WjxdoScWh1k8Rlh1F/4UOFsgxWxMHO8QBUpE6jf76mH6LJHC7krhq1cejhcKMi9/3w87LTOpT+zYw6sFcyCrd6DsatOoUg1Q6i0UOA9ZbHxqn86TYCxEPpnc38k7JzVoiPhaKDPDkRKOzKJORggdaSsWoK2gvC5XrcoafPC2pcHR7RIoGo2Pnu3OYvXN/cdwow47+M9v1RSlM3JALo8YeMAo4UAjhBIzJ9BDXeFRZvD54Hg7dN/oSFkoqJL1t25HLx0xvGzkbTk3Kcvoy6qMa1qGek0Lf6YlaJ7v7VhXLmcnXGTobQKrvjlBlGthwaXMTRmpbzeu7fbsKsHsYgj6SyA0sGwUKkU1JkkpEpSL7vt2Sfw29NmsmXx+VyctUZPt2dMIYzY9N4bkC3w6AjkKlqI79liLCT/Xoi38cskGx9mtnE+ayqk3MhdJr15X7nUmSGKL/0gMJxZwlmQ1K38hpbzaSwZZHi5ZccA2b/0wzGns8EMyBWQO8A7+UU45ZZ8bPrG4w/9tRQodBoC1HwsUbbgFot+lkfcBTIV0xedpefbab9Xy9a9THERwDxjetDxNsWqeVlKE62EdmzYoxpcQtTGijb1OSxsBQG5YxxHE1bgHIH9gkI0N2kh03Z2yxNG7iBnASoCFJdHNvOsdDBv0R03nmCrwfW8mrJyHMogVMfHD3c1MG+mNMbiznQeOAB8UgVe1LCCMns6Kk1WV20RPDi21JmQFT/kn8J6NyEQ4whL9EUGf0TGdoj0aWYgdGJ8G2ecJTqf2dKZa9Gp3TikbYha8BLNXVZVI0jM6nCgvM+rF98OwnPmGJES0rz5pr87om9xg3Ev/rtLMAnLM4BTH4u/vlMguerpuxCDccvoifO+kdqlOorz1DX5CZdGYp/gcbs6688/a5pwvEVixOliOYuS/g28ntc9+Vt2CaS/PROxsJUA+BytP78FpsysYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","uuid":"7d114a8f-c7d8-4297-a122-d148a1b38f0d"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CezgtXj1iYybgsNWREhifs","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0185PwvQH6tmmhzBc2TN1Mct","name":"Bash","input":{"command":"ls /tmp/loop-bench-oldyixfl","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","uuid":"570e5d9c-3a66-4bed-8dc1-4947105aa2c1"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":857143,"duration_api_ms":88468,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"aeab7f29-fa12-46aa-9566-03046f5a1eb0","total_cost_usd":1.03488045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":67714,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.03488045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"d17f6d07-c7cc-41f3-81fb-585b3fc58b31","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":956865,"duration_api_ms":88207,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"d309e78d-a326-413e-ae14-7e68f8beeb6b","total_cost_usd":1.09917855,"usage":{"input_tokens":3,"cache_creation_input_tokens":4731,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4731},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4731,"cacheCreationInputTokens":4731,"webSearchRequests":0,"costUSD":1.09917855,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"eba3827b-f359-4ff8-a551-316e63df42e6","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true, - "note": "not applicable for javascript" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 6, - "tool_calls": { - "total": 0, - "bash": 0, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 18 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.67 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 18 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "javascript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.563859+00:00", - "wall_time_seconds": 957, - "exit_code": 1, - "completed_at": "2026-04-04T09:23:06.354217+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,6 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "javascript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse JavaScript (no TypeScript)."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-5vlxz4ta","session_id":"d309e78d-a326-413e-ae14-7e68f8beeb6b","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"61ff51a5-21c2-4e66-890b-9075efa2926a","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LXbFDFEEMoVDEUsv8qPfSH","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me build a complete, playable Tetris game in JavaScript that runs in the browser. I'll create an HTML file with embedded CSS and JavaScript.\n\nThe game should include:\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys)\n7. Nice visuals\n\nLet me plan the implementation:\n\n**HTML Structure:**\n- Canvas for the game board\n- Score display\n- Level display\n\n\n- Lines cleared display\n- Next piece preview\n- Game over overlay\n- Start/pause button\n\n**CSS:**\n- Clean, modern dark theme\n- Responsive layout\n\n**JavaScript:**\n- Game board: 10x20 grid\n- Tetromino definitions with rotation states\n- Game loop with requestAnimationFrame\n- Collision detection\n- Line clearing logic\n- Scoring (based on Tetris guidelines)\n- Speed increase per level\n- Keyboard input handling\n- Next piece preview\n\nI'll define the seven Tetromino pieces with their colors (cyan for I, yellow for O, purple for T, green for S, red for Z, blue for J, orange for L) and implement the standard Tetris scoring system.\n\nWriting the game implementation... Defining the piece shapes and colors...\n\nNow I'm setting up the rotation logic using the standard clockwise transformation where the new row comes from the old column and the new column is calculated from the grid size minus one minus the old row.\n\nI want to build a polished Tetris implementation with ghost pieces showing where blocks will land, a hold mechanic, next piece preview, score tracking, pause functionality, and a game over screen. Let me write out the complete HTML file with all the game logic...\n\nBuilding the complete game implementation...\n\nI'm implementing the rotation logic using matrix transformations to handle clockwise and counterclockwise rotations cleanly... I've verified both rotation formulas with a simple 3x3 example and confirmed they work correctly. Now I'm setting up the full Tetris implementation with constants for the board dimensions and game state variables.\n\nWriting the game structure...\n\nNow I'm setting up input handling and thinking through the movement mechanics—I want to add DAS for smoother horizontal controls and implement SRS wall kicks to make rotations feel more polished, especially for the standard Tetris pieces.\n\nDefining wall kick offsets... I'm outlining the complete feature set for a full-featured Tetris implementation with a 10x20 board, all seven pieces, rotation with wall kicks, ghost and hold pieces, scoring with level progression, and various quality-of-life features like soft/hard drops and DAS. The controls map standard Tetris inputs across keyboard options, and I'm planning a polished dark-themed interface with animated line clears and a game over screen.\n\nNow I'm thinking through the technical architecture—I'll use a 2D array for the board state where each cell is either empty or contains a piece identifier for color lookup, represent active pieces as objects with their type, rotation matrix, position, and rotation state, run the game loop with requestAnimationFrame to handle timing for automatic drops that accelerate with level progression, and implement scoring that scales with the current level.\n\nBuilding the HTML and CSS... Still writing styles... Still writing styles... Building the right panel...\n\nNow I'm setting up the game constants and defining all the tetromino shapes with their rotation matrices, along with the color palette for each piece type.\n\nDefining game configuration... Setting up the canvas contexts and initializing the game board, then implementing the 7-bag randomizer to ensure fair piece distribution and a function to spawn new pieces with proper positioning.\n\nStill writing game logic... Now I'm implementing the ghost piece logic to show where the current piece will land, then handling the piece lock mechanism that places it on the board and checks for game over conditions.\n\nAfter locking, I need to clear any completed lines, update the score and level based on how many lines were cleared, re-enable the hold mechanic, and spawn the next piece.\n\nNow I'm setting up the piece spawning logic—pulling from the next piece queue or generating a fresh one from the bag, then checking if the new piece can actually be placed without immediately triggering a game over.\n\nFor movement and rotation, I'm checking that the game is actively running and not paused before allowing the player to shift the piece horizontally or rotate it.\n\nImplementing rotation with wall kick mechanics... Writing game logic... Writing game loop logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4731,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4731,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d309e78d-a326-413e-ae14-7e68f8beeb6b","uuid":"c03860ac-1d5f-46aa-a3c8-31952c99e264"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWWZYicMXiHBYNyv8MvzZE","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using JavaScript (no TypeScript). Let me build a complete Tetris game with:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z for rotation)\n\nI'll create a single HTML file with embedded CSS and JavaScript.\n\nLet me plan the game:\n- Canvas-based rendering\n- Standard 10x20 grid\n- All 7 tetrominoes with proper colors\n\n\n- Wall kick system for rotation\n- Line clear scoring (like standard Tetris)\n- Level progression with increasing speed\n- Next piece preview\n- Ghost piece (shows where piece will land)\n- Hold piece functionality\n\nI'll set up the board as 10x20, define all 7 tetrominoes with their colors, and implement controls for movement, rotation, and dropping. The scoring will follow standard Tetris rules with increasing points for multiple line clears, and the game will speed up as levels progress.\n\nWriting the game code... Defining the tetromino pieces with their rotation states... Defining the remaining tetromino pieces...\n\nNow I'm thinking through the overall architecture—I need to manage game state with the board, current and next pieces, hold functionality, score and level tracking. The rendering will use canvas to draw the board, active piece, ghost preview, and a sidebar for stats. I'll set up keyboard listeners for input and use requestAnimationFrame for a proper game loop with gravity timing.\n\nFor scoring, I'm using a level-based multiplier system where single lines give 100 points per level, doubles give 300, triples give 500, and a full Tetris gives 800, plus bonus points for soft and hard drops. The gravity will follow standard Tetris progression where pieces fall faster as the level increases.\n\nWriting the complete game implementation... Writing the HTML structure... Still writing styles... Writing game logic... Defining the remaining tetromino pieces... Defining the Tetris piece rotations...\n\nI need to reconsider the O piece—should it be 2x2 or 3x3? Looking at standard SRS, the I piece uses a 4x4 matrix while O typically uses 3x3 (or 4x4 with padding), and the rest use 3x3. Let me standardize my approach by defining each rotation state explicitly rather than mixing matrix sizes. For the I piece, I'll map out its four rotations as horizontal and vertical lines within a 4x4 grid, and for the 3x3 pieces like T, S, Z, J, and L, I'll use consistent 3x3 definitions for each rotation.\n\nDefining the piece data with rotation arrays... Defining the piece shapes...\n\nNow I'm ready to implement the full game logic. I'll add wall kick mechanics using the standard SRS system—for regular pieces like J, L, S, T, and Z, I'll test a sequence of offset positions when rotation fails, and I'll use a separate set of kick tests for the I piece since it behaves differently. Compiling the wall kick offsets for the I-piece across all rotation transitions, where the coordinate system treats rightward and upward as positive directions. Converting to screen coordinates where rows increase downward, I need to negate those row values. Now I'm laying out the SRS kick offsets for JLSTZ pieces across all rotation transitions—mapping out which positions to try when a rotation would normally collide. I'm working through the wall kick offsets for different rotation states, but this is getting unwieldy. I think I'll simplify and just implement a basic system that tries a few common kick positions like the origin, left, right, and down variations—it won't be fully SRS compliant but should work well enough for a browser-based game.\n\nActually, let me commit to doing proper SRS wall kicks properly. I'll organize the kick data as a lookup table keyed by rotation transitions, then define the offset sequences for each piece type.\n\nBuilding the SRS kick table... Now I'm mapping out the wall kick offsets for each rotation transition in screen coordinates, then I'll need to handle the I piece separately since it has different kick behavior. Writing rotation logic... Defining the piece shapes... Defining the remaining Tetris piece configurations...\n\nNow I'm verifying each piece's rotation states against the standard Tetris spawn orientations—checking that the I piece forms a horizontal line, the O piece is a 2x2 square, and the T piece has its stem pointing up in the default rotation. Continuing through the S and Z piece rotations, verifying each configuration maps correctly to its matrix representation. Verifying the remaining rotations for the J and L pieces...\n\nNow I'm thinking through the spawn positions for these Tetris pieces. Standard Tetris places the I-piece at column 3 spanning to column 6, while the other pieces spawn at column 3 spanning to column 5. I need to figure out the correct spawn row for the 3x3 pieces on a 20-row board.\n\nI'm considering whether to spawn pieces at row 0 (the visible top) or row -1 (a hidden row above), and I'm leaning toward allowing pieces to spawn at y=0 even if their top rows are empty, so they gradually enter the board naturally. For the I-piece specifically, this means the first row of its 4x4 bounding box would be empty, with the actual bar appearing in the second row. I'm working out the spawn positions for different tetromino shapes—the I piece needs to start at y=-1 so its horizontal bar aligns with the top visible row, while other 3x3 pieces should also spawn at y=-1 to keep their top rows just above the board.\n\nNow I'm thinking through the rendering logic: when drawing a piece, I need to map each cell in the shape matrix to its pixel position on the canvas by multiplying the board coordinates by the cell size, and skip any cells that would render above the visible board area.\n\nReady to implement the full solution.\n\nFor the game loop, I'll use `requestAnimationFrame` to handle rendering smoothly, track elapsed time to manage piece drops based on a decreasing interval tied to the level, and implement DAS for responsive left/right movement with an initial delay followed by a repeat rate. I'll also handle all the standard Tetris controls: arrow keys for movement and rotation, space for hard drop, and dedicated keys for hold and pause.\n\nWriting the implementation... Defining the piece shapes and rotations... Defining the tetromino rotation states... Defining the spawn positions for each tetromino piece and working through the positioning logic for the O piece to ensure it appears correctly at the top of the board. That's 4 cells in the middle. ✓\n\nFor the T piece with its 3x3 shape at y=-1, the hidden row contains just the stem, while the visible rows show the crossbar and empty bottom. With x=3, the stem ends up at column 4 above the board, and the three cells of the crossbar span columns 3 through 5. ✓\n\nNow I'm setting up the core game state with a board array to track piece placements, plus variables to manage the current and next pieces.\n\nSetting up game variables...\n\nNow I'm implementing the collision detection by checking if a piece's cells fall outside the board boundaries or overlap with existing blocks, and I'm also tracking the current piece's position and rotation state. For scoring, I'm using the standard Tetris formula where clears are worth more points at higher levels. I'm settling on a linear gravity formula that caps out at 50ms, which gives a nice progression from 800ms down to the minimum over about 10 levels. Now I'll build out the complete HTML file with a dark theme, subtle grid borders, and gradient-styled pieces.\n\nFor the visual polish, I'm adding a shine effect on pieces, a ghost preview of the falling block, and some animations for line clears and score popups. When rendering each cell on the canvas, I'll layer a main color fill with a lighter highlight on top and a darker shadow on the bottom to give it depth.\n\nStill writing canvas drawing code... Finishing the shadow effect, then moving on to write out the complete HTML structure with the game container, side panels for hold and next pieces, and the main canvas board. Writing the game logic... Defining the rotation states for each tetromino piece... Defining the game state variables...\n\nNow I'm setting up the canvas elements for the board, next piece preview, and hold piece display, then initializing the game with an empty board, a queue of upcoming pieces, and resetting all the game variables. I'm realizing I should use a 7-bag randomizer for better piece distribution instead of pure randomness. Let me implement that system where I shuffle all seven piece types and draw from them sequentially, then reshuffle when the bag empties.\n\nNow I'm working through the spawn positions for each piece type—the O piece appears cleanly at the top, the I piece's 4x4 shape positions its bar at the visible rows, and the 3x3 pieces like T will have their top row hidden initially with the middle and bottom rows visible on screen.\n\nFor the ghost piece, I need to calculate where the current piece will land by simulating downward movement until a collision occurs, then render it with reduced opacity to show the landing position.\n\nWriting collision detection... Writing the piece locking and line clearing logic... I'm setting up an animation state machine with a timer that pauses input during line clear animations, then moving on to implement DAS (Delayed Auto Shift) for smooth continuous movement when holding left or right. Now I'm ready to write out the complete implementation.\n\nLet me think through the game loop structure once more—it needs to handle delta time, check for pause/gameover states, manage line clear animations, apply DAS and gravity, then render everything in the right order from board background through placed cells, ghost piece, current piece, and the UI canvases. I'm also reconsidering the coordinate system for piece spawning and how the O piece's filled rows should align with the grid.\n\nWriting the full implementation... I'm realizing the O piece shape definition is taking up a full 4×4 grid when it only needs 2×2 cells in the middle, and I need to trace through exactly which board rows are visible when it spawns at y=-1 with the shape rows offset by the spawn position. I'm realizing the spawn position needs adjustment—for pieces with filled rows at indices 0 and 1, spawning at y=0 would show both rows, but for pieces like the I where the bar sits at row 1 of a 4-row shape, I need a different offset to keep the top rows hidden as intended. I'm settling on y=0 for all the standard 3x3 pieces, which places their top row at the visible board edge. For the O piece using a 4x4 grid, both visible rows appear at the top of the board, and for the I piece I'll need to handle the spawn position separately since it has a different shape.\n\nWriting spawn logic... I'm verifying the spawn logic—if a piece appears at y=0 and collides with existing blocks, that's an immediate game over. Now I need to finalize the complete game code, though I'm reconsidering the piece shapes to avoid wasteful grid sizes. The O piece could be a compact 2x2 instead of 4x4, but that creates inconsistency with the preview rendering, so I'll stick with uniform dimensions for simplicity. Adjusting the O piece coordinates to verify it spawns correctly at columns 4-5, which matches standard Tetris positioning for a 10-wide board.\n\nNow checking the I piece with the same logic—at x=3, the four-wide bar lands at columns 3-6, which is properly centered. Let me verify the spawn positions are consistent across different piece shapes. I'm working through the spawn positions for different Tetris pieces on a 10-wide board. For the O piece with its 3x3 shape, I need to figure out whether x=3 or x=4 gives the correct center columns—x=3 places it at columns 4-5, which matches the standard spawn position, while x=4 would shift it too far right to columns 5-6. For the I piece with the bar in row 1, all four columns get used across the board. The T piece's center lands at column 4, which is slightly left of the board's true center but matches standard Tetris spawn positioning—using x=3 for all pieces gives 3x3 shapes the correct columns 3-5 range with the piece centered at column 4.\n\nNow I'm finalizing the spawn coordinates and writing out the complete HTML file. I'm also thinking through how to render the cells with a 3D beveled effect using layered fills and highlights.\n\nWriting cell rendering code... Writing the game loop... Still writing styles... Still writing styles... Building the game layout... Now I'm setting up the core game constants and piece definitions for the Tetris implementation, establishing the board dimensions, cell size, and color mappings for each piece type, then defining the rotation states for how each piece can be oriented. Defining the rotation states for the remaining Tetris pieces... Setting up the game constants and state variables...\n\nNow I'm initializing the canvas elements for the main board, next piece preview, and hold piece display, along with grabbing references to the UI elements for score, level, and lines cleared. I'm also setting up input tracking for keyboard controls and the delayed auto-shift timers for piece movement.\n\nSetting up the bag randomizer...\n\nNow I'm working through the piece spawning logic, checking for collisions by iterating through the shape's cells and validating they're within bounds and not overlapping with existing blocks on the board. Writing game logic... Implementing the hard drop mechanics and the hold piece functionality...\n\nNow I'm handling the piece locking logic—placing it on the board, detecting completed rows, and triggering the line clear animation if needed. Then I'm removing the full rows and shifting everything down while calculating the score based on how many lines were cleared.\n\nSetting up the game loop timing... Implementing game loop logic... Writing the cell rendering... Writing the render function... Writing the rendering logic... Calculating cell size and positioning...\n\nNow I'm rendering each piece with a shadow effect and adding a subtle highlight to give them dimension, then moving on to update the UI elements like score and level display.\n\nWhen the game ends, I'm populating the overlay with the final score and resetting the start button text, then showing the game over screen to the player.\n\nSetting up keyboard event handling...\n\nNow I'm handling the pause mechanic—pressing P toggles between paused and playing states, updating the overlay accordingly. For active gameplay, I'm mapping arrow keys to movement and setting up the dash timer.\n\nStill writing input handlers...\n\nNow I'm setting up the game initialization function, resetting the board, piece bag, and all game variables to their starting state. I'm realizing my DAS implementation needs refinement—the current approach with modulo arithmetic is overcomplicated. I should track how long each direction key has been held and trigger repeats more cleanly: move immediately on keydown, then after the initial delay period, move again at regular intervals while the key stays pressed. I'm realizing the issue with my first approach—I need to track how many times we've actually moved based on elapsed time, not just reset the counter. Let me use a cleaner formula that counts how many DAS_RATE intervals have passed since the initial DAS_DELAY threshold, and only move when that count increases. Building the state machine...\n\nI'm realizing the single DAS state approach gets complicated when both directions are held simultaneously. Let me switch to tracking left and right inputs independently with separate timers, so whichever direction becomes ready first can move the piece.\n\nNow I'm working through the lock delay mechanism, which gives the player a window to adjust the piece after it lands. I need to make sure the animation state blocks input properly, and that after the animation completes, lines get cleared and a new piece spawns. For the timing, I'm already handling the first frame edge case where `lastTime` is 0 by setting `dt` to 0, and I'm capping the maximum delta time at 100ms to avoid issues if the game loses focus. For the board storage, I'm using piece type strings and looking them up in a color map during rendering.\n\nNow I'm ready to write out the complete implementation with all the core systems: constants and shape definitions, state management, canvas setup, the bag randomizer for piece selection, collision and piece manipulation functions, game actions like movement and rotation, the main game loop with delta time, rendering logic, input handling, and initialization. I want to make sure I get the details right on delayed auto-shift for smooth controls, lock delay so pieces don't snap instantly, the ghost piece preview, line clear animations, hold functionality, next piece display, scoring, and level progression.\n\nWriting the full implementation...\n\nI'm catching an issue: I need to initialize `nextPiece` before the first render call, otherwise I'll be trying to draw an undefined piece. Also, the overlay should only appear on the initial idle screen, not during gameplay. For the initial state before the game starts, I'll render the board as empty and keep the next and hold canvases blank too. I think showing just the empty board with the overlay is cleaner than previewing a piece upfront.\n\nBuilding the complete HTML file...\n\nFor the line clear flash effect, I'll draw the cleared rows in bright white to create that satisfying visual feedback.\n\nI'm keeping the scoring simple—just updating the text directly without animation. I'll skip the localStorage best score and consecutive tetris counter for now to focus on solid core mechanics.\n\nNow I'm working through the mini canvas sizing for the next and hold pieces. Since these are 4×4 cells max on a 100×80 pixel canvas, I need to calculate the right cell size and center the piece properly within the canvas.\n\nComputing the layout... Now I'm calculating the positioning for the T piece—with its 2-row, 3-column bounding box and a cell size of 24, it centers nicely at coordinates (14, 16) in the preview area.\n\nFor the hold mechanic, I need to handle three cases: storing the current piece if the hold slot is empty, swapping pieces when one's already held, and preventing multiple holds per piece until it locks. The held piece gets stored as just its type, so when it comes back into play it always spawns in the default rotation and position.\n\nI should add null checks when rendering to handle the initial state before any piece appears, and make sure the start button doesn't interfere with keyboard controls.\n\nNow I'm implementing the full code, including preventing default browser behavior for all game keys and ensuring the DAS timers work independently for each direction.\n\nI also need to fix a critical bug in the line-clearing logic where splicing rows shifts the indices of remaining rows—I should iterate through the rows in reverse order to avoid this problem.\n\nActually, the cleanest approach is to filter out the cleared rows and add empty rows back at the top to maintain the board height.\n\nUpdating level calculation...\n\nNow I'm thinking about edge cases in the hold function—specifically what happens when a held piece can't spawn because the board is nearly full. In standard Tetris, that's game over, but my current implementation doesn't check for this condition, so I should add that validation. I'm realizing the hold logic is getting messy trying to reuse `spawnPiece()`. Let me just directly set the current piece when swapping with the held piece, and only call `spawnPiece()` when there's no held piece yet. The `spawnPiece` function mirrors the hold logic—it pulls from the next piece queue, attempts to place it at the top of the board, and escalates to game over if both the initial and fallback positions collide. I'm noticing the spawn and hold mechanics are now consistent in how they handle collision detection and game-over conditions. , the standard Tetris game-over condition is when a newly spawned piece overlaps with existing blocks. The y=0 and y=-1 checks handle this.\n\nFor the I piece at y=0 with rotation 0, the horizontal bar sits at row 1, so if rows 0-1 are filled, it collides immediately. At y=-1, the bar moves to row 0, which would also be filled if the top rows are occupied. Same logic applies to the T piece—checking both spawn positions ensures we catch game-over conditions correctly.\n\nNow I'm thinking through the animation state flow. When lines clear, the game enters an \"animating\" state where input is blocked and the board displays the flash effect for a set duration. Once that timer expires, `clearLines()` runs and spawns the next piece, transitioning back to \"playing\" or ending the game if the spawn fails. I need to make sure the game loop properly handles this state transition and doesn't process input during the flash animation.\n\nHandling the state transition carefully...\n\nI need to trace through the sequence: after setting `gameState = 'playing'`, I call `clearLines()` which triggers `spawnPiece()`. If the piece spawns successfully, the state stays as 'playing', but if it fails, `spawnPiece()` sets it to 'gameover', which correctly overrides my initial assignment. The key is that `clearLines()` itself doesn't modify `gameState`, so the flow works as intended. Refining the input handler logic...\n\nI'm structuring the keydown listener to handle each game state separately—idle and gameover should start the game on any key, pause can be toggled with 'P' during play, and the animating state should block most input. Let me organize this so the state checks happen in the right order and the pause toggle works consistently across states.\n\nNow I'm ready to implement the complete input handler with proper DAS timers that count down from the initial delay and reset to the repeat rate, plus lock delay that resets whenever the piece moves or rotates. Defining the piece shapes and colors... Defining the rotation states for the remaining Tetris pieces... Setting up the canvas elements and DOM references for the game board, next piece preview, hold piece display, and UI elements like score, level, and lines counters...\n\nNow I'm implementing the bag randomizer system that shuffles through all available piece types and pulls them one at a time, refilling the bag when it's empty, along with helper functions to retrieve piece shapes based on their current rotation state.\n\nI'm writing the game logic functions... Writing rotation and collision logic... Still writing game logic... Writing the rendering code... Writing the ghost piece renderer... Writing the board rendering... Still writing rendering logic... Adding highlight and shadow effects...\n\nNow I'm setting up the UI functions to update the score display, level, and lines cleared counter, then handling the game over screen with final score display and a restart button, plus implementing pause toggle functionality.\n\nStill writing game loop... Continuing with the game loop logic...\n\nI'm handling the right movement with the same DAS system, then managing gravity and piece dropping with adjustable intervals based on whether soft drop is active. I'm also tracking lock delay to give the player time to move a piece after it lands, resetting the timer if the piece moves away from the ground. There's something I need to reconsider here about the implementation.\n\nI'm realizing I'm double-counting the lock delay in my current approach—accumulating it both when the piece fails to drop and when it's grounded. Let me restructure this so the gravity system handles dropping the piece each frame, and the lock delay only triggers when the piece is actually resting on the ground.\n\nRefactoring the gravity and lock delay logic... Writing game physics logic... the same speed, which defeats the purpose. I should set soft drop to 20ms instead so it's consistently faster than gravity at all levels, and the 1-point-per-row scoring still applies correctly.\n\nNow I'm working through the DAS (delayed auto shift) implementation—when an arrow key is pressed, the piece should move immediately, then after a delay start repeating the movement continuously in the game loop. I need to handle the browser's native key repeat properly—ignoring repeated keydown events for movement keys where I'm managing my own DAS timing, but potentially allowing them for other actions like rotation or hard drop that should trigger immediately each time. I'm working through the DAS timing logic—when a key is held, it should wait DAS_DELAY before repeating, then move every DAS_RATE milliseconds after that. The counter starts at DAS_DELAY on keydown, decrements each frame, and once it hits zero I move and reset it to DAS_RATE for the faster repeat cycle.\n\nThere's a small precision issue with my current approach: if I set `leftDas = DAS_RATE` after moving, the remainder from overshooting gets lost (like if leftDas goes to -14, I lose those 14ms). Using `leftDas += DAS_RATE` instead would preserve that overshoot and keep the timing more accurate across frames.\n\nHowever, there's a risk: if the game tab is backgrounded and dt becomes huge, leftDas could go very negative and trigger multiple moves in a single frame. I can handle this with a while loop that keeps moving and accumulating DAS_RATE until leftDas is back above zero, with a safety break to prevent infinite loops if something goes wrong. Since I'm already capping dt at 100ms and DAS_RATE is relatively small, this shouldn't be a practical issue. 50ms, the while loop would execute at most 2 times. That's fine.\n\nActually, this isn't quite right either. After the initial DAS_DELAY (170ms), we want to move once every DAS_RATE (50ms). But if dt = 100ms (cap), we'd move 100/50 = 2 times per frame. That's correct.\n\nI'm implementing a DAS system where the counter decreases each frame, triggering movement when it hits zero or below. Starting at 170ms, the counter ticks down until it reaches zero around the 170ms mark, then moves and resets to 50ms intervals. Each subsequent frame subtracts the delta time, and whenever the counter goes negative, we move and add back the rate value to continue the cycle. the DAS block doesn't execute. But if the player rapidly switches between left and right inputs, the leftDas timer might retain a low value from the previous press, triggering an unwanted auto-repeat. I should reset leftDas to DAS_DELAY whenever a new left keypress occurs, and using the e.repeat filter ensures only fresh key presses trigger this reset rather than held keys.\n\nSetting up keydown handler... Still writing styles...\n\nNow I'm verifying the piece rotation logic, particularly for the S and Z pieces since those have tricky rotation patterns. Completing the rotation mapping, I get the cells at (1,2), (2,2), (0,1), (1,1), which gives me the matrix [[0,1,0],[0,1,1],[0,0,1]] — that matches what I have. Now I'm verifying the 180° rotation produces [[0,0,0],[0,1,1],[1,1,0]], and checking the 270° rotation as well. Now I'm verifying the Z rotation by mapping each cell through the clockwise transformation and building out the resulting matrix. I'm finishing up the Z piece rotations and confirming they all match the expected shapes. Now I'm moving on to verify the J and L piece rotations work correctly too. Now I'm working through the 180-degree rotation by applying the transformation formula to flip both the row and column indices, which gives me the upside-down J shape. For the final 270-degree rotation, I'm applying the counterclockwise transformation to get back to a vertical orientation.\n\nMoving on to the L-piece, I'm setting up its default orientation and then working through the clockwise rotation by transforming each cell coordinate. I've verified all the L-piece rotations match their expected matrices, so now I'm ready to write out the complete solution code. Let me also handle the T-piece rotations...\n\nVerifying T-piece rotations... I'm verifying the T piece rotations are correct, and now moving on to the I piece. For the 4x4 I tetromino, I'm checking the default horizontal orientation and then working through the 90-degree clockwise rotation where the piece becomes vertical, mapping each cell position through the rotation formula.\n\nVerifying rotation matrices... I've verified all the I piece rotations are working correctly. Now I'm ready to write the implementation code, but first I need to clarify the spawn position—checking whether the I bar should appear at row 0 or row 1 based on standard Tetris guidelines, which typically spawn pieces in rows 20-21 of a 22-row field. So for the I piece, y=-1 is the correct spawn position. Looking at the 3x3 pieces like the T piece at y=0, the top row of the matrix sits at the visible board's top row, so the actual block appears immediately. But with the I piece's bar positioned at matrix row 1, spawning at y=0 leaves an empty row at the very top of the visible area, which is why I need y=-1 to match the standard spawn behavior.\n\nFor the O piece at y=0, the 2x2 block correctly occupies rows 0-1, so that's the right position. The standard approach is to spawn the I at y=-1 while keeping the other pieces at y=0. For T at y=0:\n- Top of T at (4,0), bar at (3,1),(4,1),(5,1)\n\nThis puts the T piece fully visible, with the stem pointing up at row 0.\n\nBut in standard Tetris, pieces spawn with some cells in the buffer zone:\n- T at standard: stem at row -1 (buffer), bar at row 0 (visible)\n\nFor my implementation, having the top at row 0 is fine for a browser game. It just means pieces don't \"slide in\" from the top - they appear at the top immediately. Let me just use y=0 for all pieces except I (which needs y=-1 or adjusting the shape).\n\nActually, you know what, let me just keep it consistent: spawn all pieces at y=0. For the I piece, the bar at row 1 means it appears slightly lower, but that's fine for a browser game. The game ends when a piece can't spawn in its standard position, which is standard behavior anyway. I'll initialize all pieces at y=0 and check for collisions at spawn time. I'm realizing there's a tricky edge case with piece spawning when the board is nearly full—specifically, whether pieces should be allowed to spawn partially in the buffer zone above the visible board. For the I piece in particular, if row 1 is completely filled but row 0 (the buffer) is empty, the piece could technically fit at y=-1 with its bar occupying that empty buffer space, even though it would collide at y=0. I need to decide whether to follow strict Tetris rules where spawning fails immediately if the spawn position collides, or allow this buffer-zone workaround for edge cases. the player. I think the fairest approach is to spawn the I piece at y=-1 so its bar sits at row 0, giving it the same buffer as other pieces. I'm setting up different spawn positions for each tetromino type, with I getting y=-1 and the rest at y=0. This way, if blocks occupy row 0 in the I piece's columns, the game correctly ends since the piece can't actually fit.\n\nFor the collision detection, I need to handle negative y values as part of the buffer zone where pieces can exist without triggering game over yet. I need to add a return statement after setting game over so the timers don't get reset, and since the calling functions check `gameState` anyway, they'll naturally stop processing once the game ends.\n\nActually, thinking through this more carefully—`spawnPiece()` doesn't return anything, it just sets `gameState`. The functions that call it will continue executing after it returns, but that's fine because the game loop checks `gameState` at the top of each frame and stops rendering. Even if `current` gets set to an overlapping piece, the game over overlay will display and nothing will render that overlapping state.\n\nLet me explore a different approach for the I piece spawn position instead.\n\nModifying the I piece shape to position the bar at row 0 of the spawn matrix would work, but that breaks the standard SRS rotation system where the bar sits at row 1. The rotation math is derived from that standard position, so changing it would require reworking the whole rotation logic. I'll stick with spawning at y=-1 and keeping the standard shapes.\n\nActually, I'm overthinking this. Let me just keep it simple—spawn everything at y=0 with no special cases and see if it makes for a fun game.\n\nThe I piece at y=0 means the bar occupies row 1 of the matrix, leaving an empty row at the top. It's slightly non-standard but works fine in practice. Now I'm ready to write the complete HTML file with all the styling and game logic in one go.\n\nWriting the complete game file...\n\nOne thing I need to be careful about: the `render` function calls `renderMini` with `nextPiece`, which might be undefined before the game actually starts. The `renderMini` function already handles this gracefully by checking if the piece type exists and returning early if not, so that's covered. I also need to make sure the board is initialized as an empty grid in the idle state before any rendering happens.\n\nThere's one more detail about the render cycle during line clearing animations—the board still contains the flashing rows while they're being cleared, and I need to make sure the rendering handles that state correctly.\n\nStill writing render logic... Writing the stylesheet... Still writing styles... Finishing the button styling and now setting up the HTML structure with the game container, left panel for the hold piece preview and control instructions, and the game board layout. Building the right panel... Defining the piece shapes... Defining the rotation states for the remaining Tetris pieces... Setting up canvas references and game state variables...\n\nNow I'm initializing the game state machine with modes like idle, playing, and paused, along with timing accumulators for drop and lock mechanics. I'm also loading the best score from local storage and setting up a bag randomizer that shuffles through the piece types using the Fisher-Yates algorithm.\n\nContinuing with helper functions...\n\nNow I'm checking collision detection by iterating through the piece's cells and testing if any fall outside the board boundaries or overlap with existing blocks. Then I'm setting up the game mechanics—calculating the drop speed based on the current level, and implementing the spawn function to place new pieces at the top of the board with a game-over check if they immediately collide.\n\nWriting game logic... Writing game logic... Writing game loop logic... Refining the gravity and soft drop logic...\n\nNow I'm checking the lock delay mechanics—when the piece successfully moves down, `tryMove` resets the lock accumulator, which prevents premature locking. Once the piece can't move anymore, the lock delay block takes over and counts up until the piece locks. The tricky part is making sure this doesn't trigger while the piece is still falling, but that's handled naturally since `hits()` only returns true when there's a collision below. would be false. So `lockAcc` isn't accumulated. But I also need to reset `lockAcc` when the piece is airborne. Currently, `tryMove(0, 1)` resets `lockAcc` when the piece falls. But if the piece is in the air between gravity ticks, `lockAcc` isn't being accumulated (since `grounded` is false).\n\nActually wait: the lock delay accumulation block only runs when `grounded` is true. When the piece is in the air, `grounded` is false, so `lockAcc` doesn't accumulate. When the piece lands, `grounded` becomes true, and `lockAcc` starts accumulating. When the player moves/rotates, `tryMove`/`tryRotate` resets `lockAcc = 0`. ✓\n\nBut I also need to make sure `lockAcc` is reset when the piece falls a row (because `tryMove(0,1)` already does this). The lock delay block checks `grounded` AFTER the gravity block, so if the piece just landed, `grounded` is now true and `lockAcc` would start accumulating from 0 since it was just reset. ✓\n\nI think the logic is correct. Now let me trace through the `tryMove` function to make sure the gravity call works as expected.\n\nContinuing with the movement logic...\n\nWriting the game loop... Writing game loop logic...\n\nI'm thinking through the initialization flow: the game starts in an idle state with an overlay prompting the player to begin, then once they interact, I'll initialize all the game state, hide the overlay, and kick off the main loop. For the JavaScript structure, I'll wrap everything in an IIFE to keep the global scope clean, but I need to expose `startGame` so the HTML can call it from an onclick handler.\n\nNow I'm working through the soft drop scoring logic—when soft drop is active and gravity causes the piece to drop, it should award 1 point per row, but only if the move actually succeeds. I'm also considering what happens at higher levels where the gravity interval might become faster than the soft drop interval.\n\nI'm finalizing the HTML implementation now with a focus on visual polish: a dark board with a subtle grid, neon-colored pieces with glow effects, a ghost piece preview, smooth line-clearing animations, and a clean sidebar showing the next piece, hold piece, score, level, and best score. I'm deciding whether to draw the board border directly on the canvas or use CSS, and accounting for how the canvas dimensions will interact with any border styling.\n\nWriting the complete file... Still writing styles... Still writing styles... Building the game layout... Building the right panel with game stats... Defining the piece shapes... Defining the rotation states for the remaining Tetris pieces... Setting up DOM references and game state...\n\nNow I'm implementing the bag randomizer to shuffle through piece types, and defining helper functions to pull the next piece and retrieve shape data based on piece rotation. Still writing game logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4731,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d309e78d-a326-413e-ae14-7e68f8beeb6b","uuid":"978025ef-283d-4429-b74e-0e8af074f16a"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":956865,"duration_api_ms":88207,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"d309e78d-a326-413e-ae14-7e68f8beeb6b","total_cost_usd":1.09917855,"usage":{"input_tokens":3,"cache_creation_input_tokens":4731,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4731},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4731,"cacheCreationInputTokens":4731,"webSearchRequests":0,"costUSD":1.09917855,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"eba3827b-f359-4ff8-a551-316e63df42e6","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":769378,"duration_api_ms":87329,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","total_cost_usd":1.0136526000000001,"usage":{"input_tokens":3,"cache_creation_input_tokens":4732,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4732},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":66298,"cacheReadInputTokens":4732,"cacheCreationInputTokens":4732,"webSearchRequests":0,"costUSD":1.0136526000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"a6a14f04-4e66-4345-9c40-49e2b60be8da","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true, - "note": "not applicable for javascript" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 7, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.67 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "javascript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:20:49.574840+00:00", - "wall_time_seconds": 770, - "exit_code": 1, - "completed_at": "2026-04-04T09:33:44.883116+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=javascript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,7 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "javascript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse JavaScript (no TypeScript)."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-xwmz17oo","session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"6edc664b-aa4f-4698-b6fb-2c8cba38dfe9","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SEwHtGk1JKnArToJKWJjL7","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser using JavaScript (no TypeScript). Let me build a complete, well-designed Tetris game with all the standard mechanics.\n\nLet me plan what I need:\n1. HTML file with canvas for rendering\n2. CSS for styling\n3. JavaScript for game logic\n\nFeatures to implement:\n- All 7 tetromino pieces (I, O, T, S, Z, J, L)\n- Piece rotation\n- Line clearing\n- Scoring (standard Tetris scoring)\n- Increasing speed (levels)\n\n\n- Keyboard controls (arrow keys for movement, up for rotation, space for hard drop)\n- Next piece preview\n- Level and lines cleared display\n\nI'll create a single HTML file with embedded CSS and JavaScript, using the Canvas API for rendering. For the pieces, I'll use the standard Tetris color scheme: cyan for I, yellow for O, purple for T, green for S, red for Z, blue for J, and orange for L. The controls will be arrow keys for movement, down for soft drop, up for rotation, space for hard drop, and P to pause. I'll implement standard Tetris scoring where single lines earn 100 points times the level, doubles earn 300, and so on.\n\nWriting the complete game...\n\nThe board will be 10 columns by 20 rows with 30-pixel cells, giving a 300×600 pixel canvas. I'm also adding a side panel for the next piece preview and game stats.\n\nDefining the piece colors and rotations... Defining the rotation states for the remaining Tetris pieces...\n\nNow I'm stepping back to plan out the implementation more carefully. I'll structure this as a single HTML file with the game canvas on the left side and a control panel on the right showing the next piece, current score, level, and line count.\n\nI'm going to use two canvases—one for the main gameplay and another for previewing the next piece. Let me build this out with a dark theme to make it visually appealing.\n\nSetting up the HTML structure and styling... Still writing styles... Building the game interface... Defining the tetromino pieces... Defining the remaining Tetris piece rotations... Setting up the next piece preview canvas with scaled-down dimensions, then initializing the game state variables and the init function that resets the board, score, and level before spawning the first piece and selecting the next one randomly.\n\nContinuing with the piece spawning logic...\n\nI'm defining helper functions to manage the tetromino pieces—getting the current rotation shape and validating whether a piece can move to a new position by checking collision boundaries and checking if it would overlap with already-placed blocks.\n\nWriting game logic... Writing game logic... Writing the game rendering logic... Writing the rendering logic... Writing the game loop... Writing game controls... Writing game mechanics...\n\nActually, I'm spotting a bug in the `clearLines` function—when I splice rows out of the grid and unshift new ones while iterating, incrementing the row counter causes me to skip checking some lines. So after splicing out the cleared row at index r, the rows below it shift up to fill the gap, and then unshifting a new empty row at the top pushes everything down. This means the row that was at r+1 is now at r, so I need to check that same index again—the `r++` inside the if block counteracts the loop's `r--` to keep us at the same index for the next iteration.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4732,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4732,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","uuid":"20812162-aaff-4419-b034-1fed62c8360e"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012tdh4vLbMCnVLPLXtieJ3B","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me build a complete Tetris game that runs in a browser using HTML, CSS, and JavaScript. I'll create a single HTML file with all the necessary code.\n\nHere's what I need to implement:\n1. Standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece movement (left, right, down)\n3. Piece rotation\n4. Line clearing\n5. Scoring system\n6. Increasing speed levels\n7. Keyboard controls\n8. Game over detection\n9. Next piece preview\n\nLet me design this carefully:\n\n**Game Board**: 10 wide × 20 tall (standard Tetris)\n\n\n**Pieces**: I (cyan), O (yellow), T (purple), S (green), Z (red), J (blue), L (orange)\n**Controls**: Arrow keys for movement and rotation, Space for hard drop, P or Escape to pause\n**Scoring**: 100-800 points per line cleared depending on how many lines (scaled by level), with speed increasing every 10 lines\n\nNow I'm setting up the HTML structure with a canvas for the game board and a sidebar for displaying score, level, and the next piece preview. I'll use standard constants like a 10×20 grid with 30-pixel blocks, and implement the tetrominoes using the Super Rotation System.\n\nDefining the piece shapes... Defining the game pieces and constants... I'm setting the drop speed to decrease with each level using a formula that keeps it reasonable—starting at 800ms and dropping by 70ms per level until it bottoms out at 100ms. Now I need to implement the ghost piece to show where the current tetromino will land, which means copying the piece, dropping it until collision, then rendering it semi-transparently. I'm also planning to add wall kick logic so pieces can rotate near walls using the standard SRS offsets.\n\nWriting the HTML file... Still writing styles... Finishing the button styling with hover effects and setting up the HTML structure for the game container with the canvas and overlay elements. Writing the game logic... Setting up wall kick offsets for rotations, then defining the scoring system and drop speed calculation based on game level. Now initializing the canvas elements and game state variables. Setting up the game loop and piece spawning... Writing collision and rotation logic... Writing game logic... Writing the game logic... Writing the game rendering... Finishing the ghost piece rendering, then drawing the actual falling piece by iterating through its shape and rendering each block. After that, I'm setting up the next piece preview canvas with a dark background.\n\nNow I'm centering the next piece in its preview window by calculating offsets based on the canvas dimensions and piece size, then drawing each block of the upcoming piece with proper spacing and color.\n\nAdding highlight and shadow effects...\n\nThen updating the HUD to display the current score and level.\n\nNow I'm setting up the overlay system for displaying messages, and implementing the main game loop that handles the drop timer and piece movement based on the current level's speed.\n\nSetting up keyboard controls... Finishing the game loop setup and handling the overlay button click to either resume or restart the game. Now I'm reconsidering the piece locking logic—since `hardDrop` already calls `lockPiece`, which spawns a new piece, I need to make sure the game loop doesn't try to lock the same piece again.\n\nThe key insight is that after `hardDrop` locks the piece and spawns a new one, the game loop will check collision with that new piece, so there shouldn't be a double-lock issue. However, I'm realizing the `dropTimer` needs to be reset after locking to prevent timing issues, so I should either reset it inside `lockPiece` or restructure how the timer works. Writing the lockPiece function...\n\nThe key insight is that `hardDrop` calls `lockPiece`, which resets the drop timer and spawns the next piece, so when the game loop resumes on the next frame, everything's already in place and ready to go.\n\nI should also make sure the game loop properly handles the case where `lockPiece` triggers a game over—it needs to stop requesting animation frames at that point rather than continuing to loop. Still writing game loop logic... I'm realizing the game loop needs to check `gameOver` at the start to prevent it from continuing to process game logic after the game ends. I'm adding that guard condition so the loop only updates the drop timer and calls lock piece when the game is actually still active. I need to make sure `dropTimer` is properly initialized in the `init` function and reset correctly when pieces lock, so the accumulation works smoothly across frames. Now I'm thinking about the visual presentation—I want to add a dark theme with colored blocks that have highlights and a visible grid to make the game feel polished.\n\nI also need to handle the initial game state with an overlay showing the title and a start button, plus a high score display. Let me reconsider how `nextPiece` should be initialized: I'll create the next piece first in `init`, then spawn the current piece which will automatically generate a fresh next piece. For `createPiece`, I'm building a function that randomly selects a piece type and constructs the piece object...\n\nStill writing piece generation... I need to figure out the spawn position for the I piece since its visible blocks are offset from the top of its shape matrix. The standard approach is to spawn it with a negative y-coordinate so that only the actual piece blocks appear in the visible game area, with the empty rows above the board. The I piece spawning at y=0 puts its blocks in the second row, which is standard Tetris behavior, while other pieces appear at the top row. For the game over condition, I need to check if a piece collides immediately upon spawning, which happens when the board fills up to the top. I'm also planning to add localStorage for the high score and implement a lock delay feature to give players time to adjust pieces before they lock in place.\n\nI'll skip the lock delay for simplicity and use module-level variables to manage the drop timer through JavaScript closures. I need to handle edge cases like hard dropping when a piece is already at the bottom and ensure pieces automatically drop based on the timer during gameplay. Now I'm writing the final clean version with pure JavaScript, proper game state management, and standard Tetris mechanics.\n\nFor the visual design, I'm going with a dark space theme featuring a subtle grid on the board, 3D block effects with highlights and shadows, a glowing current piece, and a faint ghost piece outline. The sidebar will display score, level, and lines panels along with a next piece preview, while the overlay shows the title, game over message, and a start button.\n\nWriting the complete implementation... Defining the piece shapes... All the Tetris pieces fit into square matrices, so the clockwise rotation logic should work consistently. I'm verifying the transformation formula where position (r, c) maps to (c, n-1-r), which correctly rotates the shape 90 degrees clockwise. Let me test this with the T-piece to make sure the math checks out. The rotation checks out perfectly—all the coordinates map correctly to produce the rotated T shape. Now I'm ready to build out the complete HTML file with all the interactive features.\n\nI'm implementing a 7-bag random generator for fairer piece distribution, which shuffles one of each piece type and draws from that pool before generating a fresh bag. With that in place, I can now assemble the full game implementation and think through how to visually animate cleared lines.\n\nFor the line clear effect, I'm tracking which rows get cleared and flashing them briefly before removing them from the board.\n\nStill writing game loop code... Still writing game logic...\n\nI'm realizing the animation timing creates a dependency issue—I can't spawn the next piece immediately after locking because the clear animation needs to finish first. So I need to track whether lines are being cleared and hold off on spawning until that animation completes. Writing the line clear animation...\n\nActually, I'm going to simplify this and skip the animation entirely. I'll just clear the lines immediately when they're complete—the visual feedback from rows disappearing and pieces falling will be enough. Let me refactor the clearing logic to be more straightforward.\n\nRefining the line clear function... I've decided to skip the lock delay feature to keep things simpler, and I'm going with `const` for constants and `let` for mutable state. Now I'm writing out the complete HTML/CSS/JavaScript implementation for the Tetris game.\n\nWriting the stylesheet... Still writing styles... Still writing button styles... Building the game interface... Defining the game constants and piece configurations... Setting up the canvas elements for the main board and next piece preview, then initializing all the game state variables like score, level, and piece queue. I'm also loading the saved high score from local storage and setting up the piece randomization system.\n\nStill writing game logic... Still writing collision and rotation logic... Writing game logic... Finishing the level calculation based on lines cleared, then moving into the spawning logic where I set up the next piece, check for collisions to detect game over, and handle the end-game state by saving the high score to local storage and displaying the game over screen.\n\nNow handling the block drawing function... Adding the 3D block effect... Finishing the grid rendering, then drawing all the placed blocks on the board, and finally rendering the ghost piece to show where the current tetromino will land.\n\nStill writing rendering logic... Drawing the next piece blocks... Still writing canvas rendering...\n\nNow I'm setting up the HUD to display the current score, level, and lines cleared, then implementing the main game loop that handles timing and drop mechanics based on the current level.\n\nInitializing the game state...\n\nNow I'm setting up the keyboard controls to handle player input—arrow keys for movement and rotation, with checks to prevent actions when the game hasn't started or is paused. Finishing up the pause toggle logic and event listeners for the game controls. Now I'm checking the rotation logic for the tetromino pieces—specifically verifying that the clockwise rotation formula correctly maps each position to its new location. Verifying the rotation formula works correctly by checking each cell position maps properly from the original T piece to its rotated form.\n\nNow I'm testing the I piece, which is a 4x4 grid, and I notice the rotation formula produces a different result than expected—the vertical line should appear in column 2, but my calculation is showing it in column 1 instead. The rotation is working correctly—the I piece rotates into a vertical line as expected, and the O piece stays the same since it's symmetrical. Now I'm thinking through the spawn positions: the I piece starts at y=-1 so its blocks appear at the top of the board, while other pieces spawn at y=0. I'm realizing the spawn position needs to match standard Tetris guidelines where pieces appear above the visible playfield, but for this implementation I should keep it simple since I don't have upward movement controls anyway.\n\nThe real concern is game over detection—when a new piece spawns, I need to check if it collides with existing blocks at its spawn position, and the I piece's offset means it occupies row 1 while other pieces occupy row 0, which could affect when the game actually ends. I'm realizing the I piece at `y: -1` actually makes more sense for standard Tetris behavior, placing it at the top row when spawned. My collision detection already handles negative rows correctly, so this approach should work without complications. I'm reconsidering the spawn positions for different piece types. In standard Tetris, the I piece spawns higher (with one row in the visible area) while other pieces spawn lower (with two rows visible). Since I'm treating y=0 as the topmost visible row, the I piece should start at y=-1 so its blocks appear at row 0, while other pieces also start at y=-1 but their shapes extend differently into the visible area. I'm realizing that using y=-1 for all pieces would work consistently—the first row of each shape sits off-screen, and the visible blocks start at board row 0. For the I piece, this means the four blocks appear at row 0; for other pieces like T and J, the visible blocks span rows 0 and 1 depending on their shape structure.\n\nFor game over detection, I need to check if the spawned piece collides immediately at its starting position—specifically whether `collides(currentPiece, 0, 0)` returns true, which would indicate that blocks already occupy the space where the new piece appears.\n\nWriting collision detection logic... Finishing the collision detection logic...\n\nThe collision function correctly handles negative rows by only checking the board when `row >= 0`, while still catching out-of-bounds collisions on the left, right, and bottom edges. The logic properly distinguishes between rows above the board (which shouldn't trigger collisions) and actual wall/block collisions.\n\nWith pieces spawning at y=-1, the game over detection works correctly—when a new piece collides at position (0, 0), it checks rows 0 and below, finding any blocks that have accumulated at the top of the board. However, there's a rendering issue: the initial display would cut off the top row of pieces since they're positioned above the visible board.\n\nMy draw function already handles this with a row bounds check that skips rendering any blocks above row 0, so pieces at y=-1 would have their top row invisible while the rest displays normally. This is the intended behavior for the spawn animation.\n\nNow I'm realizing I need to adjust my spawn logic—I was setting y=0 in spawnPiece, but I should initialize pieces at y=-1 instead to match the hidden-top-row design. Let me refactor createPiece to handle the initial positioning...\n\nDefining the piece creation function...\n\nI'm working through the math for how different piece shapes map to board rows when spawned at y=-1 versus y=0. The I piece's active blocks start at row 1 of its shape, while the T piece's active blocks are at row 1, so I need to figure out the right y offset to keep them consistent visually. I'm going back and forth on whether to use `y: 0` for all pieces or keep the special case for I. Using `y: 0` universally would simplify things and the visual difference is negligible, but I need to think through what happens when the I piece spawns at that position before committing to it. spawn it, the top row of the shape (all zeros) is at board row 0, and the actual blocks (1,1,1,1) are at board row 1. So the I piece appears at the second row from the top. When you move it right or left, it's at row 1. When it drops one step, it's at row 2. This seems fine visually.\n\nBut there's a subtle issue: when the board fills up to row 0, can an I piece still spawn? With y=0, the blocks are at row 1. So the game over check would need rows 1 to be blocked. With y=-1, the blocks are at row 0, so row 0 needs to be blocked for game over.\n\nStandard Tetris game over is when blocks reach the top of the visible field. So if the board has blocks in rows 0-1 and an I piece (y=0) spawns with blocks at row 1, collides returns true → game over. This is correct. If I use y=-1 for I, same thing: blocks at row 0, if row 0 has blocks → game over. Both approaches work for game over detection, though y=-1 is slightly more standard since pieces spawn partially above the board.\n\nI'm going to stop overthinking this and just use y=0 for all pieces—the game will work correctly either way.\n\nNow I want to add DAS (Delayed Auto Shift) for smooth horizontal movement when holding a key: initial delay of 170ms before auto-repeat starts, then 50ms between repeats. Implementing DAS handling...\n\nNow I'm thinking through the full structure I need: the core constants and canvases, game state variables to track everything, timing mechanisms including the DAS system, a 7-bag randomizer for piece selection, and all the essential game functions like collision detection, piece rotation and movement, line clearing, and rendering with that 3D block effect.\n\nWriting the complete HTML/CSS/JavaScript implementation... Still writing styles... Still writing styles... Building the sidebar panels... Setting up the game constants and piece definitions... Now I'm setting up the DOM references for the game board, next piece preview, and UI elements like score and level displays, then initializing the game state variables.\n\nI'm also setting up the delayed auto-shift system for smooth horizontal movement controls, loading the best score from local storage, and starting to build the bag randomizer for piece selection. Writing the collision detection...\n\nNow I'm implementing the rotation logic with wall kick offsets to handle edge cases when pieces rotate near boundaries, then defining the movement and rotation handlers for player input.\n\nImplementing drop mechanics... Now I'm handling the piece spawning and game over logic—pulling the next piece into play, generating a new one for the queue, and checking if the new piece immediately collides, which would end the game. If it does end, I'm updating the high score in local storage and displaying the game over screen with the final score.\n\nI'm writing drawing helper functions... Writing the game rendering... Writing the next piece display... Finishing the rendering with 3D-style beveled edges on each block, then updating the HUD to display the current score, level, and lines cleared. Now I'm setting up the main game loop...\n\nHandling the game state and timing—checking if we're actively playing, calculating delta time, then processing horizontal movement with delayed auto-repeat (DAS) to let the piece slide smoothly when held, and managing the drop timer to move pieces down at a level-dependent speed until they lock in place.\n\nSetting up the game loop and control functions—initializing the board, score, and game state when starting, then managing pause transitions and animation frame scheduling to keep everything running smoothly. Setting up keyboard controls for the game mechanics...\n\nI'm handling pause functionality through both the P key and Escape, then resetting the directional input state when arrow keys are released. The overlay button toggles between paused and playing states, and I'm about to draw the initial game board.\n\nActually, I'm noticing an issue with how pieces spawn. When `initGame` creates the next piece with `makePiece`, it already has the correct starting position. Then `spawn` assigns that piece to `cur` and generates a fresh next piece. Let me trace through this flow to make sure the positioning is working correctly—the piece should already be positioned properly when it becomes the active piece. I'm realizing that since `spawn` does a reference assignment with `cur = nxt` and then creates a fresh object for the next `nxt`, the two pieces stay independent. Now I'm checking the spawn positions for different piece types—the I piece starts at y=-1 to account for its shape offset, while other pieces start at y=0, and I need to verify these positions map correctly to the board. I'm checking the collision detection logic for the ghost piece placement. The `ghostY()` function increments down until it would hit something, giving the final resting position—let me trace through an example where the current piece is at y=0 to verify the math works correctly. Let me trace through the logic more carefully with the actual formula to make sure I'm understanding the collision detection correctly. , `dy = g - cur.y + 1` means we check if the piece can be at `y = cur.y + (g - cur.y + 1) = g + 1`. If it can't be at `g + 1`, then `g` is the lowest it can go.\n\nLet me re-trace:\n- We want the ghost to be at the lowest valid position\n- We check if the piece can move to `y = g + 1` (by checking `hits(cur, 0, g - cur.y + 1)`)\n- If it can, increment g\n- If it can't, g is the ghost y\n\nFor `cur.y = 5`, `g = 5`:\n- Can piece move to y=6? Check `hits(cur, 0, 1)` → probably false → g=6\n- Can piece move to y=7? Check `hits(cur, 0, 2)` → probably false → g=7\n- ...\n- Can piece move to y=19? Check `hits(cur, 0, 14)` → false → g=19\n- Can piece move to y=20? Check `hits(cur, 0, 15)` → true (floor) → stop\n- Return g=19 ✓\n\nThis is correct. The ghost appears at y=19 (or wherever the piece would land).\n\nNow I'm realizing that for taller pieces like the T-piece with 3 rows, the collision detection needs to account for the entire shape's height. When checking if a piece at y=18 is valid, I need to verify all three rows of the shape fit on the board, so row 2 would be at board row 20, which is out of bounds. That means the lowest valid position for a 3-row piece is actually y=17. The ghost function is working correctly—it finds the lowest position where the piece would collide by checking if placement at g+1 causes a hit, and stops when it does. Now I'm thinking through the drawing logic to make sure the ghost piece and current piece are both rendered properly.\n\nWriting the drawing code... Initializing the game state with a fresh board, resetting the score and level, and setting up the piece queue and animation loop. The `spawn()` call at startup creates the current piece from the next piece in the bag and generates a new next piece, then checks if the game is already over—which shouldn't happen on a fresh start, but the check is there for safety. the initial board state (empty + overlay). Let me make sure `draw()` works when `cur` is null (initial state):\n\nWhen `state = 'idle'`, the piece drawing is skipped, but I need to check if `board` is initialized before the loop tries to access it. If `board` is null or undefined at startup, the rendering will crash. I should initialize `board` as an empty grid during setup...\n\nInitializing board array...\n\nActually, I could also add a null check inside `draw()` itself to be safe. I'll go with initializing it upfront since that's cleaner. Now let me think about visual polish—I could add line clear animations, level announcements, or score popups, but those add complexity. I'll stick with solid mechanics for now and skip the extra animations.\n\nOne thing I want to consider: making locked pieces look visually distinct from the active piece by darkening them slightly. I could modify the block rendering to apply a darker overlay when drawing settled pieces, but that might overcomplicate things. Let me keep it simple for now.\n\nActually, I'll skip the darkening approach entirely—the ghost piece already provides enough visual contrast, and keeping everything consistent will make the code cleaner.\n\nNow I'm ready to write the final version without overthinking it further. For controls, I'll stick with keyboard since that's what was requested. Looking at the layout, I want the board at 300×600 pixels with a 148-pixel sidebar, totaling about 468 pixels wide. That should work on most screens. I could add responsive scaling for smaller devices, but I'll keep that simple for now.\n\nLet me finalize the game state logic before I start coding—I have `idle`, `playing`, `paused`, and `over` states, and the keyboard handler correctly blocks input when the game hasn't started or is finished.\n\nWriting the code now... Writing the game loop and overlay logic... I'm checking the while loop logic that handles multiple drops in a single frame—each iteration drops the piece one row, and if locking triggers a game over, the state check stops the loop. Then on the next frame, the loop returns early since the game is no longer in the playing state, so no new animation frame gets scheduled. ✓\n\nI should refactor this to only schedule the next frame when the game is still active, making it cleaner. After `endGame()` is called, the final board state gets drawn before the overlay appears, which is the correct sequence. The while loop stops once the game ends, `draw()` renders the final board state, and then the animation frame request is skipped since the game is no longer playing—so the overlay displays cleanly without any extra frames. Now I'm ready to write out the complete HTML file with all the styling and game logic.\n\nWriting the HTML structure... Still writing styles... Still writing overlay styles... Building the sidebar UI... Defining the game constants and piece data...\n\nNow I'm setting up the scoring system where clearing lines gives exponentially more points, and the drop speed increases with each level. Then I'm grabbing references to the canvas elements and score displays so I can render the game and update the UI.\n\nSetting up game state variables... Writing game logic... Writing game mechanics... I'm checking if the current score beats the high score and updating the stored best if needed, then displaying the game over screen with the final score and a retry button. Now I'm setting up the block drawing function with positioning calculations and handling ghost piece rendering...\n\nStill writing drawing logic... Writing the game rendering... Writing the next piece preview... Finishing the block rendering with highlight and shadow effects, then updating the HUD to display the current score, level, and lines cleared before moving into the game loop.\n\nNow I'm handling the core game mechanics—calculating delta time between frames, managing the delayed auto-shift system with its acceleration, and implementing the auto-drop timer that moves pieces down at a speed determined by the current level.\n\nFinishing the game loop and then setting up the initialization functions—resetting the board and game state when starting a new game, and toggling the pause state with appropriate UI updates.\n\nNow I'm wiring up the keyboard controls to handle starting the game from idle or game over states, and processing directional inputs... Setting up keyboard event listeners for game controls and initializing the game board with the game loop starting.\n\nNow I'm reconsidering the DAS (Delayed Auto Shift) implementation—when a key is pressed, it sets the direction and immediately shifts once, then accumulates time until the DAS threshold is reached, after which it auto-repeats at the ARR interval. Still working through the DAS logic...\n\nI see the issue now—after DAS expires, the remainder gets set back to the original DAS value, so it stays >= DAS on every subsequent frame, causing a shift every single frame instead of respecting the ARR interval. I need to reset dasTick to 0 after the auto-repeat kicks in, not back to DAS. I'm realizing the calculation is getting messy, so let me simplify with a cleaner DAS system using separate timers—one tracking how long the key's been held and another for the auto-repeat interval, so I can trigger movement immediately on press and then at regular ARR intervals afterward.\n\nImplementing the timer logic... I'm refining the input handling to track when DAS is first triggered, then use a flag to manage the auto-repeat timing cleanly. Once DAS is reached, I reset the repeat timer and start firing moves at the ARR interval. On key release, I clear everything and wait for the next input. I'm realizing the standard DAS behavior is simpler than I'm making it: press the key to move once, hold it for the DAS delay, then auto-repeat at the ARR rate. So I need to track how many ARR intervals have elapsed since the DAS threshold was crossed to determine how many additional moves to apply.\n\nActually, I can simplify this dramatically by starting the DAS timer in the negative—when a key is pressed, I immediately shift once and set the timer to negative DAS, so the first auto-repeat fires naturally after the DAS delay passes. Then in the game loop, I accumulate time and shift whenever the timer crosses zero, subtracting ARR each time to handle the repeating interval.\n\nImplementing the DAS/ARR system... I'm verifying the timing works correctly with typical frame rates—at 16ms per frame, the initial delay before the first shift happens, then subsequent shifts occur at regular intervals matching the ARR rate, which produces the expected rapid-fire behavior.\n\nSetting up the keyboard handler...\n\nNow I'm thinking through the edge case where the player switches directions mid-hold. If they press left, then right while still holding left, the DAS resets to the new direction. When they release left afterward, it won't clear the right direction since the keyup check only resets if the released key matches the current direction. This handles the priority correctly.\n\nFor the rendering, I need to make sure the ghost piece doesn't obscure the actual piece. Since I'm drawing the ghost first with transparency and then the current piece on top, the opaque piece will naturally overwrite it. I should probably skip drawing the ghost entirely if it's at the same position as the current piece to avoid unnecessary rendering. I'll skip the optional chaining check since most Tetris implementations just draw the ghost everywhere anyway. The key thing is drawing the ghost before the current piece so the opaque piece renders on top and stays visible. Now I'm ready to write the final implementation with the board dimensions, piece system, and spawn logic all locked in. so the current piece completely covers the ghost when they overlap, which is the correct behavior. I don't need to add extra logic to skip drawing the ghost in that case since the opaque blocks will just overwrite it anyway. Now I'm refining the drawing loop...\n\nRefactoring the ghost and current piece drawing... I'm going to rename `ghostRow()` to `ghostY()` since it actually returns the y coordinate, not just a row number, and then I'll finalize the code with the standard Tetris Guideline colors for each piece.\n\nWriting the HTML and CSS... Still writing styles... Building the game interface... Writing the Tetris game logic... Setting up canvas contexts and DOM references for the game display, HUD elements like score and level, overlay controls, and initializing the core game state variables including the board, current piece, next piece, and game phase tracking.\n\nNow I'm loading the best score from local storage and setting up the piece bag system with a Fisher-Yates shuffle to randomize the tetromino sequence, then defining the piece creation function that generates pieces with their shape, color, and starting position.\n\nSetting up collision detection...\n\nI'm implementing the core game mechanics—rotation with wall kick offsets to handle tight spaces, movement validation, and both soft and hard drop functions to control piece placement speed and scoring.\n\nNow I'm handling the lock phase where pieces solidify on the board, then scanning for and clearing completed rows while maintaining the board dimensions. Writing the rendering functions... Writing the game rendering logic... Writing the next piece preview... Finishing the rendering logic with highlight effects on each cell, then moving on to update the HUD display with current score, level, and line count. Now I'm setting up the input timing constants for the Tetris game mechanics.\n\nSetting up the main game loop that processes input timing for piece movement, handles gravity and piece dropping based on the current level's speed, and triggers collision detection to lock pieces in place when they hit the bottom.\n\nNow I'm initializing the game board and resetting all state variables when starting a fresh game, then implementing pause functionality that toggles between playing and paused states while managing the overlay display.\n\nSetting up keyboard event listeners... I should prioritize readability over minification since the user just wants a working game. Let me rewrite this with cleaner class names and variable names that are actually understandable. I'm also double-checking the ghost Y calculation—tracing through the logic where it checks if the piece can move down one row at a time until it hits something, which determines where the ghost piece should land. = 17 is valid because the piece's bottom row lands at 19, which is within bounds, whereas g = 18 would push it to row 20, exceeding the grid limit.\n\nNow I'm ready to write out the final clean version with proper structure and styling. I'll create an HTML file with a dark space theme, a 300×600 canvas for the game board, and a sidebar displaying score, best score, level, lines cleared, and the next piece preview.\n\nWriting the complete HTML structure... Writing the complete implementation...","signature":"EqjXCgpbCAwYAipAJeRa2+1vtA0WmBNxd9gaWOgCdQhk3RQIfXo+Y9lH9MUjOB31uf4iLKmNwipZ0CCX6ZADikmORpeYc8+2leXsaTIRY2xhdWRlLXNvbm5ldC00LTY4ABIMMw81qq1uqr7Xsk8XGgwjFojMMOLWV6Anm7kiMJZdgTyEm9Lu1E+e0BaQI2lj3nBXjo9/b+4dxLxXxgxEUAwo54rSm9JiR+ZPfEr7Jir51Qo2l86GcXENJDdxP+KKzLJ5JEvduM21TdyYg2+B4UWxZTLrDJ7949BnG5UClJsJBOH+h1uNzxhdVtCOb6o5waxAZ82/tUgkw02m5adliZJlkFgMoUp9ziIS/mz42k7kflw1zDP2dJDRDTDB1/37Bo/dBhmORGvsvcHtywVw55JRNj8CENyw64pFLWYocyqxnqm9X5LodSNq4I/9cwFnqfhk2czP+kufzq5DMQYfvqk3Lo29J9W2yHyJPTE9+MEevF2cfkqWGzKhjABOtYaZOLeOWZ/TpAHE4FXQtU6kK5mPXJhnKWL8nlcGoxXiVvNhSBwYAHZmWN3+zoztwVX6BPIYfqVYOxF67QYQ/ira3Ie/QLmuqDSDh5wHuANk/Vyj0XVa71GgpFcEu6zx3rV8H6v/o+bU+vB0FT3FfF3RsaoYORLoyGphl3WcdyvYe4iQH+nFg4jklE5KrZfM9NxYzi49WrzxZOtU7/CxrVz7auFVG6wsw/Pyt28Bj4DZGSnfdV8alX/A144JrH7UcWaJagueDyhKaphBqLjcFUUwPmOVtLXvHTYvkwlND9wCvewLqhpAsWfcE0rZ+e+mfBVaoWlKYfA8Ox0e0bISmZUIoFJ8E6C9Ndev+sNUa5Ucq41iS+rRYIrCKQ5dB6zBn3oam3167pwzQls+Uav9Ecro81kbXTqH0ae/q40szss7T2ve8wrJ0Mo4Uik/tcOhwxNlWkea1qATxAp2gaBiA9lpZCCIRv/Cl4i0bi5XJT9jH+Xwlgo5EIq7Ug1jInBYWe1Nl2QKUqwBSU85CqJG5Y1T9rGG/Sisr+RzoUSHiPcaeMrvCyNM9gQ2aAOmnsKKQUl3MzJDOu9d8UFdzd/b/utiSuYSshxq8Wgr+n2XojzjzVfKLmBKitC7RHreTjM90Kr9u8Tv2zTjtG0RQkIlDMdyVekOUCcCLjFlCd36FTISTSmhRzekI1+N91p+BHOtYFbMdLPAPQv1BA2ZkXK3sXMGq9i1sBSr3xex8cUJysRrJdfLaCanFx3x1G9RHd9NIbxuJ5ZD/g93N3f8QLrTwrg1WDdue1Aoh9lpc0pZlYXwIEVpJaBOlUZdOJzUVP/xoeDMsaBBcGeGz4pgQNoL6YMyMAD5wgAfep7r1jN4JDKsb6GwbSCEB/w1N1EB+4hjO4eLvGh0EX5yMsbiPVHy0WMDqBWzgVx4dSLimvL8xg1bicXYr8mAMrJFPZyrjR61lDDffZ85SOkzyHhCwzjAUFo3dEZK8Ej/dpfFAepV8WxEOYvEstNjDCFUrvbkG0LN8J9eLY8te+dnglSugekMWLDtPuZUFUyBDrguxy5La81/9aRSQJ1BRRrvCrCzbt1PMOZxhicxiuZLU6724kjzlL+QaI6UCxMhNAcfKSqw+uCArutn3ZAb1ASSw3GeVoZORdkrtCSiIEQfjnZbCtpNvgtV4rbXaxPIf/MZUhZsuiHvh7HA6nLzOXh11HyD+iumopeTUeiEY+lFGqzOd7RIc87Jp5lfUmc1+zlS/C5eBErQHt1qoxeADU0bD4GB33oRlwNzeVTt7wFC/OLNq5zIjRKSLcp9Tc87Uj5LDftXsJOc7KPSENvQAYt8stM/tUeSgBWDBUwUxN0FGfLh4m8O/7VoUJnYVh+8y7yByhgrNgW3iCRxYipE/6WYJKbqTHYsHgccgoaRQqEj0YvKwy4TGg2MJjg6U+u9qu2/Y7OZkNgx7YhfyQ9PKtB6KtCGSu8ajGmjlUicdfPljxTgMErzCI6MzCO6XrtiQo6OIXzTC4PRi42ZFXseJo50cgEd3qoJO0yhMkBnIbx+IK5nP5N/5H6TxKoQLl0hjitupJijpNjeizhz9rZe4nKvu747d2XlHRVyUoqLjD+3kMQm3LmHg2ff3HjWS16ZwDb1cJwtY6rWN1nxBgcpfJ8aSaivs6LvXwwuf9WL4aY+i0uo5/4aJfmnHXcp72pojmJLN8hoGlZiJ+ZUPaN2VvxpuDHnwm1nfVKoW8Ytf5xdWxcXz2HLiNJsrwiffrk5BCcfWu233rV6ZpKjf4rDfCwupoDIFG5Tvuu+fHZObjexUdr9PgkLRRzdKN4IfdpryES5/GEhZtxE0vhoXU6yVDWXJxQNxZ/mVM11RpRQv+seceHFv4uGpRVuGEqbkP4J5fCrk5reb6nhQAuG0SLex7tVdHazNqyUJewTLBPMQ0G0iWOglwO2ZPUqAmE4hV9f4mstS8ufqfUadCHok4vbpcn/KybUbpZgtOeweP/P9+yLQog4aIcv0grUeYxTy+E1hUmiMVE3z7uMUNGnKESi0vd25hvfwtyeFoZ7+AJGxFgpUALdSjwYXiUStD3rNAAzTGzreElh53qQN/eRGs9FoenuVc3UGxw59yyNDBAuruX1VL6ok8kgrxuTTEWJ7JB0SnaAFWXBrQQtgC/+bqJAiBB4C4CfA6nb7uKYRJ1vNmXMeKeiRBiGJ+5NO/Q75bJlgj0t8SHOb0AOrdqFT2cE3PCZGlDjxiF5aAFm9UVgpyhdwFB9MiCxFvNEXuswBgtvr10pzHwMADgvQb6Isv6x+Fsj9Urw7IK+rAzbrWoiJFjHvJ3Y2ELsUe2laP7EWvDUxzwIUX9LtKosV0XKFcC8Er+wv3EganxX9Opf7g9Bdz6nckKmbL9roZjFZxbH2eoH6T/uX+iGZ0ZW92yoBhC1mumCcdSliVcuxr6sW+2SHIU7ZebY0banTP0tOLRmLyKrD4KCZzyFLIfCNlva363yiEU23F4zEKJ/Za3qa5Or22QXaG9tcTnUT+BFrK7VWnHRtBn2SiFxdasKILdkqsoAgGTu0/oBsngFIBnFxJql8eMdyfMMg1qCYU+GVSh9nk9DCeS1TbgAjhXYEdE7uUwLz7AhJIbTXijgij6Ir3883XAGTsc637HilzQsgJhn7giRYwoiLfy6dx0aKdChzuH+/791Rkm8WENgYfXWlFZwXL/ZcpwPirJX8OIDWOz5ZIWwdRnKu0fe88q0KPvLTuiT+FESCOcm4IOfHQVU/9gGYV5VCfgD+yo0LyQ8qvEV9BcBJrUy+91si/bTQv+5cyDJtUhAg+9oOBK4kI+tJZvd13bKfxN8K0wE9jbxHYcUWWTXnh8bEiqNWHFNyJDqdexsGMf4xgiTvLZ0OM1BhYxEaIFWont0uVFgQmN15jcNJbrpchm4oXLoQGJpMSKygTOl8i9EfpH6Ny5PifLfMqC6NWLWoPHSwTMmiiszuDy5n3jqViF2BxCShKVK9dTcp9f2KSOjw9ojMdjFhoklPnQZat0TQRAYx9Z2JLLy8AgqtGsJtBxXZXFRyFK3u5ozROUEMog3UxZ1clUN0YxZZpIMsfgSEprhvlVzAzhrvlGK0HBpIV+lXQckFpHYR9MOUwjznb7T86zeK9E+SqQvcHxuZ41BplQEDgqaOQ+nBLWLHUV6QpZzuXgAtVRMHt1Kov9BgrYPIyho8fuY0WIM8r1E9Rco6bWoFLD4RvH4SMiqGvETwCnoYF9yIax5e5fRBEoQhCnERnLwONF2lEnVkm9wJJhnrvKeUl+XtRFiquDOOIQWfnBQZdxvbNr7Q9sR1YmOV2Dn38DTj05guHvt8EfCnzEvcZ4op6m5EUxjtFPu6sqfaXg+z6zjLEDnXJI1Is0u6nIW4NMyvE81I4JxYmfXCbPUsra+JD2KXKR2CCl4lRXhZXBOG1GjJusMf9Xub4kEs2zC+BqzRMwdGrapGlp4CXd1pHWb5HXmc8WY5j+/RfmbfU/3VSBsONIMZ8GTZgDypoDyRlzyeGxlwur3LDl0dOmb5vubg7DZLfwKxWX4HJQKaLVUMCv7HTM2VRpZ2h/5LXraFRXk9fJvfmVMVJ+EDH1ZwRv61JTgqQo7U7VZ8pmJ+hDZfepeoI1R+Qpw73WzZaK9nDrH3q6ncvFyusDXRq7I8YjUORRts8p8urMN8yACdqnQxVr881RfY5FeAnM/l2AUHe0cz6fX1zruX6T9ObUJ2Rm8USJ7/9x3WGnSbAWSKVdzvdsbViezgOW1cusi60W4b0jdAghArO8sfWFPq2W1IovMslvAKm40GEmHhpoPDX09hDYYkKkAfxoxl5a8iZuUFr2Ftmc8PKkQPS4yleEcInyYHxiBfH6d+ynqzwHRp6H3h2NUjmeEfR7oSCG7RcQ23USNOkRHUilt3MeR5otiEg7np+Wf0chrDQn+Q2uICndawlGXFGs/lR1RSmkP/+3bXGPcuLQGUwTLnECdRAs0hHMJJbt9HvMy0Gd5pNs1X1/uCeZoE/JdVFgDnq0RRI9OBeRShePdlmM7BZR+CyqRuuJlk7eS/fEY/ZFfzNwsnlWZjxABLY/oV1YN0Icm6tGXOdTh6L0HCcitzjRlvex2rSwtDE/dlbhA2zubcKV/f/Ii+Snk9qiQ3GxF813zw+EqHs1wx+/UCXjlLob9o/80VEb9v/g21VSyuu2Dp1oSs8HJV6Nhhr3oSQ/ZH3pLnG4RuPXdAA1NjwstZcyLR05IPXOWenBawSQmkgf99TAaig0bHFTcUnL1ufPEvV06UhbNHepdduT77Uo80L4RqGuOyud1PchzBsO45qkvfhggNA9LJxGYGBaQ9wDQST7gN6ro56mDydvjhLksiqpnFi3yHfvWAxrBxNqQlJYHfak3KYQ8mk/35/6IIBHN1vKTgnRrMcWIGihbgc75/441Padw0XI0F+7DF3YmZjPEZ+EIZKFt6AtQAP53PAhaUmV36tubXPryIeVkq7cs6UNjVOhAKUpvZkVJAihSzLi5Ui0LWDo3KhV1FmOCcNNBZcNNplp0k1TSz424/zGIFuN+tVBk1nRgrw/UC92vvZkvyjhgeIJy2Sn/zTxZq35aFJRoqMNe2wjdQ8WqkPlCs5eB9NsnrhYr1NCd4cDt0liJp9wzsqHvmRMqFA/BnXGIU7lWj6l4dnPdJ226bV1i1K39SfmKIzQQouzDjZjcdza386kzDMoPPM0+DApsdYsemupzBRYZECAU9yVHHGbEZaZRz/EkhTHpwRNH2TmuOXGqMuRA/WAOUvyFpqZHmKjNHzyLCEZuszwhph/vBn7zkAhNTNI+E7u5Kd3iWEJ7S6VK+CKyj9y8s7lN2DNcltl2BTrED2blsg1Beqy2dubTWab1jH93/yjmm77wjJOHVMRPmyF/JbbrgV6FvONASWklnfqSviSuCbnMOPDPpuqh+7zUkP2UCBO1GAn9JgC/V6mpJ6+1zMV0H6Vumwz8N0I2nndU8vfc8ttxgSlz2bZ2Pc15w52Dotszj3Suj5ZDK+LJYpdfat4ujy4cHoXyMgoHsUIdeIJNIaGicgIHsyK/dO2YZGOiiHvpeQW++vCKV7qRHDfAtM6udQyRZE+RlhWwEiYi30iBu3pXlXrYZujS+d/Wxn80BPVQXjzgyyUtXxTtAgEjjFGYKRpprKB/gGbIRWRMaHj9s9Q4eyl4hIXllnnv9KWttmpaN4oLNOrFWOhn99msmdP81xCQ0Izo5DCmOd84XqsxOthoVeRclp61ihA9bFs8589IRy8JTPQlJ3Ov7M3i/mVPcQ55mVE86YkXcw5j2ie6ZsEC5TqPZM3YJH9JEgk59IzwhhtiL8RjhBb6mAo7nbbX4xiC67nT4a7B0gWSZMPcAbwxOGaNQ8l/3xmvclWu2IDe0emn6jNswqxykF3gTeoti5C1O9m1fDcgmDdnRZZy8Hx55HBd55PkPdwFCnqB6+8jqZb+QAqmXVnPhk9I8DP7TNGyO9lyTvYoNdJFO8ht0yIcB7ySjhYHqNZiJxF1FV6x6POKceYkdOXctt8/VN7GxfuJtCQfq07A6hXu609B1C1pHjXuSHYE5BP/G7Lh6LeUhgHe5UjN8CRwMlPts9r2vfEoF9k50K47zwCzoZTSIdgh5yWkCppdEeCYwxRuOvzUn9WGKA+6PxMv6tWyoMzwKMXNMb+jIVUi7s95AX/u5ORhSatwMAtCzjfHWxa98wTN2DcJvMeTJhb/H+c2H6jxj5TyFXiB6EnTpiQs5fLCEuCzFUJ1V3jfCubNoOBx4jLuNZnhawKoK+IIkbr7WuqMpu05QzK74eGX4QOqouNMvMQgxLdvVggd+xC0Mmm904BxcY5V/TzqtE8z/+w4panK5d29scCEhaS00v6+rOMoNatVzpXwV1Nc4bukmI2I+OB3hLw74AF/fhyIeqE8X+JpPw7odnAi7uLYCoLaHc08/QuQUwxTGYGu/ddIWsPT+QGU7lRsQh8h8ANPeCoW5m8cuVBe8Ho7h0Ot3dIL4WgxsBCp6E1BM00F2Nxu+IRiHxuS6TbI1/KQOQxPaRFamCrgFEgxxto4KNKzc97Om6o8q5O1VtuyL3TAlXrghiYHF5MUhUOf0lPtYjXlr7PpMS6cinIG4glSbaErMA13uycs/9W/PqSTsLEEZwuX2KL04sin4H1gEpTfivRiZaILfTwvPeaFjIKIls/O4fmmg/TZsAAcsn0jf1QAEHM0q9nnqZVAUUNLfbQccTs+qNprOMhsJAPhnGLUVw1AMgT96TpoQNPmPpM13SnT2nYoqTKffDBf7OM+JhfE9aawOuAsqx/Zm4F8wSqt+pvjmJHFHgH7WoRy/rdFsjZwXKgFJS7Tiu5WDMqqze9CPHlufugzMPwJL6r8nVontx8MB2UpoJrjhFQVvoE/GB4VwkHqj0BKCQgQvROQV4eGvs6PD/LPdPVV7FdkXMV6OGxsA37oLfmIySEa+1N742g5uNugmt5CKQxRLxlkxL3hEeeWRFq86gaWu7w6LsRuXIjYtQ73FYdKv2BlQiEsnZvyzLTI/MsLY3M4YIaDCJxj39+RmoifY7jtp7fhC+oPDvOdxHHCZ+4UkrT5fNDelcFvIr8VnrIxMt1rZs71QpPLpeSjMDOVMDlnW4Aojz8HhMqw8UsBQupCjxR8EF1qoTY/xKI4arLoWCnN0OI+7yhNs3OLtFWFv2E1H8Gx856Hm2CNhflnVlEzyyCgC93xIAXnzCZeGhGrCRRMSKV3grn9AD7HCTmjsj7/HOF3gShuOFlDKOrxLZ+OQBctJbkymLMTh/bR+U9hKI7Ogord14ZJsc/V9J8pDC9C6mesSkj9K2GxbU4baJSlEMpuUttfB/NXFd+YUb0otdl+zNuyd/P8vPRPqUpF7bUQfWa5Qc2MRqF2UtY5CYc9YVq8E1GU403MsBUxhcskv3yGCHL/Wp5BpYD7oXzGmgArVaRB7jp1UR3HUUnLIFC+yCx9SVr2FthHKN31e605Pylw5rEcD9mkSvVfTnmrJ4g4TmNe26G78Sap8OCJAkNoeI6O4oPgbwSsqFHlLdowJ7wRCD5WvV55OA2Bx3ALgZjIpfYESJYRLmfXHXgWfh/vPegu5DvKadJD26P1vLnzxXcmdUW8kVLtRuGLqtOOsrp84uceCPvmlAHSlG8cUquuFZo2Evo6vLkXikvM4EuVWKNlspGFdyZb2UitJWzpndNy5yl6dWGg3qM2cTuWCHbjlfcDf/jJLlLrNvgSM024bZNwTN29PtVtkZbCEFvDaZCHAJL/C1UfZG9tTQ3psXYqCSToBoUZv976IRw+hjcc4ATEzNYa71OsoSYz4dY8c+BpzBy8zl9CoS8WZ4aKOSlV6+wxhh5tP/Bihw8PMNZgtGcAERFtD8lSMUTnH1/o3UAJUXbcQpFRAZQnxYL50+TEv/pcmTVi7SHQIv7YDlEYJd4QW+8b6RAHlNdmcf2is91FxS1IpVayokilIRG43xBuMqf2ZPWOi4B8fUHOueMqA6JKbL0dSm+ryTojhEM7CERsAlL2VXg880FydWoo8i2jUDh2ObJtc/IDRaBirJWU2xG5VGc2unCKcqeJxEZQGPMyGRo78Ykfsv0+VEbdcwsk5DOu2HHjKP7EHNwYD0ruTwb9baqEpG3YJ1z2XgpCcYllGNYOKnNmFx5UgfkB8wTCd9b/1g1MdaCXGmKgoaJZ9NmBrlwwBrfFOmJF0+y5CQnNRwltyJ2kCWnEtmN54PUzjpPRvQFTLRijiL5BcVGEt53oBGupRbAS5WnhWFUcDE/Hrddc0TZovp0ugUP2Ur9erMTcMKN508r4fu/Pz4OXKpkT4ug3KbsOcywdBaFJ57m9krEZAuokZQ1vy6/Q5pYSLk5kt7a0C+uJZNK1lpKX0epeaguARhNkP+M9oCgWc2NEhXeWw2L99/NxXOSv5/zptdQR6VVzZuXPtEkPIC28MegVADkFVwwL88auDicsCGnrByQa6gncOCWaocWN4gI5VZzM6Ekk93R3YwLZi19vK9ZbSqvvzG7Z+sef+Vgio+0iwflvHFEjrC95QSE+VDouY4rhHxCqQlRgiuj4bArtn3jb4LJSJlmavHVsOZjFGNeDLaPM8ZbbzF/CImuCEoq1ExM497w22+axxXt6q5GhilrjrxDrrQP4nY85UslUBddSOWcbP/rJ0jLDw1VI+ldrrf7eymSSWbBNzZBud5ltW+YFybOUq70kbUOBq7MuXa7hYwTMO7RgmZyItKI5cMuUzhfE9jmjNXZv5Mt4VlSkaWvMp2coVcz+GDLlMW3wEBMqF/Nh7Uwc841QD+2wIfp7jbdhetgX3lQOmd+uKNrxkbSyYjIrb5X7ZyY6hCz/qRziBA6WjTbRZXRfyyPihQlSYBzpjlZ9IlzTL38AjuEMIfgZzHV0qXKJ9IV0c2b2ko+26uPfKb9CseB2SaERDxe3K4+suEIyyBU0Osm6TEsToKAts8m4qT7H5NX5KognjEImdH+9GIoJptqySENwhw6HflR2wkvaAJNZHnojJBfp7XAcZxOLaZL10e2LAXLU/qvOWeze+NdXoWC/CDOk/UjBj2q3ZrY5o/Ps9822rFzkLrpQN4IGodmpjHCelsSkmUaHwl5/PbEdfw4FLA6OcqxlGQNyPn4UODB5OYXQjAZS3JtHFfgqoPzzQOztK4TtSLeS+8KPGWqxCJ6xgRB8RWBXgzgLzXFMaOTvZ93ywExQ7wy/ZlUBz+jT8FJdPDNacu5CFk89uDwCFpn2axfaFVceKC1Mc0ahJAVgkK/KDGyIN5Bq19lJYhqRbA4j9U0sHjuegm28m7A9miM7B5xzL3sXkRaoLj3d3AJUeCfHKbqBXVpo8zBRT/c7Z1aYNuvmEijA1j+S4eQhsCIX1uLYDwu3YBQR//IIu/reZIc9/hLmnMsWpqYpdzuAg3SmcldNok0vlkmkiNegGz2q53uW0V7bGHhK5w0j2Trv88Rr1npG8MkogccZn2ZJR+b4Tbh+KbqD+oj8EWV/ny4JV8P26pwTimURBc5O8Z8Xlj+DrQgXApfoEG+9PDTu+aWVeV8B5B7QFkdY61l48To9s4xgp0LMRuKUJ6x59Hi9oukooKuybUUZ4LNTZjx+rG/jjJzzbAuDJN4Z5iODKw28415aHdPZbTrvjuD1ks9dQU6uXO1VMTL7x3UnxaL7uYQsfZlzDc0Qww/OGsOtR7RhJ4nPFxjoQFb4g8kCz8C9a0kW5uZDNfCItBghDkVhfi59BkGLdymNxkT/tRpMds+WFTS5YM9qn0jFUOEasb/OsFLC33F3urUkBibo52MP8USlDfwENcU3xXMGYzUU8/okjgqymu7Dzsx8khRi2/bt+xvvUzbvvT302ckyIXHGXxmWzSxy0vQvELUwSvnCaIdFSXqoHiFp8CoH1dPM5p4bd0ZVOYUNJ/CB56a6FCFKbgVFT1TRYwIvV8x9xEI6a5AJJj3EuCjnqTNtaTU0Sm2xudoOt7yS7HLdAR8ooci19c9PC2BE8MEuroJ+yqfOpgmHTJHFRW4qQo7lPPYJaGVj/f2CYoC4rXe15I/FHqGm7RMpYBCKsF2TpUzBufK5LdayP5wj34S0S5Y538cHmJmepl7Rx8tlUC6Gt8ruKlED1v6LybDtN6lBbIQF1EAAJc1h9CkyKJ9ycNp1VeXx/JhlCeBUlLsvj9KQFraKZFTtUuJOlOCzOwsUyRq2h3URoCscmptKqQ1baY9I+ApoK2mZtT9VF6obmZgtAh+ZiG6aIrVl8gBYjDolBWCFiTlBY1GJRIECT8RMdpi1g7OZ07+66/dPD6km2LVx8RsqTCNoupE9n6OatP6zIvKAWWKu4OUX8bnGVVgNbD91l7z5TfIdUgzmBIytot4rqPEm63S9Kocp0oNMuuaaQLWrXTsBGcEC6qjNloHAD0eS7iZJTVJkyCe5KMkTLGQaAq0EXO6Mx6Uo9s9Uy0Dutc3vOE5vsRsqyuIH2t+7awatiW28XueBneQGCsq3j1esPtBmFf0suPBTMGVW3rTk4KN64rzUm8dNMtUOOGJDkUvf5UvrxttHf0juCJqRHqk/PbdrGA4ADXnyzAzt5rFoItn8qYn47xqzCXdrwrHGtoHlfAZD611FEXV7tNGVSZ0h4KjChsuIUIFzeJw18BLmYNrorfI+7v3bbz8oIvwdeZa4/shA125OWuqoUwWFVLX7HeqeHpAl8XD74uGrlZa/Fn7+bYnsIEIRj/nE5IqPGzQMWLs5nflEHg/mpwy42m77EAxrN/6NAtm9hxr8nW8DHEXD7BHX99GDFa9r7p/AXi+yTi6wghgs3rN3k8snwxNokSGuW4vKxSGaXgw3eDlVM01VewGE19NkE5MzmPy/H9ZwJDrbI21bKLOOkV3Pkz8JQfs+gjiXf7NyH5dSHPF5XKHPbHI2J/nenzEPWKMeEwwQ8BAvwshJfBRRUW5plCeIedEX7hDUSgIYli+ij02XSXT382svg1fu7QfKOQxxhWBRnTAevZ/7tnOTarf7AYGEvDNYDLd+BbLVD8lMFqwPPIzosiyi6WzM2PgBjES3HDH0AYyCQrxBIxZyQQoxaEKgBNJYMJ/3KPVLKYaRV3nxeF0DQfY9wmbSnsdOndK9o7e3Fx9BnamBqF/F5BFWdC/KgzslY1t3Y861ohtqI92ukFsZEt0TG3y4yu0Xprh+MXRA1eyZCLZLCWw5mghGyJjrtw5ncBpU0TI8q2/ejmKkTf/Ts0ljDtrM5tPS6Bf4vF4w6KbmmvZi35h3vc7PjuDAKnVBWn+LYpLzr1G+pdSAzM+7xqNoagpbcvMqsW9TxdCM/C80NDeWTnA2oD0EN+ftbGMbj9GKjfp6d2uPbD85BhHMMhHHNbEePTaqaA5qklsbqXmTXz6w8yuJ5laOh87VgyR65KshY7n/JMvIjvl4PPvhvd2SQ/4P4Oa6IHHFGrXibrkKVJByjz+cULBdipDEQcrUv5Y64fsOSJgP71aeT0/JnslVPlcTOn1aF9lPcv8AZDmSqooXMI9mJtT396a4OLJZ4U4Bh9bPo5B+3uDQQazsniDr0BNhaBUW4jVLy03S/4bNQjUhha90qHwpoflZAqK4ZGFSSLCdc5h/cRnNliaYeCrOAt56/W4H/7aso35dFHFLnWLdWqdk+SR2CmqGJoSFXnful+1BaXc78TZUK74pOFOcJvpNLtF1XuCizpI8nT7Aqz+//47nIU3MoJn8kUheFgZ/xG/2bK3jlNw1oHs8Rwz0OVctcs3MAiZopwznC4UN5j8A+y3D1gZNWjdyqGPAWxL3yEkgFkMHWL+FGjVvM7sZKrn+LCyT3p1e+ZyBroH6b+MBr6NGl4YgILrTAl86eHMdUMK3divpnZdoS5RhjYS0J+vF12zAtC3nVlA+3xxJKafUPKZVanSLOEQpQ88ilSNW4OetOEml9qla6W3qyJ+Lwn6CQ0bPFUOa/pUJJM9RYPZPZTzb5H8GgznjAuFPDWDyP1CNSSEzzsjWCFYgYH4KGQRC7Ej7dSkEouyZqJeACSEXWXRZiOPfJYsSO3EQ6pfv/PskCyzETFURSHE5lpqxnu4wajHNkRmi/h2B1de8Fh/edbDxPg4I1i2trzxmRhbB6Nr8++pnNhA1zLVGMz9fiLa3uT55gAXF8An/az4Bj2m5n0n5oNqhLJvRaxdPH9B6uOJKdubt+8VlR/bbs1dM3q1/TvJdQL5pQu9q/sIGCiIpFPtk3pO+ia6Nw2gZAz4+BoGBb5b9+9LobzpyXqj1Axtq+cmSbl0GgNu8EL8mK97+/tQLRxt812wJ+DeFpLW/YSX4zAuwABdTMHAvwz9asWhr3KEQR+ZVOEQi/OrXiGcRwh/TEEY3zDvb8Wy34zXM2xaWku+GLkUbfx7ri7JzJlltV09+6OqarRSSKh7Lm2NiFvefF+WucSFVtzivT0SKV4I/1knXP6K4ipz+1bEZebsUjFLd8ReogwjjKw7py9cfgQjjQOXCyD7PzMg6oucgzrqCXpPkWJKGRD+JyX8LKrWmN3HQ9Yj32/l78S37vua2/b3+EuFY5uKowCWjxbN8/OTdnWLfboy3dTHw8Ok0JImheq6Y8Fow53xzJlDoxHHMafEAat5zMjkv7Y8srM/PiSTwg0MAveSide82E5gdxreg7oxpUOU7sqSMNTowSliO5drwooWXERLCz4QK2ffoZd3+IYcFqhmDk++a0zyrmoJa+OlPWXrqTO4MN/M7F+mlav3lN7fX/8KJGTMkTSPwCy4Ia/O5E2+IE5XQkuwk34wpkHap6XdgC4TpZHXqBCtbgMzUabgqtdJUM6pOOKzQ8agl6KXQqNkn6EnmnNwJ98oZnTpYTFCjyKxmxHbjBVzHDgta3HkdP8HYkBfw2pfdt+AcFpS9oNMFpiuLoBoKrozyHbG7fgYxMR+eRcshrUb0cybrxaJIwSv/Cas5k5C075FYYsfmr7FhkNOdiSgafjfaku/T/25TtEGJvn4lbdRtOpITyoHNyBqk3uH5m8WdXHiWuK37iXkMzBOQpqWIg5kw1TmXvmCOJ6Mn3J9fVkaNVt0qB875viCo6kEQMBDJE9F0Tjz699rS2JTZvs1Yf0oAeGmT21AEReAYBGyqVL0IPKEeoHGNy73ViSRfWsjnbPer1FGkKKW8JiKA7WQTiXv3yzak405R7WmPK73anveexVBjh1GgljyCrvzlGH3sswNPlflBRd9KEtb4BgTkdta1jx33/IpNtQ80Dyagi0CBiKMhGMWAUvpUN7qpw1AGevcc4fWwg/R5/FHTRb7cRnsWUgT5oMJAkzW0vwkCabXUt5oY8EBXgNovHRekfETgq5G/Gdku9xr0dACaj3Ux5+eo3m2cOFKTAs0pr1IFEutPJGOXAnFhc51+G2d2PJPjViMrUq8mSI876vEsdM/7nfSjvJffEr5SKBCo3FGqDr15hfyVoFp0eIjkPHpVDgXT/KyAJoCeWsMgEduNAF2PVKzv8e0Vb1Zq3ROkE6ll4726Oni/Twz46aEv5geZ210IUgo9KK3+BbKJaldILzFNDzSrHMuEd3fcVBWPe4oygdoddzGBOnAzj56yihxpNh/SA9RdnVMUcyfBqQ+BWE/hVqiVHrqvDs4dY9g1MV5VTJX5ur0uTyPONfhb3U4r9Jy0iLCXNeKN12h/2ZVv0wONV/o+1dmugoL24/AR2CSuZBGirkDLB4QJo49CLPAUyCt/hXB220eH7GsA8ZcoqLRxbpAqTlugFuYNPrsFwAq+l3crfOjmNMF6IYJwhGZPIUEzKZ637ZlJo+oZqmnU4lWxK9xHLx6tjRMluYC2DAmFCIdg/17A6+yjfh3t8umVVJo6aC1o/Ty3xtOQJmeq783ZzaBXpAaiNf1UIOjFmvEDze0DVfY7WGiC1ca9LaBQtLUKUoc3RCRsodkKBjM9JyUaBKIYpoUYG57JDAIGa+cNeIHKTzpWlKwZKb3tyZEwGAjXL2oZ6Xds9wQLHYN9RRIRzOj+4OjQ4sg1was8I1UJu3d4Gva4eM2tS7IDFPPO5bFquwPcj/fdRzd6Qg6fohr2Hf9pV+d0sd6Ttc2kwKEmROPK7Xy6LwNDgJbCtZTuWzXuVpDvVLMMakuJ32XcByF5PxMQogSkXssY1lUTbosPPSSuunI3IdQklFP+QGtoab587X0rqKc1Z/4NbrzDBj3uERxDJTt9/oVJhc6/pWpjputcKSSDC32XKBnx64xAElTUNOgg6In7daLX1z1ZNGntoa9WAq6fNh7pogIrA7tU23iSerWWmS+V8TSk/Owo3Ou+d4JYe3hd1Fyuv5Bm6d1d/TxqktnyIdi7IJKYkeUulCRkY8CSr/pAX+DZBlux35OVK+IuVqQa5+Cj7MlyFlb3eGXrDE7B2DavkFzrNsZkJj28Sgxi0lUaR5MkwfQV70CYVNMy8kRls+CpVW3JZ9E46fWkSEjBWHoyaReFXp2NBs0+7zuK9wlZ809SUa1yQCLbtp5MGblHx1ili0638CsVssgtWETdLjZTTjzdKP6L81NDgZuqphDDNleklJABPpIHmUSJzdzmuW/e2RHp2akS9Pv9gtZAyqrzayQrW3QFWIYbcnFnpja2ogT/eaepvYhdOPK+7b9pe81yAgEr0THrSNBOZX0cLEQF+kt3jfxzGQfI0a7FR3NQv6Baxfl/JsOZ38z5rEzPN0sTlswmGyw8tfS64nVjFe59gAheHH6KwYUFYf1ycZbM6X/oqtGcCAt5eVog8sG8gVDWeADQbshME39+a04OJgPyWkHR5WTITNw+7pksYQlbgc/bsXpA4cwYltoaIy5HQd85Twi8fmkWXNA90uk9iCIoatC7srFpUu3be0t7Ec5DdjcNXn/qTpLnQ6KTPwp1CqPKSL45m3vZB9usXu5X8k1JPR0kszBxjS8ZhjFrzMnqIDR7+jKNnrOqoNqqyCNmqwJTPAiynSTDOpaMizC439C5IDGD1wD0UWpnYztcSpcl4QTPET33WKGOcVNVM/CwhFLRTzGL33WdRhmQoFdRHPzrd613pl9MKS2dAtWH8CTtnwan6bNiJ/mV4aDAKNUflQ5dXCOMskUSgXHDzqJh1K9sIBnWuk8Urw3i9zTo0+9vMeGlPnq0nPFj5c3DJovYbjEPs2crHpiMHcuW/y5tx1ExvWVCCT8dYJLCf8qqM26BvQwnBv44mzlG0VX/GdPMN2xEoZY7MYiREwJOtSjNfHT9U3Yy7d4vxU7emuTYtJ+rx5ZBJEoWOUR9UPRsGE4tG/cXyHaLYBi0cUA1IDWYI6VXXv79N9hmnnTOSNUdjZp0b8iuqg0+KZ5Iy1+2WU8saGs3t78JfSQycv2OdKfqvMktFFLUppKqvEiGzWDaMOo+JQzkiYL9rDFJjYekIGadB0slLSTgsI2nm1tPD0m/ifXWxx+XANU7OWQ6Ej5ucB2a1gvup1BwDOzfVyRqmgnRBpp9mfgrkwEU0SMy4+Ukw3GOOVm+1c4LYgNxL5IX9rwTvPqw9RpuSJJkz5VutkoSfSHqLtGASxetH2MzTbfpDugYry0hux3FHCx8y89WQbHDVc1lLl++JlTx+82t/nXT1wNLn6PK/3AbcKZQDTg/9WAdN5bHQMqXJokFAD4qOTRF5M1nBzWIvmocB/DVW+ACv52eqkbTu6BiKHC8p5he+dIPkwhxAG6afLDRNi/U0w1xrK9jzepMHSvZy5TevAe+dCKa5U/doe6gPD7UCBy26KbKoaG0+qV15WcgQKDSBNxkuDaaNcFDN7mV7DL+cGMR5J5wzaVuLxxshOb40eCs3fHTYDr/j0saPQf+za3L7dxlUD9ak0Rl8uQHd9uTz1qqyVgTNBXxzcNs2ixMAr75omSxdG6dFzg2hapd5xaaMAtTCRiYAXc81wZ8URQQaGxMG4B4nVdCjEXd5GHIk9dQxq+OwvenkBhtWgtfd3oQTt5psJm7YZ1/awk1HndMwd2CyRYxs0haAjGpHo171Xyy8OX/dMw//jSLICuLW/ktO0JWpsm3BI23xaI9T3QX8xcgk6RZWES9b6N1YEhnm13yLQ4tvnlq/YkwDXIapO98MkAmV47ulk9BHsN4HDpUCQJCuXOrPfarxwHEHQnBPuxKoSHiMcf848/matwrUJT/fXAPlNITRVlTJ+gqkWnR8LtWEV0t+8WXhPv5rceF/OzywWVUPPFXIDuWoHoVx6jvpN6YimJ7j0/lV8PacvRp2t7xvcdh7/a1ZEN2LI19jDt04ESefBGlJwXyLo1Gjxy5rAOamz9NWhhXzDWGj6hCDeJpAxu/RIdBz11Llo/+5pcrYxEWM//83rr7MwrGUKU0r7r0/kpetNXjBasSP49fehKQsJg0A/IytWjGWl9vu8+M93b3NbzvPBcNmryD7tOFtOdmaNnJNuj2J4D54poyFNDxc1g7+oqW0Yj/o/9HUZLjJ+aCOBEALMSFx2M9Si3+XJe6V6O5CdyppZcJffVnpTyUabSGiMeLqf8sF1su6fHb3y4UhuuAEB3zfgMuyyaSwD8gjyAz2sr7Zf+nfcjJn+qMY0n+D5QdC28F62qU/iu2HzUTag6BY2FHECBtFflBNmyb39QAw5+BOKlDZGM363KZoGSDp9nDuqNKPmAAiVkBcvgHwW354s606fbwI6Vp+Ag0fDbmvwOWN0nJY1qpRHbPNfDMdga+lBUhza7XCiMNefyVj+Ry4q6fKscGV5xpW5hUvFkPW9cMiWtr3FEl8Yd7IouGN54vcDBabRh15VvLun+jgxQfesZv3neKCKu0CNWhS9K5hipL56v7HVq37EPYrfF53cXcol1HEGmIqZcUws+G+RQBwjkIaHaEeHspCIg7rgoJ1y7WkEe+/zXqkSAVsI0obdHNI0QC212XaLLa7TJbrxV0m8rQ6kpj3+uo3ehbvfS62jNj0QhBos1QaJA0c1h98fUWhxvBRljKPO40uoO9SMbjSksZCgag4sib7nhfXuieVBvPMCU4wOxzxymkqFJI4qZcStZCTzHj03asCw3SVyH0txMj9XyPA34KZo/HRXy0oXmmQudcl0F6P6HIKq9JNoMr13ZG+WUDO/nlJ8FPT37Ifjex5bkfhXqyxh/c1Wgwi4fFBnhFsqh/15N9PTaN3gahsqHoIO6k/zb4GkSLM7gbY4yYhBM1XYjjdKjc4JCXreyyi7bqMxYXnsM0WPiJ/1AvEV93maZcWhTC7XuNiJvFCSSMEglhvTO0vMmqyHRhRktNzPgYbSS1opvgtzw5voPQ480gB3hHEZmeUPVzM7Hv6kZe6grUhrtHSqmI8Xx4WdxE+YyEAboEyEYP1e2lbqEt7ZswJaYrNQwEnmHP8tOxNQwiDIfbHcquLrSEDQ9QqSYLwnx7LDwxurizha9D/91Q7yYmZFj8eRPAf+k6YWIG1T1SJS9MWowbWsEnh5p6bCwBV/ZdXNFgt+UIxCfLKyHR1QXPiJYYSmrBKoeNpujOuGqgMODMyYjvaQnOZ5J7M9FaN/Q01hAv70WAkvwRfFffz4nT59lixf1YRt1Lzp/a5EN+2xinssYzYamQiiFVYIKyN5bOzaAAj5rHo2aJZTcgky8r4E4AzLWBzJmI7YZ4AqaONMt2FlcshXiYo/Cz7A4NpM8ONEoREvWqnMXiXtHpKbD2d+xXz+SYfKBzWyz7aaq+5xxF+5cdq7XjqYG65L3tq0igYvI9Cx6d6pODxf5yrIEuoYy9q1OUBWhV69jTkVlthtL8J76oeGMQ2lE5v4ldRxltmQOgcXuD5Cc15xyiTnOPPZIB0AObPl3xZeLjtmzukF0+YtxzJG2Q5xXX4X31uNYt+ihdtm5S+edHRTN75VMoX5shkC1Xd2T+/QGCrqMOc4HtC/nvzq4lV1EOuAKJAi6AmT9/Fms3R6tom/LvK5SCnHXiKzA+mqKQ5NvbbnBGoG9g7J3H54y8lB2sQj+7AcOkNxxub9suRifVEXNb3kiayCQjangNOSRE1NIzf0ONUz64Ic3qWIlwpAuohQ9l4y0JHXdt4o2esUwkLhTry4k23lnKnIKFI9Auz+sj6AMIObKPaNwFSZxUlgQQ9XYZ/TGT7vJ5xU2XMCHWS/O+p2/6PkJJyXyJ1P47Lji84/J3PYqJ4nsuxvKz1KbTCUAosH7h9EmisvMinc3x8GCV8pKW1CcBhcdKJtMLuWhnttBzurzMyf+R5620gO83pAAM+ZIWdxVj0lCxsFl7m7doj6C5M8Fk6tOQgDWCsLpmosL39hRzbYsJMhDptxGhJ5F+iP58i68KKsPitS1+nC7DEhwabzi28I8rQJuWm9/KZQd7wxqSzL71r661tctorOCsnF3hPsmsSaO959PF+CKv6qShtvO+af2B4S9PO/0Ce1w9RHLnkRDirpXcWJCUItiVyNoQiceOtjW2f3+SY6AHWEG5GHOu7zpVNs+icNaZTOuVQplQ90oUZlqYtff7MK57JwDLXv7dbRUtm6zrnwTXJGP8H3R1USGtbgdVSlAlNp4flagwOjmW5ykrpY8tKij5vA7pvKNyzPfPC/IJvTIkzXNtSSMNf3SefWAMh1iSVUxBPv2JNev3LWncbQAlVz3KbKq/zgQrx/47QM3CerSgTAI7Pq1iSTsL/ilFduzfsWMEfjquAwa3KI5S/j7+pmo9xEmocXAQNt6DVjSFW6DCXFzn45VnfgJ1fLUFhBLeFBZGlsGhAYNi1dVjuxhCb/68CxAdhj9y1rahVj5DFeWGRo0EWqwFxHVqsZLKtuzfSXdTDAyHu/Cqw0iybceftKJiYfNU4bxXhCmTBxrvu7FhTB9zNZr9v48Oe/3sIkCMwIx1LFpoAEZ7JVmoadrrLaHX03V7FDDIfHmeoG3oONOZQlFNW3C/SnAHbk2gEpFA9QyCDS/vQVV7DH6AiDx0A0Ov0HJecgacm1mO+2RV7Z3daePX+IhdxcVRWHINZUsoPKvUkPCfgmqtW5J8nLKSHHj4Z5ZnEGvU4dvM5144lsU58z8iCOWoRU1eJSfIimsIZ0Ryv+u9XBVyznykAaNP5Iu6c8oUVCmEJiIRGuMZ8a/IpoXyoTwfFWmWLMgGqWwsDh5FR5dFae6szdu8ndW0tPfm04KwQhN6MQiTBT3mZktgVHbAUse6unclTNtE56UqfpQqvDftstj+cIcPUk1jpknnI39xLRoxakZiZPUR1Gn3Ju4SI0dX0BtoLS28wUZiGXTkImzjTsN/uhs0U7VkwvHvatLTklCrodxAh7VE9vA0W0xFCzbMa6RZ2mWHh0xPMjIOzhjCRt59h9hTYEaWjZ7vWdk1B8D5x0RjjMG0q3s4K4SjT46+zUn9hQSe0C/lyj9NE/IPNkjxTxSydSOsixRVAJvkq7YDor76eXmln3hFUszMkKkkFWNgvuThYiQnRdLHK1Ug3YGw8jVRH+FfG/4x2nPcFjs/PIwe7NXBFqh0CHf9oSPLwowqGouhtA4St0GYQMVresZqmbkENcumEU2YFxby/odooy8FXZVEeUfR7QjN7XdD4Sl3nn6aJjXwq7sY1qyO5sngT2UEg8Lds7brjvldbPVgIM/FUetBZpzQMNj7Wynd3MZg/k4Ra5HzYMfBZs/LMhSzEcDBeTAsXv9n+HF2CQCFo0EjzllLaBL/duX8ibIQ7NADgJM/3zc54KuYT0hmc59jTHTztAPGUZVHhm5T5yeSc0yViUHj5at3c6DA6AnQ1kOUDtZ7Kuzgk+Lu0tA2ogucrUQyiHJoBFwN1PDaIFUZzLJrZ/8YANN5VoQUuNwVxEJ3Ndn8Jl9fd2lfSOkIISVYXNWG0DyyxhEpe7dNiOXoSKeuQNwnCAcpxJScJyfVehg+NX1VxAF5Y85mKwoB/faUyNLhZRAWiOHBaQl1O9QAlsRu0ppNhO4MZ1bw0sPimJxJQuTce8fybmFnKmX6w2eRV08CeHdBS7KxoaeO6VZOeOSJUWc7VKNhYKCLMt48YUbGixqqxPcnCzoi5SQXXFJPnVXCa0CZ5rXnLfByeW5hzc6whDGfIwEC5tzejoQHYqcaVLEw4Bz4cdPQ3LLcowj9NprDINum44H9vHPel9MFuI7ZQGiz7C6zEHwzYqDGQXB73tVsisr5NOmP1mntsxG/2DyTUq4Mv7Ogd3DIpwBAODf4kD2pajKIGIaI3rn4fOyYHzk7fzIeRNmMysM/R39zOGD+JeTYhjZE4t1XWJvbJRChxU9RTws3KMdOacpOEh44VF4qLR0HFrgf3VP1k9vGy+6m6xwKDp3rxc4eX2uuaST9Yz/wssEED+Z0H/XToo2v+rl+F9EpDw/HepV3HSONdYjZ7Web4VfI9YY/rFAfk1twGdLg6sJkOY92FhctJuIui6dmxOlTOCnd6UQLlx0qtVej0MEmcoFQGemF5SpHMkiTo9opQq1lLWz8pPT9GI0YctPC/iKTCPMT4Td1BkVOYb2SHlwNsjLqH/632ZhKngFvTMKd+0lnY+OlCkcNlQkwiG85mOujlHyPI+uBuHn3UBHSHe7KfSuW7kSper6gCE1tg9cldfQapZMaHCEAU4p7Rz1QO98QAqAnMQSVCYcR9wGS3Bw8X36BfGS6Vfs72VeCXCjr5GLQq43oAMd3MviXQ5xJKHKA+apPEaeO9V8eCfRI2ucoWjSWbhRNAPB8DaQ4k1bQRtYN4qL28+aYvp13/cWSiNloTK3MG3ZvuYBXRl+oApFTxgAadypbA5dKolUVveaE9h6JjAjJF0I2YlRn2OgMvyKTW+Xm+AGJTCCIdYGfoGF8j9Aet2Suj2TWZo5VayaB0BUMwjFHIeHFqst7D0JHbNyZ6FNUEEF5gv4+H3Za1dY1urRYeng2QeAMTwiM3TkJj3+V3qTa+1inMqw+VgrehgxNgEhCBLe66+T6f9dL2OV/kPIUeTwLh04Z6X0c8evOlkaE65osqkqUNImKSsXu8MirmfzC8VTDhp79wuBJVLpLIchB5S92k1IN5cSBPXRE+pXpefsJRbn/KYCLCkCdnCpSy7DTw5P7A39j7mA2JHS6eU1RVdP0Vruq7K/YkWQNyiXdXJ/6KjHYYqYgQj3iwIr25tigliRabAVffqopOv9HV0ku/FhG/1lArNjqjU7vJXBkz4wfFHqbi6rfUJ1I79jW5tmpdMxfeDXbhTRK2XBa1i2b3KNyaI7qU3SH01ER2LBiFkgJtYHklgll+/jab0sM/OAGYXTLYI8xn+OEQiq30ZsNSE8xNVG4GdkcVAU+TuEEeO5IoDwO456V8QaK4SzaqyyIaVsbaEohVuDtfFydEIpUOvSYSsa0nnNSlnA2jX9xRtm/71GGJPhDibkiNLsKJGxDo0EtkGbypbX4CFZjKIUhjZvLlag2EAZqWGnw/qxl4xaqCos4qbMiHNIydwnydPdBVnQFSqItpZ34AgCcFh63sHAjVQIygVBwHKpvdeaXUt3fSQ2wgoo98XprWjOdT786wEywRLXHjNsyloZIxhfcVGcMOPb7d44DGEy/7SvGHsE4X8md9P7qI6iGlz8Cciel4H39Hw5mQn2eebnsq/GGiCyG77nO55AAPoiVu+kbpGM15Ik61DBJSQ+nwQwwjZaixjDx9COES8+Kr/TdrBxHVy52hwUjIB87EZ+0Vrl60desq8MbTh3b8YWcSZDTfkHU3DnDdbLVbybUCIVNY8sIhOJsamJslE9uRAd1KEWemqidsebaEQuGfIy70C9VZTRuc21m7IFeVVxJ4NnZ/F5mmaAVBMJA2GjKlHBr8AsEYaCM1ibjHhUq0N+Fecrt4ypXfGwjzCsVnIk/s1hzFO0rmND28/BFfzZLJp0m4D3CSJdJfGpuuh5sjJRfXlAGGgey3Q/QLZF0I660jpTu33epYnhrrE+kQwsQvUN5vHL6gkpc1jehCEGUUBDCrkPN6owl2Phm7LDN7DjFwJqzid84gwb6hAIZVE8yTIBRQw1erzV5kpcmtTCKJvMr84vTaYsXrn0PLt4xJz8CIpnDTaJYPBNez021NWpj/3f5DvLqR3wDTHfgfuulay/px59yaFiM4NN3/TAhtdy08vm4Ytf/iF41u6wMiQA3LFjYtvmUxOJxhLIBOaw3e32wgEOafEWBXiaXWO9sAbNYyeuIQtQLm2EP4IW+2Kg9v4G1hFfRdZSYrF3EnsHxdBN7xhRX1uYNr06BN8fxv44h+qIeaqS9kSlVmcic/dx64hz+4q+B2TRjD4hfBjFWbGiVlZACmLzzaVstdWkr4kHJG2qp5OKQC9eMX7Wl8AHtXK4ni1m4RJkmykT1zfWwIMsT2rZA2LkDbmz+9gLHNeirl8VqYLSxCQKniwXnSkwUS3MAIgGvNS+N4qEAKlj9Zk+Yg+GbwhI4SNf3rlS4JNKXE5zGVsl/W3m9FGXu544EoVse4Hk24I52sTjKO+mqkfymUU1sRYMr48yc6dHdU/H/WwtiPP14dRioWBzNcQokiRblKUF9+oJmUROp4QYKvC5tgzdXL/20yQDP7imqhbxXSGCH5TnMzl4pMFwlzsMFs2pLZCRIFt97xMtBRUcoxfxpNkkhzUk3wkgXsS/XaEykwiim/EPtb18yRA41hWhqIQ/OZ2gSPaE3z0INosQbCqkYPM0otZZf7izWJbkjGqGz3t+4EmF5pubEJmnq5y2kX89oHYhC0321WqtzgHLT4vKyMAT5wQ0vD50Rf4xoycjdW7dRPasVS8D46fwyGrYiY46qzrnbKtfE3np3iv4hAzjuekpwOWM9mkN473Ko5kM0Fs0+WOiH4NkZCagZ45Ndp24A81E9oDePXGwerXMtSeO5kQswVEBUOrwBPRY6Z1bXfk5Zl7AgWMtt0QrhlS7jPyDnlzYcu8KlHLUg35ZNcSd0fyD0yQjuXwAy2I8p17YBWofnkeJxcbSzgI9E124CV7YSNa5aO6Pq5ZtfApFrIi7l/q5B6vYVJUdsSYW83ItlqFEOCxUMv4QGr76uzObZKoZMQTQQnQwVd8nVn7gG6pMsol/9npVSb71VGOdXKQYHYRNkwbm+LeGS/lI4yVTMwm+AzKH9ELLWG4fQP7QZBtwMmdS7ixdU/paLjtfPYNr+e+t25YjwQ50mJReZJOJU6MLXYAaD5hzLgdqHXSZqjVkNYnszq2CZkmJHYTZ9uohLUcXdRpMut7BayCdUB4qo025gS4qbAfCxpHPRTPJVjVwyDvLt5Wr07Qb3KTEA/f9s9JmZlsPu8oyqH6Rhy/WWN6AMF4MDrK8vi09textR+SGQpGX4aBYgPHwxc3gbovUG3aLHwRsdcD2EJ+cI934W5j/W4e9wbLVR6Fk6+/8QyG3OLHAneuHzjGtrEo8UTNgyri/lnmGf5WyBUcI0IE9QhpyVAil3etMBtRlL4lrchDmJFU/iqOhAP0k+ArZ2Ma0MKSTJ6/yXarlNuhpoK5MeoPElEILaQjZUMaGB9B70Jt6oWVKjn70k+O+R9w7/kP935TCRQXG/q+ouYjRXuf2SvuLqexL9QiRY8oHE2uCdOqA04XemW/WQyu/IPcEqOOqMp+CbGdmtU5JnKBacchsAVVGnwQDxagLPUZcyEeP2+jDHYXZbqQXpoaqKLpO8T8fnI6BUIzW5OmJfXBGSE0Q4B2C013QvSz3qS9YEitRpOZGDLdHkF0OWQhryZ8E7b3bjN0ZPl3ov6Lh2igfVLE7QgiEXVAp4O1FNhZjNvrrb7brlM4kXqJaTrBHL4Cr9MPecgWrAqR9psJrcgvjJqZTZ/7UEdAgN56an2F/86cyKLEgQ2/8EOsWLVOcjWr7m2kJu9kgD28j/c676kwp9iUmx+AmjgzOeQYU2NxDiZoKc47Vq2zijvN66dRP7oHoQexvlk82cUUakiEJu2weLKhH/y8QT3L2I+Su2hB65lLmDXJFK5qJYuJnfjg0YK7BQyR0GimQ27aSogmurIeSQ9aPkRkyF/6g7v+yRvh/QZVdWHOaWA3P4NsAo+Ok7rFdu/xgpMSOP3dcBaA95zXciEQ+EaWl2XGzN19gGD7RwJSJqb4PGqBCQeG1QM0VKXv0e3zTDJYvPncmQzE/DeZPXZOfpzrICmRHHYh0WI8diTCIkTmiiYuh5ZMNZpol3FOfK8IM9J98MFSW1VxcthiDb+eoHEUCu188JTsNP5QBd8QVUdINc0YTH8+DHqsDSMoOC9eHFUIpYWuHj0J2DOPGbJjggsLOVGma87L5ytAI6vE24GUxXA7N6osvKNRGpI0nxmnM320wREKNWX0oVgvsSwGZbtOBjiLEirxz5gDoBTXwmVtsakoVwLdQPFkMA9L/5A1bc0uCX537/+r7J0YlhWiE8ZhoXk1zOtlea6mt8QsBbjqIJ3fzUp4on0ktGkM7zZAcCh/c1ZYqq2pH3B9ai5IKt9GXNlMLVFte8t1LFRbxbOkcrQ+XooS9XNd9OOtRviWe+/4RanIQSbfaW9UoY27re9IL0jjkN4wiCM2y5l3wAjhEFKDcxigClB+lh+pcouDTMIw8UhC2brXQDdrvahGEZwaqRVx9tXKm0KsSvv9M7e8GHhfSMPeXcm1NLig8hb3pjLKr71DUMyEiyPe06aV8eV2pV1grajmldh1xjmwC1bBtCsyTg7a8byiaDvj8wpbSf1r5Y9w4LvI6uZq5oIWRy7f0MD6iWxvyA+WWpXtaUsOmo3VZqFASVjfAQnNM2vNBUkqb/3Fa+sPxw0pMdFGrHJYJWR9VJIoLY1qH4PYFrT89X1szZVb19Lh0OvC2NQ0xGLypnu5PeWZMN5OLQrEGTFTf1iMMeh4Cuipf/XRsFkkE+Xx5TTqeHM+fjNq0or2tGeDdUVVbgWoosiXrbgBoYEGHHZMwWCR2UkBkLjj2YGZFzd0pgB6qQXnWY2ybCcOzFdZfEEUdAivfyp0Sl045CIQJ8oi4SP5jwSf9aENkA93IEPH5vkrlGtwovb2Ut8KOAO5kwcsQO2F/ufPQg8VwfAvf8R3NQJBDRb7Nm0ozhM8AJVUeLUldZUWG4Gatra4kShv1BDs2NvpOFXEjF/5T6a8LvWmiW5AbwEo8ehmqooUag1n524SJCEcQB9bSlnPbveC5Q+3URj2OQuOXPsB9jOYk3hmUHS2V4k/mAtI/OqMJBPcAfD5RInSGOH7Kylv1gHqsfTa1HR8trqRG7lwUnDm03xWpZwNytEDhgJ6JJUphAJ8vjhtLlYNcEtjnqHm16d2wbCc5s8nhSxicSp5wq9HxTx0VTTGwk8fMBX9Guw+wtHdLxV5CUsW10TpKcB4tufm9S9k9ldC3D9oV+EkpvaF69qis2joc0b3voC4GTbeKP39rjT1lKeUFDQ2IhvXgaEXhEl7/ZAKZ5K6NyuxCGVqg8AqHRUBylDT6sKm+s3eO59uPZXM2S6sa46Ad/jWIN+4bs60SZ3dygobt9n6efCLty0VUf/lbviTwUE7t7JBVBL+8DfuQa5aBvPBFBOpEJIZ2XdSKaOSkaXFlJTBLBF9OijwvqnE/PZMiZa88G5j2Ak1moV7wkIHHvoIoAY2dXoRNcXgGe9BdEE6RKhxktPPpkmP1PUK/QQhJu6kRUnLAO5DjPIP5ljkCx9zf5x+Ivb1vkJXRLhiDWzewchtHHfF5VkxVldwKflz1bDXcngLKVRtu6G5zcFIuEX/CpFBp+tYN5+EZHSEYGYjCaIxh3ZIdgZqjUHZc5r+fgf8R6OaCeohjW7srUXP85cjEqpaTh8hYXwU4NNKOwTv+ZXmC7d2TJ0G4i6SMwIMwiLOzzh7RaGzD9OTKgfX8+tq66bwYvb4ROIOLxa2GPaL169sp5fRrcXCEJQzPuKJlGCM0TAn+YPWYwIi9XWlktGTJD/mGRvFn2rATHecZkkFuWvKZat/vQmnUlRitSR/HP20132oafg7MRE6JbSDe+zx58qv6Ivw7GcuxC8ANXp52+4CNwzDNobPdYXl/i1cxWHXawLB7rlQqV7hSRGlThfNqwK9BIAsRyUzFbSQRFnFgEDnSxqiQ1XJO6libXlQNBTyopThEkh916C1p580ep+JsZRo71PHZSpIXTit2mKoWOl0kHF1THI5lWfGDzRX1AgC2i/yXkUJhqd6kEEw1Gq1xDOrdtGcqCyrlPhvCSOAPIBUTkwII1Cn/fgg5DeoDGTJCS/fB7JToBz5ISZBdZJepH9G7H89tV+YkvmsmcbEzGCr3YO4T/VabDF5+/axDJjnhZPJWCzxl339DgBYtcgo6tXXqgqLZWRlF60uyfemZQ5MI9M+psTNmM29NMAS+JefEOsDPkXEA9xn4s9QB7kA7wtxNgCRDhjp4iUkK2XcqVLfaDejvfks6IJMlzHbGn9meX4/YbUEQFpIc9cB1CWsbkY/fqaekK+LWCCBUviCphIM0zmSSWUgFCEtITXuSGWmfa3Qr6cvKtzp+VAx0jmi7TUcM+ZYS024jVYiN7s7OlrW4vA/xp1G3bK8nDt28Runfhq6O+Xrb3rOY1tZN3EZIkypyUiLsMUQnEIi/vti5XmJwtcOXUhIOR5j3lqMCq24/wnILUvjTp8ZrMWmpMaRVLikYL75tZt/k7s7LknRcCCMoA67oc84ZNwFWH4R3OaeqbWRE/i1mpM+95K5aJ4KSWt1Hqf+4IG04sPXxrTDQQHQgbsLe8Qe7+82tU/WUsGLj2e8OFCkpvZaUjfltcFc1GuYc/V82MOZtZ6i6/NMQJfvfHW1ck6nqqIzNK3Y58/2PJNpBF0aBwsSipwsM7P33NlP/f6FQfis6dX2qtypwtG0HjWcWIT9HTUeDqtK11T1WpDyCU0lGPOAXLWYn6+4Q7kxlePLr/fxJmCuUMyvzrpthiFX+8aW/SfzXp0W32foHHuTCBWCINpc77OIhMDi4jb/D0znrVimT0JEoQtrIEZ/GiFph/Hu6V6UVlyntQO7AMHylkmpQqIrrSkjvbWPkton6WhKRJLayu++Pw5msfOOz1se+HZpGxe7C03Czz2N3pIC/IIeddj+rSD/qOM2WgntUbtGMaN8Y3wgAFyIc4cpSRfWjmeMdYdUTTab+o4YKpxpe6GJ8Y8hkA5DSVj47bblzvF8yGdNZK9Qc1TEFH1buNQQ/RX5qrVtr6Z7hff309KSuFOYhunlieNFnAIC+5JdwtsXY6bBLZa8B83vQAji9FD/YWq6bAuqJiCOCG3WGg7V64d3oPm1YbXSbnl7ZT9E+NvpNUXR60S4XgThSvLxOKIXaoac5bdjAcHcJGdNhtbfXVush6C6UJSkkB/IQon8Xr2QD/yXkcpDF8mc1og7wmK+cUByJnp4kaunNqY0FOrlyOQsenPMaMgtdH1sGuGXaglobmNZ+oHx8u+PKf7eB4jvb6b7vYdweREqJEzFFXne/sBajDV8IH/Xc9WAHFlHWKym0iVwVr0fBVVVnarvf8MU/cYr64FK4aRhKunBXR1nNLmYMCUMFVrnAd2mY55UH9+9rB7nCi4ivKo3FDhAz356QC1EYPrD97pdwoUpjrPBIf95XtKiK/oRRAaqsc6IsL2Jg3VFr4d/1Mt+JkkvH4YMk+gz9DRwv3X8P1b+8fNhSjtP0b8dasCUBLxEbMv8gy7HtFvTmg0Lpj84/9iD7JDOfVLtXJiQi1SDdCXSaafhqGng22jaoxVOiqtKAfHfYFtOyOTY444WnSESsSWiVYCZ9geClIH8bvCfuNiXb+uaqqvSJX5wNiQIL49OFTEIfUYwjRJvxH0sKMZOKxXaf1n3EdQTRLQJDMFcUnF0rZDicBAAkq6PS0OF5WEGKdSAsU5GmyyRKR+o0HafI3elS912CC+kYarAxkxbYVDCMFeIQwN3cYCu5amWa38iqdLzAdzOuGy1uTmTkrwGOBRJxQIvvGjMix64H3sph/rOeTRZz2KgMxAZsnhwnxtIhMCN42A3eCOTYbNvWlkbKIRjWtJsFnEAzAYFRfmJy1KMF1A2y1E87VIECwyURzFkSrAhq4TS7mJUT7jMqkxOsq82x5/WRgSf5cJkYw3x2b8hyxX3oLwNHkKm8WCR+Z/JLUpNU4xxYxHBvl4K9f0z9GmbT/F/EKrTFP7ZUlbiAx+t6D5DPzS5114kwWZC4qZiLr1gNJlnTCbthurv2oSj6yEYQb2QWzj8SlCUz9KBM2q3UjAPjwpRnxbh10TVDj9acr3igbrdZIYqmWARrF1jK0OyVybaUo6M9dlT8ZsrXx+UDv1w2/WRPns9Wxdy4Hvwwjvw1L/KqKk3/x+yLTHgxiMsbPTsswFY7Vic608hWBa9kzrFi8aSQsj5q4eow0IsUDWLqbDnBXxiTWkBEFFUjoBARAcmiu1pEciX4BMPszptiahKImrb3KUZ1QFFnjTxGZcOtlETiihemIo0/LT1UY94EPLHbdbTHxgAHGiJoyZBuNnN8URs2vPhPRtAX7vM6SsM6hRQGw9QVL40LDiwbl1huq3wegMNly7uDDsurGb0qMid5yZ/AhNmAsUebyHQ5e3PTg6EaoeARcpXWjJprvsq26Xb/9Bhs2awnacfpm1uymYM3He/UVEzg7uoIpI+tyQOdFh2WjI6y88PoOhY2YA5XbKiaCnASX8HPImOsrrsKZwrFOxaW2IGZu4qHF/k4mKyRM8OQEI9X8YoKoFkfRG1HruWlIYcZwCzpbvDrLledIODbm97N5BeLZRDtJEBaG41R94ZjTTvklhJ5JjQXsxTa1IR5b99PjBIZfuPGD1tksMjT8CUdq8OgzwP+51m06AzFquVyNAYsXH2MWlHSoxTfLRsWIAwDCJAOouaazMWdpzCl27wc0glHpX3AHpelkgPFuBjrSOVCo5jwtLNS+2erD1072rpRwRYDdOnDC+EGV55D4EENJF99TCiWegUCtyV/QISSjK9K8EGZjoAHMBOgkc6SMrUv8p4ZDVdAq04cEfhNz7YqPFGk7OXRezJlry+tMqZU7FPSfH7xO+v0A8UemxRZDI6xOWymnH1VqagczKDcCWpeBsma3i/7MYRO1FX1sTVvnKdWbZ+yjQ807DQC30fx9ax8F7dBkWqjhQpcJ7C1y2USPv0M+ilUiR8FoTZgO7RD7w80a9dk64UKFRy6SZcUdAS76imm8BtP66KurHUBmGa+6nQog39zC4h+W1pDdq/tJavVyohA9YX1dx47OYEUufmxAox3FXPCM98yYE4/7z/qc0ucLs89zagvHzlEgc9uVznD5XVBJFr/jthowncHBp/29l99HoP57eBqVz3iU73+SAeX4htfzQRDSlWlwtb3cuiwqQRx0ymMJRcXPfZ9S/+PbXdz2dFqquQl2PAF3fCZcSCHdGGHS6jOAw/ndPxA1jBacNsxphl1PY9OEcaTZ03Zk0SaM8mEQh67umm+dPLVI2QpzamXS9vfL/5cWd80suBqapXI70GvSbefzAq9wAZbCVT1dT3UDzjCyFvghLJfT+vqhQ3KSb97wxFoKoghPf41XlCJKNf9F5mEbwYG+n7O+JIwJh5V5QdoN4Z6l66pp955nvoErAznuDIH/chiT44GBpkRNTjB/Pff+8FiyWePs3TUmy1M5z9N8UgUxyNlV0UC2lQEoMXfOfLq5G2IeNtQntJHfjNl6Y4oUKE2BomWg48v5r51lv1tCNVf0Vn7C8gd0A+pO7UXxbGzvR/vJOPFS8i/F0C7erKhkXT5mBWuxMv+aaG66YhL182krvj+E6NLi/Wx06sOUu3B2KbPsBZFxgZTcr3apyy5cZCj171gPiBQYK244wSQVf0QJX3VIm4420N0mDjT5222CUReUvXg4sGA5fp/WEJFIQMcnmc6AuhdPMFV/+sQNkRaTTk4JKpF+BoOPU2QFNR9PwDSMjOkiVI8Bn6bxECT3i+W2tWoIxHd92NoWCvpU54CCPdX7kqZDPfdFnsoakG6JLeiCxZIcJNYTbpsDroUWL1CvDRF0cn8y/mQiiCWELhsA3iSeUfseE9ntL72kBs12QqOh0AdnUNuknfLr3SqtcxMW0OK+mlbjaluwqN51p0QoHjnuGADbxxKqqAa6ovEd/4rh1DZb++D0yp0Bif6G8Wkb9y4ro3BKkTeGGt9PyoTmma/Y6uvrMjbi67wMh6oI3XXqjONFImeet6bdzPQDRcaUccv2IqpkSvhtoqNOQui80yoW9tMX6xhsVIcXUNRT0yiV93NTvQq3HdB1qa2WSvFqzTZbPQohNXAsCC2xOdoLPl7ixecLFRMNbR5wb5D1x8vlg/JmDm5HoMohsVLoCALVLLSvCH+3WsCdVt491OgXYvBli8/LzQDqHLZmAp7m38zAvOW4A3cT2opX7FV2T4Q94E3kzPFvAqVSttvUBa7rqhKmWA4yLd51XGYHqfH0Qhhjc9VUHVrDQ/RkbbH0SS9AOyLqbsxgE1fps5G3mL2PsgNYgl+X9kXrYQV+2N/aQlGE/8ytJRmcwoXF1alRAc9lpJ8jZYRm0w5PoQooc5qUTl9ahxv9F2UBcAgJG3igYf/8Ge25fGYAOlaYqxjJuXfTaOE4XMcu58DcawBTTDbBrYge+XbJJpF/Es1bJ7+kQwWWfFB7HQ8yt8U4NcKJuTjcpOlfTYFLexc/kRI31yskGFgbZc6FG5E2Y9sIizItoaEFNbDlEFi7nhPQglZc5Pyiw7cNpRvv9X68nuUSbCG1/PW7Fbb6fTfv6KqLIwyLdpxQoBQ2xE1i93z8drTIpH96n8iEPM6g9wbbHYv+bGO1D02wX7W8HlFZQkVIlH6f3ng3H0gQaow6gwDA3tvwD1dPjbX9RPiJNiug6244PqIUfaqQTr78lbZXh+MRFP5vEAUSigKNV2Yoxd3EqWtjDi6h2NRGCIJu+aYl5wzVIgGoRvW9Btwl+g/8Ok+KYWlqQlPrtSMgtI5cp+yElvjEOwKSsDes4HjhG2nDwhRAaXcz5mJ4Hg0NG3HMCzToZqCYMhLR3xQTPK8+Npy5c0KNeg940JmGw4aRJkcKPOt8OvUSasExFcTsUFCpcC2CPAvDCt8d0/VefC1LTkFRQXl2jHBXUSZggzZXbSmeih6nqj2a19t/gDQZ2xPHp/jVkRuVuys/lnFkIvQQeQFcX+IDSgxY8vcwBACEzImkdReO3i963yKk9wrps7MKIEL0KFXLWHJ88ViZD+yoNwb1LywFIpxy5nLEHto2+kHYKWZBWRwqcW50IYNF+TJPOeLsqNL08pGC3mGxEB1ioTFx8WamNyQVMoIi+CFw/CkuiwRhttWKToWuoRTTxOGC0PKHKY8B3nYf06nJF81Spt+vyR9QwmwGZiZN4nlqG4BOl61okOtHJuspfNyHh88JnZBv0zqh0SK7yNaRV/fIr8SGDP8HA89EoZXnplRPet/VsuYCUhBiqL7bQYgv8gpgtOydHiSpxV9uIhX1XproqVq8vu1sIEyb9Bx9JhyR1JBXXHohiuRM+GJq+7g356JGJwlAvhJz7COfgRqAmnOAhgdfCO82bZMFeYdDDu+KT1OXRh0Fg9u8Z3F259CapIq0XHG97T57ZuKPQsePhAdSJEDt7e45JbX1lQSaMu7LW+pnEo+/gGoYg0mbgj7p57u9wDK2MVFjazt92O+X5x30p7Xhsdz2ZdX1JyMvuO9gF6Fm8z+ul76PBEl+gw8d7JT5Kq1gSfgmAiZjuSRQWiMRTMk0iUndbRpltLMSX5MeAtp9YwSn7GsCFq2GQSW+xJT7s4YFzk073kK4D6gusBTEN2kiTfoyX4wR/alzBD5NeaGnPrYGUNEojubhqUcdbFToErY4ESNyfBPvjKEzpGdvsW6emPVKS9hEpcIqhZoECkuowP0LWiDEqh0Qd6ym+AqRnw0QRCG5jA7TkYz5iqI7+UYdj/Qb0V6NSczTlSFkXhqX6Cq5/2p0wrtlbMlt0OVFkn/W5rhKGin1/6I6qOyW3DwGzLZmsD+Q+BYAtEyG4lLSBiOh5drbtgQH0xFSHGq1b/OWe6aRkYHpBBwRioY1i8MqG68+9RadvFOjLzTRt7/xC89h7w/sZgPD+3LKvRgneoBftcHdk2eh9YfuDpEpksfKbul+4ogkGDnjdLm3nbqDt9rNwJ/dfuq4lojrDUtuuNCgCQVfIBH+YGniT5jMRowETf9VDU33Ev8fJDqXbCeusZsQRkfekUwz4hwZCWeLP0B9NfEEk0+mb/zU7sf2MxIBuBcaKRLBtOq2Qr2+SY2namWFnhw1IMSBJIpOAAzTDIaEvjcvPtU0HBsUecqrNCB0W27WIREhCTYduKgu11quZHSalWPaIGl89fI9bkNhb9EZ76O0LmZ+erCzTwTHRbAJsxwMFVnbfki/RlxUIrkig1B9LsWLdYOlvvNSzaWCglgJgx2TuSa/cICaKX3oOIjslpa16kJKq8RefRw/HElQI/Gz7itWzGS28ysM2rtqbblRIQqH0t3fYOvF3/xWaYqORtioEPbrQ+dHhcwvFyY+MHXFzkwjqJ28+Bd0fEjQ+zbJehaf6jH5ihfeBF5S3FJUwUiVK4ZK/QR/xclbXAcDEAjGkUlnD/26py9Wgc5vL4KVUYV0qwolWa3vz/nlKCav5Z2xfv9RElYtgbMMU68ThXMVKuQsgDBKYgG4mxIbJueOytvuxA+8UBgmgU5BzfnIwsTscMzj5KHouCsDEga2XgkLUYRJ6yZMJuUEq3zxgVmKmOIJMWEz6i0BF5lizwuVdx2iRyoHfnuvsjWYhHD8a23Q6c3hJSs9W7YOtShXeLAkdI7LIKC7axEmMvul3gvEpVdgm0tJg0kehXilYDKl/4JyLNCm3q74eISHeC0U/MKuGYiSYbcl6uf4LzUra78kQohGXvf8MtzowJEOWRIhUrmiXfTfz+Y8fjNSqEW5Z1gBePbHdx3nObn8JTRNJ4KHscLwXHXxzOivv8h27hhw7yywwvMqf6S+x4mn9smDDqVG6tzNQWLupQxRDvKWAlwrVba1SyzkTj/mOH949W5PxelpoDHK+9nxr1LEyDoti2pkAVa3TjONe3Z6IRgo+iSJ84w7Lp9ImfSYqjf5zMOmC0SKZ6tH2Ws/u4mrHLuso6DxcS+9oXJXlAalzGrv7mEoMopHvOXCFlB3utj0m8huob5TyLi6vpw5TgdGX8wZlNxE2RdWT3pU6uMJd8feljyHhMAaa23EyUBC78fJ1bkwfRCrJ5OHraOaJZPnh5MfGlts+XjkCXaFjhfoY4l1DzMZF21RZms2Yxe/o4z1SZ6UuEfbib7GN2o/fGO/yRVglSY89BvracMSonps6WaUetLhojo6Y5dMnKHn7KXdKmSNw+iqENxy1MNTh9NTwNz/VlHYbERd911MPb9CDj66ZTnteqa081NJGGIXwXFEuSbPCNyKHNqE11xhQrhC7BBWz+I246RsOVD30vl1BsVxpGxeFTiOczAaoW7tqgMOZJfbpR/507dg41RQo+P407Clf6pNO45EO2YXmj60m+uWVHpGRoivJ20guz/2bU0xHDvy8tWT2WLpL0SuM0PoatF2mdHwDDdw0FUl33Ju1BCtekRRaI5Cstdnbbex3YqrACjsugKnwDsaYHBAdGL9x1mJWUDmepB08u6lv9WgZSRneM3ecejQONkFwPTVq0Qg4MSdnOfvjQAPISWp53tBPux2+O9dAIN+ATL79lFoNXCxcJ7RACXXivbJGkHpERfoSMU6JTHlpaENc2ILdVaJXt9/lV6Y1jJUmtf14zWTaUPq2U7qTo4yYLTdZeXiWYAHUCkTXrxx/3WUBelLGH5STIMnFO+Cl3Z59PDSb0bdMHDoOIB65cJ6hgnqeTRUzfTKBMIxp1WZYXA2YzcQG9yZPE7GwuGnrL2Nt+tS2ghR7yQZ0bE3oSaGmMB2MVMI1KCKuKG1k/c2HQd8WXtHEdNLupxvYlFIsbIcsGf3iOL/JgfnVC9jc8fU0h7zCvsfjJnZVViHIZYRbPInqWlIzwhKP2Y8Myy6JEsUqrQWwgjJHCaHCnFfiWVQGEDEa2BRURW1yYxhjdVfUL2sga60LecxQsdNKf8Hj4kx75UhNgSFu+GK1SZerbpa1CS05+Lv6EF1wePrTHj0i0oWQlMWN7DjEoY7HT2v66m8s6VaZlSC2MhMdE4f6n6GZ2mlaKRdUb7nZAv59sYTYwzvh8DvHqv4eJhXpIcmy6OUlSezjYYK2ajn9QUR1HHjw5bqZOt9iGiJ7QvuHMNqSgWv9iGtr5rhS0KfpgzKDu/kCb6VCZfLHm4iTxejVVeu6SsF9Tl/FgYU09ZZLpy1xbILBakxf2lnmWeNXPDXIH51HxoIeyc/x41hl+Bs/+izavTnE2jH+A/34o6drjRBV9i/4mTWfi8kzLo1FS/0lE2oewOISYa33StF/NiyWtihpn/91QJPaNCvaSW3G2kTjcp0VuIUEepURlZh6W48/MGO1Se1gRvpx3e42D18joDRPMTzwfmorAlJn7o8F33Fdt8+si65Hl++xnnj7/p366YyDtcsJDlVmX7fT0AmGT27lno3v9kLfd4MFh3/m5R2SqffAeAqQFEtEgndGQ9PW4g36qi2Ho6IO3AUaUy/1+CtcZby6tQNt0qZE9fhAmSBP/NuZJUdZUgiSqk82CGw5w5yeCpqrB5RHgI8mWEH4grLdSJXym+tPKNl5w/hAYDWlaMXC84i3z80NFltPMFm+Wigffkhy2BfiVHrnG3QdhfQrJOCsKOkolFvDVFUx/VBR55S+LTNWyExCow/YO6rdYxOe5ONFvrUuftrTwUiwUm/PIgCgnaC1KblnY/WzQD4ljrkd2X/Le3ucad9kKROkcc+Po5/tVYNdLb5jrd25gykoBLn/iHi5jxU5L/rXevdHVG/LVMppmSTC+DB6ykHFKjGwt5Ev/8sriT+mdSLzQ0ccvYGROREqDhWFw25HsBBhQUV0hFFe6Xv/04xRC/moegNA8fBCDNFydhP+cy+1qeObu7oJK+v2buHfTsSmUlfRx8rDC1s4t4Xx59+nYNIPT/7Y48JDjbJqmf4N0yaDdVwmYQR81fLTEVmhfaUXwvrn01n3LyqL1SajK6ZHUrPb/gKblpsNq0TZWXDFnlY+Ex8QWKGFwYYa7yzq4J8VJQHRxoo/UEiuSUmJkGvM7me+SFl+FG+VNf3F1VthP/5KMp7QSZObCTpcf6n2L0oIbczPsn0rC+/UuhLK/Zwtj7sta4USJ0yd1vSVuE08jH0LkKQHq54TFudvQLD1S89NisMX77IutocUykxVDvc+cm3kZ9mD96Ncqm8KHfNSB2Na/EBHkdYiyjwCLwdzeygm22QdjKPys8UWHDevj0jtOYrhszhbos9KYdvzlYFJPBoWPfls27hkKRP97ZGyleMmbSHwZ5gGBfZp7hA7n4LryRvRGgNWZR4WVevoLzO8KdIvp+x7H3fzSfB5MoaPtlefWxmsTtM9edTuHxLzZ0b9bUqwBGJqv+kla2R3F5wxa7E4QtK9+BSHDrqSD8sXsy1w7NbKQgrAP91wwwZu66ar6DKhx3XCoE8QeE5ySKMayspjQN+8FALG1sAR3rGN8ftPKyTg/FU3Zlh9m3BXn3pKlP5uzglNvMN0kQAEoAXib3NrcLRHSPuwQr90KJ9uuvA6Bi/tMJIWwMTVoflJbGb1T0ncLRZEiaxlYBSQzgz9EDzBOdfR6CD+6jQumDLZ5lxuNwxVWtDDi8Cw3RMQkQ8ERnn8Idrsc6i9Tca1g5JGHTJb4lXJ+H4qX8nB9qPEkm3bfbbN57zR1L/+lQgGptCeoMjBmjBRV6APjxFZSGZ34beULuZNW/HsDI+Q2Li/Z4/Hy++CXcIcLTQyKREi0sUmyuFnlgWSAVAAR4QcCVERujG/NlJoLW45xwJGSRsxrxAPlNoUOI7naffeOxW6TTukUeUsZ3dv4QCn1e1zWpsPPuuwwrAvjAg0CBPfHFB7q97VeNyJZZxtXpWRG2Zl1dtKUZcAM2sNoYOL7g3zF4g+Yx51i91sJjXuNpQzLn38W9QThLpjYnISoxUMzUd7L6Wu98Bs8HSSx9M00DXUQB8Gs9EFzcBeU9Rr4B3YSWrG66rkUE4K/f7yGpbO53uaekbX2r+u9x89gjj5iaAbYV7lW8N1ZLvpvS4OEjvA2bbkDwBSdChmEQLyzw4EtvxHgLzjX9e8Gs6EVzuctQbaNty4sa2O1EVo2ZAKzbHkcDm6yY+qguMsBSxxCkF28cRSID+ofLvzzMBm5WiJYvSXmOhTnN8ecNLGGgBkaL1J9rKMuiGUHX2FWzdd5IwjYj8PdYUY3VDyHve3YUuh6XwiaW/fVBJa1ZvW1MwOconKoJdZXbuZdxmy9j2hrP/+vgHl8xDlueUcbyohB0S2veYzXBTQPUjwyGARfoX89AimE9GU7mv9O597XrNwA9wn4XRkpu3KM0mZwoj7vg62kwcaGhCKrn/OgnQLIwUqwfT5uLmdm9mmgwOKTHYUhjk7dE01kvGXPoBHKHVCKNWAVdwJ2hTfduQEhP0/jvkB1nCr26P+sIvbxO7S4eiJeRMFBu9AM7ogZNZ3yQOKRayr9D5ogp5bgDAg1t57WFxwL5z1kCNDjIts0Mo0d+CFcQ2b/vEq/fDfUGlv2blVA8RrW1CpyHUXSY5rmo3isEcVucdbRLbBBPVdWm4fTl03dlGTjoeuAct489uywIlZQHogRCmkT/u44p9CpD3GvCotysS4CrFd7+GO/DSR5Ppvwhb1tvzK8djRRw9XVIJbSOOvYUIzWgPcdMoF8oOHrXZE6z7STNKGlM1Rz2hSn8zM5fYrNr7c2wiiy8Mu0Xa2IfGA62QNccHV3rSk7qIS15lrQ9gD+qkIfCtNdeVIfMYz3WBLCMJLHZttzCXIjl2kJyZ/vmyhLzZ/hH/vpH9Zh0rhagWOUwkVFE/fol47YdA/kS/RbUdvF3/c022/6Z3fD5KT/fOJiSuZfq0Y5mZLjwH3IOcyWOdOHpYJg+EzAZZ11idvUbtO+NZDLfH7C6QFU7b4gokJRQQ180hYdL7S8+eGbwaBBfUE/uAsjNkxTOu4sRcui8aPy9Pby7XvrdgxeLkx4GmoC+6ECsII18Pw0vM9V/YS4/4qdxGGDQTMrQZjygse2421WKfvXG/qIG3qiiTx8nJWbxOB58ehR6Eoc5Qv+OVRcpaUcXTtmTEJEfM5YrX0s2a8c7Y3HdfV06hDbj7Ztmp/2Lf/23Up73plZDpNH6e4OmpngOPIr8k3S8ToS0kV0yLH4vQVAqGAics4I/ok0AJcbCq/ZX0+2WSS4KEsbTa+O/QbKKZ3KkL/k0TyWcve9RpR+dWCqFxUtA9hzdxsqLTKR8EzrrBNV+9pB2vv/2SeW5+76GxXGkioVM1uKX7jZ06RsvbPW33JWQwRjcLozqIIdBmXu1pFovAM/l7LvQ7tWoz2fniw0HKDtXcZcDBzemE1sHelBrLUc4rh4IaRfxQ4ibXsjrOlV6VUOjAheO+OOq31uGput4RomngVDhUtw5QfW5dZ0OpoOK5dCcJsIms9bA00V5zb7O9bvy4uV27vinq6kqAiMaaBfw/LZyA0f1AUYgMyNubiCc7ND0hFVhyI2iJU2Wplf62uw9Bv+QxrptU+qnrTH08wBonemQc5SRlcsB89tCH3/YpVfh/VHqg9opzVlTRumUaAiOxP8cM0O1f/A3l+2ae0q3uCUdbe8xoVuRsnFujTroXGChC0TAtBd5I27prFdy79Q8LXOT14uaNZnAjyPRMJEUjlrbqb6rLfhmy1IeLLGfRhEcJ9dBi9e7OK+4tczR9/3eh0lWhB3BwRQDCFJaZuf3OGrM0BrhYhWlIDr177OtTNLMA1uyR1RuXXXRvso24hfxSVxvGF4xe9E9u+gvRDYIJqczIpsU3Fny9iQ0ch6euxrE+k8+opzjs9G8/Nygi+BtDNrxLHxYCTwd3UaP7sJu7k1gg2Au+Q2go78WlWL1Je97SChBYWBjUumU7evWHCtenF2so/R5Xxidg4iahjDtGzS2BjR4zkk987WxME89YZyKJwYSyfxcEazqAEsqZplJAr5WxXKvD4BI+r9E8GWOrQQEoTPsfrhj6bl9yHCGvFOdEqiAcDr1sZc/gQUSWFA44QciCtBoWWOdxGp5+iFs4rEZyPZmX05opfnUwxk6jQc5q4XEXpyfVultCbwOWVJTc2yojr2xSnbIEmJogaRyUEsRIPU0nmibdN1eeFFhbIa5KtLyecoJnyNS7vax9HzEit2GclZwSduggWebztMZ3btwihJpkO6/qeXO7Y7RGC5iOCUKJoocE7rBeAB1c7s1jKmDTa3ekrdKcqlmmMH7YBLLfGDEAnF9agnDC4ML4N1ClaZvIdNdqk1euT3+/UEhSo+zbpmYWZ4RPiGmqDLjshfio/xgeVpAsFlPL+clZhVJA3rE3RNWf/I8KDTggquYgOppIrgjYkmN1LRNpvywjHNDftiAk+GQY3AbvsfvnwwuevtyhnAI1CUXj5HM/4zq8im9qxCWQkq+SD16KQaB8QfBUfTUphXNj0FYEiw9VhVpKkxIIJbj9cITJqaOT2WYouoB27uVrPwfkjkfG0S9VgU1/ALsXABXOasMFCtZu7M63ydA9xjHSYd8YIVRUdcnkg0LCzRZNle8UcNNcz915KrgeWaZpDj62XyTBbysoo+LjTLUvOPBCQ9OODMkW7mqSoTcZTKU9DUpI1hyT8gctC6pUyMiTx3F7DIKjBqGE95AaMMwf1J+/xM7vL/UASXFpCemcqEaVIRlo0Nhk9i3J48IZZIhoybLbz0tuzVI7uNi5Wv20Jia3wL5nL0pmXX3B4b/8Gxmbnxse8veKRh1yvriVRqWwZ9yEQcbmv60EFP1FKstLKiwJqn12EtVnX3gaqAYEGSi6ChWxFWmV1+VhWAkYlfDEy+FbfEMpO985W2Rl1QdxWXa7nL4DXhnLRhPLcUMjraWodG90zObsKNbO3KaMNaH5GgJUCJKuOaEN4uwQLuL6Y/auH9rmpVk899ZJIDgZuIaoqIFdb1IuvDeBf1RP45qE8DF+/1y6O65t3AtNzRSr0ernDRvyOlBnYRlE2UpA3RxP1H3RVGlu0GTbnodu68RSsugyHKf3NeVsC1tLNCVy28gPWMYX96ykOujCVMxHawcDMtt2+3NOGTH527smlZ2LdFWguX/zxmjjwRn5FCoD8mFPu/ih3E3bX+FsxslPP5CvUYGrtT0eqG8udNbCdcdF+pk+SuclLSmmJ5N7XnbPF7QE5UmOz9Y1TnnHZlN49lgeYl0j1DURlircSI1PcmYxvL/sZ6nwgprFrOaO4POWgzSwWGzpOHPioFMjJVPRdvgJCFoqIVV4yFIrrrWqKj000Tqr1RGB6RicxYnqgNu6IYTpURHhAMbVbT6SPWrTD7XNtrtjcD5F9dn3eh2RzdC8JKtJ12N/4bSOlhSZcuSSlFxFJfyC7RoFR5Ul3FR8ipY96FJ9UJmuDBXq5rrgkVG0g+pW29Gq0CBcNhiW2b3LDIQExFTwVyevgWVRsMil+FXcf1r6LpnQevm7aD1um3ku/82N3wUmCh2pBD7ExkjemedTRti332oQRYyLfex2nS+fRedwl6et2mCKqslMRjw1tOSmUL0q1bYkwzIrRF1i88JVkpTBFodQEI4yCP9kMHRerqmOO+AAAFhJ0rspSgNVMNP1BUfqUjbkk8ncNUM4ZQKHjn8fekMD1HKzaB9U7/CLh9f4WbGsSIP0DvY06bYNEQryZ/mz8Yf5INE9KXEnRVZ3ErPgOFi1g2txmGxezn+kvvxTgdl3yks2iVBVH9Vnz2eyq+EatVMutPQLx/9A0x+3BN4+02NZNg9iADdlgxZtI4ZrulBT1e8u/QX8jUls8jucXWxHq9riXB5ZApavhFMvRLIP4Dmo8te341prA/dNbHRvZzNdqHd66B9JOvp+Jj3SQjjELaSHvYuhnCau6SWMAabd5/+6/4IXRrI52lZ+flFI6VUWl5E67Dz5GMKxVyJdFMoYNLyAgx3TMqQhVzCmMdpsUMQ/stlwU5EWB9i0tajEnXTEvXUcW0RY88o3ln/UjcaUDF6oJnJ7ZhH16v4qCPXlcUCaGCv2rHaVRndNCfc8S4ZCR7kCvsOHrGmSc8N++1Ln5+WQjvGF3JVEBPFQ2oosAV9yMu3MGo5ZAoh/xRS+VMIwwIP6ynrmgi5CCHB8pbKkiSaz26EzerU2Dg6E9P36FH81hw6CVsu+mHIdh8hF7n+HfX5BLKKD5gwH0mMbgSzoNhTQhY0wuLKvlQa7QBYroL6yBoTfg3ULpL9y7VGIJnGy8Y0dfXkyARw5xHJsmjl04uhrpYEeU3xQ9R+UwQxMLJpNk57JFBg3IaEsS2kDDFfD2ct75r+90Tsp5AzS1C7PqRAPhYSxCD3AqAUCSQugWJCLEgxuUt/T8XlVGosb6FTcl7qDcDJ5PIs3kMaq473DX40Rz1Au7/SAnzBjOBix4RfeRWabXDWkhtVZs6CoVN4olpYPAZh+imushuHoJH+YdhVlWLzvUYHYYjvNusPUyKASFZ9apP6fPHp3hMu/AeDnb/fAePmdyXPF4MqQZ7SaO2PLyUJnkpNZX3BN+raZflX6V8wwSTSLxyzIu5IvWTX1ia/pqU/uxMsmZ75Xm53TY+vXsozHfMACMqq8V0WEnbrlUiY/lbn/g9cvYtuPK0217j2tmepeSvB5ogs7t5/lDNPtHxpFQFj/HbjjX2VkkAlGiD0mW7qmC9+bjXppyIyHuOXXGAb+RQCt32vWHaOtnq7THRy9McZvW2r9/UwNIVp4zFpuwEacrS+3fG3LApPYK8AJVJC/A7KsicznYqND9KVwqJWqpYpcTQG57EEFqymipR+b/CB3LKmWOgLrTUy4T7agBQam75LI1SkigPpFat5hYo0eWJ4RrEIW/nOQ0TRLZApGNxxYcGkt3bboPaEeKs3Htrz1DVh1luKTBdpnvzGdHBbtbPoYvwB5+rPmSOniIjDX2JX65HDJZqa5ZsAQcBiT55HNkc8dCSOu2z2Yc3ilGGZVesM9TwBc0//rUQTTm6G5GwcxYlmC3gqMegJVMkSKgf3uJVhu8LdFd/gBYmiAL3qEOQb6eK+s4NzPTfgWAMzlNqkaRsMhD/bPC9A/9mwQkbJL9s7KguYAGxzTm3WQBa9VX676xlUJXBLyQGDkRM5qJTE1iAJIoF/cxA9Xue7HRGdJtrhzuFdv6WYemvLkfHRIbRUKoPzd67caOgUCQ7Ny84VorHSKSkND7Ak5d2gUgiIQMGCPExBJ/dR9UIabpalNjAwfJBwBAt8786tXrOQqZ4PAMW771I1xY2mb+CBnnFgGUIaYeLdXFXydZ4krKR/cXjBHtRFpP8nXizWQwFnsVzOMLKmphN0MGpaEge0Rp59WqTbI1JLLbAzp2mUYGzdboxreYTjzV7c5uru/00Gas6YK3MlveLi+Xn11KjhZ+X7IFCpg8iDNUXgqprqJ0x8Ty58ZSrG0aIPBzMqUDmsw6yDeA0+FU4msGHg2HH3klPxQI+nlpjg+xOfYhsYDdq5gyrRAaMFlbftBmH3wqQLSGlhhKobw93cXn7RjzS1hEe3YgDUm96ZtQWT4jsTJOYpJt3rE/26RMwBiFpvtYLnIbKTr/sVXEKN5flSRCO1eXCE9wiEQ7O2Qs8an7gYSjSb0AXjv7v4XBFTYXAi1Ihms1fuLQFopnh2eDql/2ZTDZjxazqK2XsvhvWR75Wscp0MS9u499UbKFr8bmjTvL7ajJ3cV98rRQ4AocXeRhKpeRthIuc4M7PSsLdbeQKVRnzKUvE143TUFDYahf2QmwyZqOkMjPBkHEBBoJTmv4wJuOwSjyn/G5t4HRkLZpdpaghZqnyJz6L6e9DEwZwzlXHB0SzOov4GtXyfMTlFuZYB22E4NEl1q84CRBSgFMs0AG0ilb/HCRKcJhtgzdd2iC0bwyV9bJik1q4TQuLFzEqfj1MYeXjakiMYNMgKBnXcUo4KU3VRup31TKhKA/qvjT8DkXZ5Y2QhKvKMz3qgBOs/V0OH5cTIH+maw3iIp32hM7RgOfLSo6+F8ZCs5gYzuLwkZOPcJXyaK/EkMykJFjlH08K7fTw7qW6jZcjpcHgrLGnWLOhPFvs1WYap/lm2ayWcfR9/TLkBHR1EhY75Y5arlABsbBfwcZxGvr7btiKCLY1PV1fvCFoAEkTVDQs9KcxKBlC0q3RVLjZ6gbi3sA4Fam4U/jagjO2mvnrqFyyoBUs8g9YCIKGG48rTego4v934T9i8+kFLyVZ0EtAXlnM9uUksrC8UDDy70mhOJqnKkW6Mtz+FLxawQcthHUc919oUHsvNGoCMB7e3gLKuw2cbPAoV9PtmPgrBkHUGmAUN4I6jBNBDF1VO0n6jdt2LrXNh90+IG3/5v7xEI+Kqk+6Stfd4fdlbqxZqpDwcrOH5ZyeW4NYT7nqorHOBUjgsx4+Rqd5yHPMSJDsi1pmuecBCz1dbm5ESMsjIDMe05liTWXIyR/8bU6+jr3h7oNTECY+zTjM6UWTZhgCZIzZb4icvMywAFeuX1oihcVQfNzO7WWT1Q6LnwNlasCHI4zM5bC+Thdz07pWrixhXoi1Hp9Ipa+4kRkFy+jDld1jkHDdcvUAgk+d0PwI7sMeTWV3VleOOO8Q+OvmNUItiJF/J8TBR5LC8h7msXsALvHUZ0ahr+Ev/mQxylSF0GG1+cttdF3anL3VjQH+HN+hfJLYGH8PQ/WOGyvdV2v4FjNXi8Or4Q3fqLiT2DtrYlf+3jH6H78SZaEFNmrNSSxNQkDi6K/Ntt6IY7ZstBcvliz9EmYITz1aIFK72nWp1REdRGwIE4XMaCwjvIyms8D8kQzO64e/3NEtBLWopQ74BUe3+nhtZ5hwHL4wbw5KHr+WPgRdo4TMXG7L2K0Pc0hEwR791roG5DoSMgJE0ZDXacjiSnJpx+9ka3aNgdsUo5zOAM6EFyTrMjGeJpYHl9Wy57vYldQs0mfWkEcMPN5AwoPvZqxuWCyMBaVTwFUNxKuADtom8CNHg+GR6FfMB2uXYF/v1vdU1XIWHCLCrD9AOBHhRIXPxYEZ6rWIT3ewUdGOyoHTzvtzDCeyF6hlRA2mYe00KApQNzVW9wKzs/rb8JWvZc7KVBYPNUZ7WBKJkj+hfdn/3iq9xGBiMfULtfZB06M4ygl6Oaxqnx16PuXiJ6cjbQSaGqqY8sLm0rtQQXe1mDRU/F4edcBEb9MtQ+jnnAUn9/xHNF3uSSgjxjcT2MQUwMfm2lCWeITwwyLI0YetB8mhKy27iX0vAQCZqYACYXyEvxUjcvPVAHjtA/V6DvnmnG9pwhL7gRsove8pWreZW0scKorOgUEE0b4+vDSTcMwxMjuzllgmwqp+92+BRKMywMEU622D18I+5XZQPoRRyRJd8zgi5cGth/TbDuDFVsasG1BbtDxWg0tmOQFz5iXYGbC4uwvrtstbBKBxSIG+qWj0WjgrUjLxy5KV6tHSgKqcyz3SPlITzkfHS3UjgIPmlOOIjOkj+/GtX6qRS6Q4TyLkdQi0GggxAkV2ztZJ3Bzcwkj+G9Gew2d3I9MaqG5XXKl//yCtuKRiQorx9QY3VrI0au5u6tuipNX4OffWGenuadgL6icBcsvqxbszXfUWrup7EtQL1qHegwFgEZ/oY6EL2uGkJTv/5IuGQszCYhuiJeSfK37nd9WIlcO5HCaxfEAWUm4IPVOB45d7YMb1a8Ov009pguAOJcoVY08Ob+j55fooKRHWFAdZtH65W/WfHR9QtPEx7V1ZxY55HN0s19BmB/FzKBrcgRyVYJbeCuG0/aOokbUqy8NiiDbF6CgvAhbKi0BeQG1MQjFzhyT3MkTUdTKeLqDvBkbKiXmyDnRQNWytOhxgfsJUzLYUFxYdMynMsm4GcNh4EemK69xbY5rD1xfl66u/gsWHFOO7CLJ1LpjpFd7Jhv6/thXMNkdUPt1Ku7v3VnWLY3Lqw0dkLawu1AQ2rGxYVQiYPbV9FyzGlgOJ8p8DntXIZS8f3uZEwDMeNw4wn9SIP00I28HIX8JRGqJpJyLiC99l+9JYE83AcqhZAP7Ua4Gi18Mhe/826Mf2HIbaTQCiulYoyL8tf6YXwJZFOIzk9qa7VqREzdOFb0M6otByyYMN62bRwZi5P147Plbi4ruGIqkPxKlTD1t7fb1CgdAPjzWD6dEEfvIub8+JYvLLI4tFP/QgFM1Cj87aC2JpHWCwWl+Z2+prRcIWkHNiQu75r3vj4BITHYHmSJ1RJNfpOm9Khj1WYj3kRK5WAkJKq9ttPH52xzP+SPlbueiBPN5FhaTrXc3F5Tslq7Y/hkbM/pPeQHYUcB4+Kp4VDabecZ9ymvGzFjdNBYMu/YVYQJj8aybo1aHqkZYaKMYxbwZ3NsaEN58gcqyROTPmYTN7hM21IVx+RcuWrTSEoI2Ewlp6cE/7GysEz26y5bjSuT8xEhlKY++dbPzWzqHijfUmVkVWE4MqzSfYHE0u8ZGsmT7NjVcf27YzoX1x0Xd7+J3RpTrC3qeBU/YTeV3RSGppiRA8zHevot0CW3OrKLqvc/cSyFgdHQQ/BJg24R4jCWNHye1zYHy/zg7Ef07SJ1+0Zu6HY3U8qSr+A9yj5XmYx0xybZddSm6KqSN6GNojsfMgjecf0PgvfDWBXFIrHViX/jW4JNcAnjMg8v7q6M0kMLgHlQc2eI/Mrlv1ONt4nhTt6S+VrXEx1tSrRaH29Qq19ykhQmIsYoy/BwBAKcpb29uAJmOLGLZ/IfJksNK42dCWKprAJcNUSDZxmtgb746axutBGznCrcRAIC4c6eod+R2iKlsV+t5acBJv7QYPghOkUq46Twa8WvP1/Ftt/XsaFD0QSq7ZlOLI11hWkhtkyxxTQpwqbyGxq97qOFpaJ7Tgu3OHer3+VEKHwlM8tRWBSdGENIgZoaIf6Iz4aykk+MHy3xtAlG2yElaF5sqjhfTKtqolPwtOoDmWjG/n60Nj21J043FfHMRoFaOowjUM1pa+4SnpMICP7HBTZQQJZRSSA/KxmlU98uA4JSw5OCmz7YaJvJ4Vb7bWXbCzA2x8s7n5CibZ4tZqOCbtpvey10JiQUjqH/sTxaFx7j7vmo0i0UgIUNc2idIzlShGznrYO+SRGknb6qhVBgwZ5+eUrzkp8QMoIARCXbsoGAQSUfXDAV3ssN94Bm1CpgnCIBTWkNRPHPB0ijVPfVOpvDyREH6AxAter7bBkws+ik49azY2Rm/Ay1BHCkSIHlDuBW1ztVl/M1NPCz09FM6gDtjIbS7ls8llRRBkJWLxIU7NVS4qWJNFJUZKd6KOnwTdVsW1hSDHpLcsHUpu88SgxdfC1t1tsii12epOLQ/7H5vQY50Qd5HwqFu7ViXEUS4tzfjj5jtc77HXnVPHNk0E6xnkurSg41I6m1+rMLBs0dFyZ3CKEo55SBELJoURbZvy8U6YvK5RLi5t/BGFfLtPoLnMcfKWsyhJz8jzlp1Uwwutg/e2uPefpvjKqJp632mJ8VSXzvbciLeFAThKTGIdp9OuLO6UYxiEDk9QLCxCPgm7XlA2WvtLIZSsrBxRGDTP92NvLzJ/L+FycKUFDij2s8Wtyri9C/+FSuXf5IGRlRs7nDSWB9cCXgPlDDKYqBpDFyxfYBM49WItIYoke9z8r+6w4RWYOeXVRZT1Za2wH7+WycTArBrS5c/9ULxXRJWapCCmOqeqg/F0iM6ZDI/MV9zhn0RTCBmta+6hNNmWHCcj7KgjYnmwxHz71TH508N6OJa8AqXpkHUsRhG4iPKThnk/mdmuMdxP+5jlPmD0SJVW3ErPE6pdUKnWUrvzU2v+YPRRapgs6+929C8c3FjBVN7of1y0C7luhqi7lpuJ7eR6w3hn6862TYU9hQyv4+Cg+hJ1yxkZQXhVyihrBxn8okzlo29CJoxZc6UeTevJi5lD4+gXKkKvzCF4jFhTThltaBZDgWNZKYe/E6f3Jv2VuNjDsAaHX6NL4hsuz1uK6cT2fK2hhP26iNxcTqn5nCFnyNak21BSVIkJun/0dmdc7LCyNSHNDFsi7HIkqaj3GjKT+Ha5lwiKXDo5HOYbZapfgozmiPaSmi5cB4bcP2bpfX9uhbCa/AcyDc+qvzXtW+tLymONuT8qXHnlLwra6DGs1LRA29969RO/s44xITKUX7QTYs28dm2DxeVEao2dKPOC1loJJ+Ti4d/J1GrIIrFdZdExsiUwP4iq0jYAqKm2pejfmUNzW2XsU+JEEwNfTkSJVl383aMaX9KkdYtoQBLEUAdAge6flct8zqG7HYnaauVFezA55fCF2S3OhapoR537xwEklyhHJ1+6rPX8DfIdwfZV6+DObdj5St/bT3Gg6UHzjLOcCXqd8+GFXXGQdD7XxNOMd+1+ctUCMQrE8s45yTAnNl9+Ev+JSPTyhfWtb/Jl6EHFizjC6Lu1LJpOyLcY3K6rMODyDl2P7xVLZJdRn+KE0BGRk3BC3n3/+hFZRotyww+cFfGlmMfpIyfRENYv32uvylsPPY3AUiX352yjokc979o0e9NF7qLexyhKMeWL4Ej9GLdtKDGBV0DFNQ1hPOrHMkqcQKsJff7KBKjxr5F/ahp3SHmocGoyCPVUEWemSYRjtspB5PQpOFkGV0mnc+cuARH5RNWqjBunOKv41cokWQSkqIK86JfpD8i7zvVzBl7IKVfyE50kU1VyG2j1lJS1oXK1z0NGYiSl72N6J96frklv2GAWG90YMwqQc7yTAqYYvmRAF365leXRnbjh5NIkBruIbFMKQnA1mZI7SFwFsaAmfYjkUxhjj2odJ8EB+F6H6Ggs4P0rzI2x0eyGbsfqENNkSlR/cbBcaNSL96NXfCdRIgLPOxwrHgfSM0VvTPfMXkOeH1FDdgV+zleqD7e8pUa1aAD0Jr89YWLK6WFIzcXmC24Bo9Wo+/TAcfo7jgSZkBwofJSx0g5A+YHjOIGrKBxchB38EdDJw9m0qqtgXVR/rio6riiKjx0AlWvuwWVOhAXMVZ2+yBMzfNhCSwyUJ1Keg9D3INPsH1NiD99GCw/WkQLl8yCVzlu7qMYQtCS+fRkVjpvZeMyrxk3XkQ8VrB07/W9wPpIaoqm0qUXDQaba7Ss406ZBrXdqitCCF0Osr2lE4d63pyfCFNrmcyYPM1m87aA+HZV+GLIGxwk8nAPgbADKMaPa8ZL9AZBwP4+hWNzBUviY5xWyWnrRCt7QcY218Wct8i0gYgBCsDvzDeGYx0Rum9IKK65gDpzjX2oPQDhSiZ43DcOAhAgdHApqW1qoDGa4YL1PzeQWTeKz3ayL/IIBHf7NmgoTLmhu5laoXMHMc99FWjEwYgvJg0/HZIYnY9mRZsTD84IBTdgmlIVP5su157c6sAStbKI6bWixZUr+Oxp7i6OsE/+38dohU6+T85xde5yNsIGh3QGqIZql4PM6fdO7/kZANiOsvBhV6prD/j5hTrVRhCI5PIAM0xQybvDZZcxFYFyR8/vdDuCOUGxWtNLoVW6LGk61OVp7mhDRYR4Kknd4STxhkfeOYNTes9BjZtycL0yOHUhidH42En0+ukKfuRYAEdgXbMUJs2Rn5ESmbjeCUnIIqr+ofcgOBfxKhH6dfrwGhHS55GT1n8gA2xvcGgFjJwVekQaBSar8qh5yX4H22DpSc/BfIs6li6UINImr2IzST8944R0P4E5FEqjfZr3hgT+ATowyqsDk16mXLhUHVzP6K8fSqu5CwKKjX0RkabSITTHhEp1jt0rWOBGXKrRocFRxNMmQaDcoNwSWAMgO7kqyqojaI6CSJMM4mfsQQSRnrSXQDfDAmdSKD1VtmQW4zMAzUFhxeu+pDNWMkmUK4HIsBjxYznChZmbOmlLn9hR8X9A4nfKJT8tQsC20u2x8t1wiG+KMeIYhOYEd6Cmrr7JsEft9peu5S/geYs26Jn+xvm5c1cXzLDyyJzxe8DmoOyiXSxCW7Mp1TcUhBQClPjVxqnk2iODe6O89HU+Kx/2IqMKS9PadLcmlLwQaVfj0dKeRzGCl91esw0mp081GMVSPZc/ge/Ye/j686/YTKzpKtlk+bfvVl42ujf3M1ZAEVQB4uYD7AkUyxCeWjRQfb7uASesc1c6GVIK3VrWSvLY4zcEPTdrZmITO/sCiwW4oT4wAH0AA1EofG0VmqWqVx6gzhbtglOH6M4G7S/PjNRD9Z+7x6B+kyOCV/3dCGpgCm5PM7FyHgY78LboSR7KGDJf5Zj0Nbjw0CVkkWVsXTOi8IRpqJiwziqMamWqaMrsl2JEogDRFvCHJq2fqcocyyNPxl1X2KXLZC5LQ8KB7uwjl8aLR4bIypDDDujESvupDzAJy2tHmuT89tXOalcKQtWCeKroQ1L+Mctz5mC+g19YtAqmHLby5x9TQ5mmWrH1vrFrYxrz/sR6dX53wW8iq5n20HQiecEfp+DbM6rYp3POD05KO7YnRIEu/eydxbYLW6BoJ9gtHHFb+qS4tq4WigpbLk+KYGSvPcNDeXprHlevL4GqeFkiAcQUXn5xz9pTXqXyGmgGsq66ziazc2nRM6aUuXIBCNwexoZGqXQhzsJZio7t5K9R0DRiljVsvqpFGVSWppridLZn3FI34h7qU7791b1uctgDvHMEskyZYzzkf/UBFGjW3wrjMg7n1oqcrztF9eTFuXe9sObJeBWHhKmLN4AnPMvxOnmemyVao+mLfuYVrj23A164si6JnyG0fqkn4up53GOzWW5ZSFJShpP6rUvOV/fEfFaKjrtUNArR0of5eW1Q0dRG7iW3KmInG4VOxER4tgFf/m0WF0f6lXiPELrHwsenSfkiGjfLpQZqr4QU8OAOUU79346MjZmWi7I7P2owVKbZEhFPUzLMJ2CZm7JDfMJTEZTtTZnIqwd7jxx/S44gk/pcV+dKtsS8fvRA6GWhkeJ/sbTlsg5G2f1gUYOwOJwLYUe3JC5P56sxtqgL9U/4Y4DLDt1Z0muPUgV+bds/Gj34Mo192j2W/um8jA5nYtLb2O14S5M9oI3EGqrbhgwU0qJ2MfJTskVx78dtcDip4i/VTF8CGmv8etBd4EEjx73PH2En2lbAqKtvsWUl5LDgTX6VspdMeSTFzw5AbEP30K5OgT+Pi+2A6wPUHcRtDMdie8JAxv3RwWHV4lY4nPFCpMgGBp9j5m/VVopyyS3b0In5juGbk5/l4Ah8jFlZhOjDXu78k8kaMT0FaYJ+EaDPwoGsNyNcS77Lcc+WDqtaaY3y485Y7a30GBA8YV1FoVvXjvo5rRHYROL+1mzI+zzRFAhKGXXjhnaF/FPBoZjH7h1KlqLJUQWPAXfQkNma6Fuf+J0qMyPkbRP+xuPVpBO1+7Q10kRZIbBT1Uv3I/+ediZeZb4NBUU6rAcX1Xal2lvRn61dGNvMTpve0A4Ovob3D67ewgI1Alm9ttG8U4I0uqRlx81I7o2aF0y83WfkYK6vrF5w1wI+m0XPNWnhHr+lDBIHHOdCJhBxhQ0Tm9vZt11H/aJShTC9OktG6YeEAilb7Y1C0BLcS8Je2lm9vuRYVSVQIlbKSQ1uYkL6suy7mC1+pP+220DzhEVZMgymY7l9q5I9z7bsGQAruG7SNKj1HolAkxaIOfe0Rt3LiHZt56NcA92wVTGPAzx2Q/jXtR+wK+avuwrvDrZpPJ7Z7UTC3mkzdF8b2bhS/81XSwCa/iTN7ootOglgbyt0RXXfsi91WpzoS18IS0HqnUA4Qa7dB/mOvHgHjASnJt+yRj63KP+hN7/CprDp7jd2oj5fbKc5bKLO8JWwb04uc4enpD/wHqquFA6CGqY6JkAYrDAIqCk0PHavuN9iLd/0gdX5W2VeqofveP4i518Far2zSpwlD9hfArGrZAS6zphh2Trvrt2J9wfb6ktkQc2uWwjHNCIosb2Y6xuRenePOrp/n4Yv9vG6oJtyqCZ4yunsQL7UCSZL+Zut8DosX5b9ihUnKl6mjbUhrBHYixu6AoA00HPvN2qwe0c6VeX0/xOq7h5/NkFOmktKfmvvNwgseqW4GwPA28XBLK905OEo/OWveBJ0b1u9RU5ebv1l6SBn11XIDYrHmpnU94DqrErksJioyWMOKhajm8Wa3QEWyQRBD9ZdDT9Yh/CIgCJpc2Wa0a+ON52xnPmzTGKprm15g95KJYPpcq8GTLlcqvmgKtlKjaZTVgQ8VsaXI0UrNpjbWBw4s0hi1pEHzbl8Z7Pjm1Zlftkuzjywi9FE8xb2vg70fgIINKRXPBo+AWvoHMOnK3RqAHP1s2HTJNMfmLiAr1dzMsrWnTb/6c/NDM0w+jnshP+MIw32TbQZV5fEFIhkFWBpnuvxXP8vNi+q8aAI8HLwx236HfUgDWFyQD8mRnCW2ks7xEufS0uSA/3/aH/yw4xvUhCiGIj5Wm5euauzE90Jdr0mxQ4TK/w6bcBIGk+0NnQlgyyE/j9tZ1HNcbP5PtJnEoBikqnz++7WjlIDbTFR701jLKXrht2s/atUVZEBIAWKgewHQNx+PQ3amaAMhB2HyKhk5kLlYAMfwooz+16d/RVLSSmDoX4Hbl7k6eR7A5HdnKEPL5+3m5berQq1YxjQ1b9NlYY+Dn5YZ3bHAK4v/At4NZGQ90GUbJJ2iFqzo2gVmWNNzQTxRaX8J94iGvK2osBFBrGrnygqqzBktqWP710n/auOnXYvglZOWHufDYDE1Reb7AYFnhXohVdVcDopw8KCjiEYjOXKIkKZLNeiMeRFvztMGEn56RjuzmoT9m053PugAthx6JDy/Dv5WNhMUqrJI074E6rmuknFtire4kEwa2/1v513GasIQa/6TBjNf4eGIOH9IUi6CgrKT1qJwevclNT8EzwTEkMh2KPgDcypJLYoV+kHK/xnniZmKDXPIp3Pt709ntlSPG65Veq5WH5kqvicxJqckh7wqX7jqo5b/ELqZJ/HcoRVjOZX/NFl3Q405Myb0R3bskQFu28gxg/3doEJT2fcuYOQ5J+2e6bG5p96qbgO4S5dayxxYicLirjrhB4Eo2UrgEzDgu9MyFdBn4pcEmuWgKz0ityoj+D0biyt9xFYdFjK/E7rpTpgaAPJYgORZlYxlKAHpn7ACSPhYZDhwCnogmci5u5Qpr9uGHetrAtQEy9GKqVS3nfPXZpKbMRFqI5ZmFVrJm4bDI9h9Auycp/O5+mhiB2wBtn5K+DgNPCvB5B4O13MYLuLqAVg8gyI+g9a3UvzwdfIjX4hKSuGIlxPZ2qSkv5fs//JQEGlKyGE5XV5Aqz0CPmkIYcUOEkhIwWIAakUT6ZHWbQh+g49cVPXWyJwYl4X8KcJQvV70jQJJdggXPtOnYL9b47qY9wWJ6KOorXKF6yOYgJx+blFmkGkPNZ6Tkb9ezoAQV5J8gzNVv5si116HLqoKNVoqtJcoAXZBz9twts2ImVQyCO6cM3UnLN/AbkuRByMa/TFWatSdYb8JPvAft64HCbv8E3R/SSGPmEmvm2g6aSLkMkXShmTvuQ3mUw/pg39iVQiOTtnoPt40TQW1lsvjvUvHZjN4OVgjuZmqG1e+gT1vIs0vsW2hAwWAN/hGpdKPyUDLY7pLZ7jJdyIIZGwQLwzIgiFTbqZ6+n2gg0wARk2GT7iKj720hnla1k+L4lRWRC4mvaAem7J50uR4x/ww37G4gPoo6CadgzO44SGoX4b+hpLpkvapq2IMTbB062o5sDnvvwkvMeOfNX/4pikMpB6Yb3HDPYwm++dM3q9H1rT4/dR+UuwkSv+AOEsrJ7qCGep3YSugZfZXC2RAoBJzEvnedO7K1Cdh2ZzASF56DHvh9yDsLra0ImULSkbNzkQZHFmvWiOPJFfS2S5RlPqZRhEhmID6bezehobYHt6YrLArADk2oBoEpV5eBcI3c9CvPwPNonYeYaAPEw46YXu3fPBdit2npdIVU9E6RlWmSGazKloJEIQPl5Qb8D/n7oSJOFjqyy9H6Vbn+Dfu7SWJxG+SwtE/bw5Cv6DOx5h5HYhNKOecSpJ8VagnZH7q0rp0qxAtnWbiwmaIHsPleFV2j2X16pAORI0UFq9eON+scmQYeT23QRmR3iTmKKrfIXYY4Jx4ycAjzjI2UgkxWSoQ7VUr1/sBhyPj9rQufhGGCnlLlxYUeags9SRWvPOAAZW121JhfVnN7ybBZubhH8qBSN9Ev8EfalWyfmRu4ioqwfHCIzQ6Wutaoy/ElZ8keBEwBXop9d4DXkl+OjftJlNzMpObpv5dZtzwq3ScoIcpaU1iLHUhOGXnLSEwdMkjVinoRmtcBsXNG5bq9w3OpJ/m5QK+F/GkpRxyuX9ZVFdBBoUwV37H6iPtIn8LzqGKGPGjJV112d/O0flUaU3HNa58Pt7BuaRQX14ph9Z4VRq59CjNlcw7LuUf7crfblM148br/xfBWYxClsonuDW0poDvv+h0/7dxInHrcv6w4qnIG0hH/VvPMVEavR3H59j+viyMRsxwMRV6agZaiA/f7arUMrIjkhy/c8XlLJyQs7XVFA9lBJjQoLRT4NkArVUrk1uZtN8x8CXFjhlaeV3czWou+/TW9cKGSD8kTmLxh721r+8KfgbchaQyREuwSng55qlC/Fpzq8hvpZ3PzhJdpYwi7WmeB8v9BXR6GX9ixp32UPlGnYedEf+QrN9SZIlQyqtpyePzLPYOZTgmJKC4CyAl5g3AVm3Wadj+rnt6KNwx77lMxGxq/uGENQbB3qKLAP6pRR89OhXc3rBYUo5U6Eai2xsU+KK66gpIYVhJ9s3yv0J3rps5qwpC066atr8ijP6GpuFex5Mzt7wX2JxvD38BUbpfzYAkMvL5/3qa4eRPS5/YOphqqoXWioproNlu6OS3gLXKTljW65yS6TLuvG4ObKwsY/bMDF5lKIL2QWbFYDui5UMgv9ZxvvZIznMWkn5nW/6ln8qiUmAqJyy76t+hGSK1zl8yDtS8QFM6RYdVjAtVpKG9DJdBnDnWueMqd9YgUqp9jubbodIgp70OGDqOzAbkdXpM3U1upijgxE5+ZTKsTwIPmIsElbDPMgZWyiPb5X3b9cV/2rY7eflQ8IrRbpdqO03mfKpLujgf7fZXTiP0ewQ9bdir5TipE0lwZY2qtCoyfou4e0e8kjzfX8BCKY93rxcZhK3ycRpODZPyHug67xApqLyOtKZsj+7ZybJ2olkqXeRr/4d/PYXaUl/WC6FTISgQjFKFRS03MKFxR2bwFnBNP4roPWjpwWQpEyDnTfQ+K18dfO3nXWKlsGrEPwbwK3/S/YyG8M0xGVG5TeSV3eXGtMA9hZmfXrLFX1EthMh8vctbam/zC3BIRNLcAli6sHI6yOnIi5fHwkuvI0bIscYvPhjZEyGFTfUQIdaVECs5M9bc0bnjeZxboOBWR3NI7Qio8Gk5U4rhVhvMcKLDSwtpdVW3BYZzLbc5QAc8vUp3QpYuts/K+34DxlDA8ZMs0wgxsiMhgGOUrEPsss3wL5qheoAmLFcj7Py8JLzEM5LkiIMkRdY67x8AoHiFS7nHcoolrHZ5ef0nOUmC0852AM1a7gc44lH/75LO5C81Wefhqis3gvW63THr00AUO7+dylComfNPKX99PeNVHLrMzMOim5Kust5dlyzCKlJuW36mEZUpWFmGnVhSnF5J/RQ/Znzs4RMGPouNYqxLCVQdm99PDsMBR0z+mvM5CYOZVjzEfakqL0Yr9JNNVdpHMlY/0Bi+PVqEt1UhebCXX80QKbytZVG5BnkojVgBFSPkmjSH5Xv6IjgykTlsRBV+4gfOoyWZuG1/vW0eznueiqWtGMOunZB7MYb9VT+6m0z7QN1bbiQ//q+I09UO8fwm7TWB4AZc8WqhiZz36tICF0ZIfaWMp0pSo2bgmGms80wa55GGkrozwOAxW8DCBiYBY7QtZzkQpezaGq4uYiyMd49W7kidfrwDYRLi8/bVCNF/b0dl+7uO2xF4Bhw1OxDJZr3fq0cJPmvWNrxyY6TXs4PTaG/t6myh7r33ej6V5Db3pNoBZQtz9mGq8s/ICsftKJ4CHk9x04de12iHKPGQ0V4BqQUP5qn9YRj6DhhfvAdQEtk+mfwHEewSlNmjLL7x+gfkC+P+ZXlGgGMOeC3vzAdTHemkZayHGu8z7k5NkY3Y5mglwXuz1xmfC7GtNx1F6BnZvf2ufnROZ+xENYAvv7SABIC8KJPJDjCpCxBrgy7XOhQNw3xm5tw7WP8tcrAbQSrcPFg4e+Q6CP0kusWY/cZtCN2VClVctz0fW1/uEzi3VJZrxCd7EiCpdP5+p+6JsjXPItYt1KzsL1NbUNz5CeQO29QxPbi7xdp/V0j/NCnkrn67M9mM68QgtIxuB5kk3VYVcf9NelIV+Q3hc8IVsl0umbn2enZPl/nVDMQbR64FoGuhZSVOSmwYouNTJ9pVBnLKiN+SAaMK57jYhFoz1y3nboiHhlIseaU7APjnqjlL08GYj0GoDMq2ViZSdJv58Nu8xfSwkCNRmRlLrH/lbazIopFOS1AGsfgmjImuTygxZjPERTSrybAEG+90jjJfi626faM2goUiWik2Tus5Lsn0ruMjAVDbq/QSSsgLFK+n3iFVidgUB1d4H8hKiWSussbkzOp9Ttxe9/jRw2+0Utk9XGXWTw7G++olFA4GwHG2CeIyunSL5euMRXVIwDCeU9bmpEN51Eu0cBngGWPCSLCHFyDQPfHok/Ty0rcGRDwWBSmYzftMM94irODwHp6gqYsrDYPGANGdw1cHAcycUHe0LWuTIF38HdXkkQ78RPUodnhSwksDSoXnRiTJ1D7mtdnDHWwv7GA98amQts5wjSNdI6zDwYgIgKyfjPclsUmajakoWiD9h6njoHJ3qri3/FJwWLqnUDC+HpnKWutufpCFxy0VimD9i3mF87SZgqJ8paSVkL0MbL2ImLka73h4uMX3L9kXuLuuglak7DIWEDli9RGJNE/cMRjypDqgH9yI4Nk4z0udX3/NlZlB/TRxjqv1DR+T7fslU2w4GU+RcXTKu9WAJ/ahwsuQfAdiq5ylP8aSkPbjrAlRwisRZ2aifeMZhV906M6fkOvAolYeN/VCqx9TmyCCSV5+VAJd1aACMK45I1sm5JwXbUjpSvb3EiS9q5jpbLK+e80+dFUOvXCcsbcWtlEZ3My1X/1nYJ/TzCZXc/Yk8krCQ2CQquOFsyzv41SnUoGgQRaFrZFAPHmLmDix5C/bojJEEQ36w9IgITqT1gLeww7CTe3QIB+X4VYVDDKKpYkQ1XMyZrV54poe0I/oxw+C7xMc26fnFK9LHCRy2aXMdrDgQqIOzfIv3ho/TWf0p+9yMs/euCzRu4hQsvcFinznCDlYPR7IftNuZqYoDktmQLgY/WE6wZRJW/9rlaQ54W+QpZtwQf+yNLHTOY85rz7aRHkZiDAVN6Mlv+Ab/QainVDOaTz0WOIab2EaAfClVusVhz1yRlRq2QpQooLRCHJxbmrVzPTlzTnpPO1csho6CI32OM2k+Kz13jQUtrdYJo3FIF/Zee89LdDvVrDq4e4XXsDkdgmmuUPBV6+TH73yF8ibvErrTqxxcW3maeYdLiV9fAr6R50JUk2yj8DK4GBMPAhnhdfYlbBvivLOvj9v2cPLajrf5x+8ZG4GN5N9LYzBtC92U/h8IdLKXdkK2/mEU+zjr/Cke5aQEo6yNotBmjIJz2qp3WvC0bRxzWIBtQG6hsf6DEpySlddZSq5gXytPyPu01arOCv/kGUeM0jizbMCDl5mDlhycJ4DruDuPUWyX0LxpjEr2sw0DKUtBHyxRIcXBWh6+kw2DekxYluvN/6nmnWm2dwpFQujjfwbD8GgJPE5+fu2r+Dz7OtXygL9CFLlnNziwUIztUAeXGYwaq9MX9787oZA+/uoJKAUDccTAScilTpGsWNZuABLIMuWqF41wELG6j9vtnKbZ+EhMgDQrDGI0ZVgXLdk8zd2KSKEl1HAJKtbDUQJg4zFA1bib6QMsfkuOB+bd4LMxW08aIbuzg2mtpuN6vmjlkUQ1pVTu1lo/zea9gUyWXjggt6TCgBj3YkjeVs4l7jVuG0nD7wNjRrFXw936yIAB8Kyo9t2m2znwBRLzOv44DnOj88en1+LJXZb250tfWkiyH+GXWrUQvQ3TqErStzY1bYPytZ9EqS7LojOy4vracRvIzEsELOTSTBo0mjPm1y3b1Ux0xVbcOrcPkOtrMpuoPjEdNknStFE8/R7YsMHapn/S1qy6DgPWo3vk1AzlYdbq8y5sLpNJs7hiSNZ9zhCBpXNE73MfN0JyJnqSgY/8X7YIypX4nfG2eOXXcQiQb0XfQ2lavXaat2kDdYePEknFqaJet4MFJlpu5yKdQE2k/Gms9Uk3QL0a7vsHWbyBQv4NsfnNxCVc+Bs+iAms5G2Akz2v3BKFDBW0qpcZ4ImiGfDACKNjuTVeSaM7Vq/DQCtYleGmivVQZBrw+yQRjXJkBeAr1WNH2OMcJh4xgMNTVALBVZCEv6rTQcz3mL3zjfQo1NQZpURs+7Jq2ON8IX2ND9nDoYdJ6mKaR55iqN5cipAYh8D0UCEuHwZukGOxAG8Sdp2R1dnEzxCEA6swjorF7nBr980rW+KqBQ3Cgc1VRhzSIZLQZBFBgaj8mhe9crh4WfzSi4rSGlHzoiSjxBrtcbhj/V5V6YAK5B/ms4HEDhgBLRJFKNfQn56vGT+oiug81+4U4OC+id7ha8HlWgrL5ZZK98tnhPcKk5CRy64Yh007u/CLxmqB7V4WpvIeC1cvio8sYl1oVwWnVf/7LkliDD1v3Jd1eZJUyzMboK5obYzK5d4gKceYunvBDivsmytNkvgnV3a7c+Ab8Xha9wYBPFpJK37sLVixIhAxb6aFmxxRkbLuTAJaemjTseKntUX3ogYDB0iFk4xs/ZGIP8+jIMAvsBN5yuGrYq8/n+uDFUiXVCgmK0Ft2XWrUAzxkKXa5WUMzQgIx8H1+V8fYx6yJa6a+uLa0zpJDJC0j1TJE7ouzIV+j8wN9bOyiOXLP+8vZLeFWB6mL+CZoCuPTmbj0UrjNjprjIdSD8IeKlUrPoci4TBzwU711Tb+WIWFqRRCwNtFjzoxECzzufqYODMxSwZpxIL59B5IYG6GMGU+swb6hUNr3aln3IyAw1dGPuNShvEUaOdEO7HEDj0csAjD4OBRcSkEQUoF5cwsR0QJZADD5BwE2GGXcWFkhMre+uBlWiHFyDbmGe7v8bNEbVmxSyRBj+bFnrjKy7bXHt7TPUaMBqnKh5bibRyUcDxZToEV1wZ/T0Y5Sr5MqS73Wps6TDKfiGF2xpQ+KW9q0i4kvpTg5nAoM5LIlsRSEDMHTMdFKVcB+BwE2V3eUNfxkDXwcnnHPsNE0GZhXrYdVjlBqzwuy48nsgYZt74tA6ZriNhxj4AZWL7sQ/RJBgaaxR9wEAo3G82rJ7WVgVOWCQvOLjDZAfhIxe063MUDyAbkTZMl+SlB2Uzw/fL88wu1CuKLwDcZzrFVAB1CuJ09uXVGHj0r1KOaZ8Sc0Ji9fvvbwHKeBDvc0aDmxIQ7zPEhsC2SHSskXuYvp2JDTz7WVaau6zFOjRO7qxSdMvYeunehjprI/t4XolBTqoJrJPZj2PxTnLWR2TuLoQk7YLPXpkekroWCULoqVWeH6CI+RM21/eg0fjE8i8s/Kx06vGxtTyRzHO0mAgLkph/SorZsK+X01bBkVTEzWsyCiM5XujffaXqVZl/5aMND/HmCvvuTJOysB84JioSMjnUoPcPFwD6uC6v8kw5qK2gMC1l50GNKPf9xSx4hVlqhSuiQvK1iDO2DRo2xgg7SfFpBshYssdHuDjhfTNDy5/W5q+llxSdqH6LhLpvq71JhiwwDA+Rrcl4heGhX++/4XqTz30ojVfQhYkPgJ6bYIzzgd7BzLLrqhbfFS8a7s9GwV1QVOaSfBkC0LW1ixeOu9Jkw0usuMype4TFOj8yk7echKNlnrUhGWS+yhGy0PuCjGxDpoUephAApex02qjMcI8QvH4KKFpORROrVHJFApNfGfiQJQDKNfZn6IfXVDBhtd6tcgdBcwawK0v+2KIkY5F4JteKJrDylSQYGsoLtT++6FAbzcVogGdbKhvJkNaov/SXQydMSoyX/UVZ+2ClT1sLMkiWkSwMqpgPWuC84mAOJsUbT5MkslbQUCLXzFvyAu6yOsgqchxpXs6UfF6EP92UhWtUDDFw7I3GivMsxgPBiOZEgcwJ6mIMOcIkl19Jq0R7ptwbYaNt98g+HuKdqUZzOekz4RnlCNBaEcA0z83ed6CkZfSW27NHXtqYaWpW+moZTbdyzhu3/9QfRBS0clnkjjLQ3jqv0NUQfYeLYv/rVnc8yEmFfedeTsd1jlCETatwr1s5J4L+SMTLQcpf8JxSokKpiPGW4BYfL29XvotncsULw4twaH1ZBZ+OshbudzIccHMJ9j8xKrVBdgOYst1c4Dx/1Mf0yDyHnY1Juefz6zeqSY6LY2mIvN3NQO43P4ZSXJHFCH/Y7wgTjsRJMS+BSePytD0qKFrLnSFrzmArfd0oBrWjtwLXPu02BVi8N+HzNSfWbDniTwaedJ7P6oK7MhzANJps2rkiaWbS1q8Eaxu5vR8ibnKIpuQ2oOVenn9NqAN8HThOoq8yrym1QQtsU1omxQfHSuODWyAnceT+w6db2jplexPGzWZvPXxK1zDKPfPeeE2LwDizWdo5yvvtmTLCN4WGOX9L+p2QtakBWCo94Hzy7q2JLomKGjW83ZpgLD9WmgTto2yAmUX3Ig2RcADp/VzdwvoMUND865GmuZqhbX5/voUOtRvo13NzfANqrsUCVlYxPAan+vINRp1rBwptVL+DvoRl72Ecx1mTfYZ0ILRHwUA3mwamcZOB1ddfTs5TpFmdDhAMGGuWyz3DUSlxfYIsLWlOhmpA5sRG4h8SfdxJ63I6UsPMcRENubG0AsgU9PjJE0immDyZWkmQ53fnECQe0enBw9nYRQOs5yNVSQkmd4H6a/UIgozMVXSx5/H60tIuV0oU9TKDDwDbuBDdWxTiPKp5aT2xI7/dXYUzLuo1FE3gqnXWASxvRhyK+3rcSZ3FgEWMsmrOz3GtWCUY52iUYGTA2feq+O8nHpzlcrBiCkUWVhDGRucoqkOn8TGPevvtGF6yNAwqj1Kmcu5Ppa0mJCd830WPAsndEhK4hGvUkiLzkLIJhYcGlAw7LsNPJs5ZC9ZSUn61mivvsEz82YdoPBbgyjYAtbCHSAUeKJmV/LmIb1qkwy9BnPNv2cV2/E4MeHFhjgMVQ/8q9xfqWaLurqWTtKpUakNuKPdPNJuZLIZjuWg+PueRIniAv+3q9zTueAgtrT5TcK/1YzsUYBZ7B3Ta7kx7R38cB37Rd+yD9F+mPnENQps8C68UWhz1P/eiDSlV/LTo9I3Ka2DkCZm8zVP9ZrPz1PiRS3XNfZ9yfa6kHa8mGB7KGZIGZVQNCrRLtLcTZkh/BBq2Xa4quqdcw950JF2FSizZcpEJm+WCQPqt845fZrhhTDSk+LpP4iumDaVUhCBChsEA9HWcqxepM+mv/W7OF48uwRNwWIdp/La3CzZ1zUKbg4fBXGQ6TKDIL9fj/4mesgmFxmmEmdeMMb9IwYuEIX+7VB29xYpuIZ4zMP8qUm3B0kCBuwb7quEmLSLkInCz0awxFO75I6XRLyriCtDRMZJ4Hf/gjdDXEgdnynxfeKsn9JzjES9u6/DqG7wdlDe5k+OFu3cnTShP0jfZ0t3ByAEZ12mSAzI9KfCaQVU5OIAMPrCtDwYhStG+WuLujy14mUyEef2B4Egt3nScXyKjKDR09dWyjFZsFJyX953ZJOjGDdcGGSaTGxPwpFzXWvWNgQePCdQEyLo6A7g3Hajv7E/caJC+zqLcsOmiE72tVz+q5pzZA1YIVH2zEbqvwqCybmRv0b4+b3lf2oTl11Df99VjuCo3axqJAdXGI/vhM//ErDsaOjBVSFt9rujYiczdxz1en4m9EB33iH4+I7ud+DBnxBgoxl1pBgUYSkdMiTBB8Px3a/5PlqRD5zg50YB7XEOb+GoxwtXfjcU8E3NMESrKvYjtp0jEZPE1ERBKXL+0u0ks7c6zg9lE4LK+//IY7IsSoLRfgG5UX6seaUJYLFn603wXTqOPoEguITxrCfYBCZS3DfqHX7wuX/jvC+/W4T4IMSdthWM8K8P7Zeg6aounjTlq+5AwTaec+r4RweCvoSbxW4CoecyExHwuts/77MhMJn7XLMyXYdXBsfauiLLLOfPsdHd6QP0UKzsbFvf99ToQRumRwJtPzgAP77Kq9n2p4z7v0bK8ZY4tUWZ9PL3aPc54RPvcgrGFYW16Mgpf20cnjke4qYXbAioX8d9c3oKpntTRaqpv4d/rLautd6AthNJXbWh2YpOzBVG4kV09FIINf6H5SKexi5k6n/oeaAQN3JMOOy63Z6hfC1azkUFL/E8Rw04o9dKZcYViPuRvV2c6o9qUegAG+GnZu5+gdfYyxCJhoVkIHc9WIpMyWD27OT4tSvHaLWEFY3IvHuxOlT3X8MLg8+2Ye5HmI+taLMdF8qetGVRRubqxEgbwoDVMvcryxh1G7bHQBzuKHSthyNnunXxLM3PHf2f1tDNJ5xQniN20eVvlfZz5331PfcD3TqVM1teMAxuN2p3t1yV7nEhiZkVf66ITtAApSuPKugrlz8Zaj3xX3fZXKCoF+9KeNxotDBW9133HVPdEhDO4C69Qa3wAtqlY+MjZTHG2DQNZwfsR++qmuFYK4VPgaPfdHADfmD52hjFaNDCUM3SjmlKp875WhVPfPgtkGc+TDwx9aIb9MGlx3YI7zgidYwbIMjoanIRdr5Ge8wfoDwsI9rEqjgq+vSwpby7TX+RC1J0mu3uWkPls+LgY7DD/N6VFdV4g9PZ5U6WiJdOYSp7Galmj3XGaAlNIB5VTUEFaxsXI4OpUmFzkUeFcPTpTvTxXxDjmsOscfx/uqneMS0E2d/6qMYLl8hoL6Fnhh/wgWLAUCVrZXD3GcnUEgrcnAPmE1BpEcgQ15YzPyBDX2xvgSnV5LsyDRlDDu2+SqVvFvq77lsuy8819KAjjqnRhsBqJAiagxOjTfUPQ2pOnTMlX8M+wbH5vPH+yrO6wdogObW6N5uviK9DqHI6CZeSkhtgFfB0nN2v/yp7jsfqAkdN04/Utam/zX+S1mZgqGiuwndQWi71MS1cNNcyKZ57Pam/cO0hsHElqdokvWU/tO15WhknwJz7fDD+QktVCCqe5s1gDFAyqMurGS9iUFZvHZjKB67py6G6O9fl8wpHlvD7ePkG0UXivb9xseRyE5IFvjG1wBfot9kFTmjWRMqTNtTCLDJFpNr7Igyoldod21m9IMW/Gc58D9p4DGQTGXY6q+xMWY9rGrT7Bj443sXzFHAWuYPkqHNlA8Qrz0uWNyuz99nSfn1zz+hUEs3dzKd4O4iyPKUQlXqCDZA5hzqWDhPr7u4bLVzXG0laa8GL8PM7FE2jtCI2N+n0mz9hchbRlS1jP8aRNVziGXXw/po9/Q8xPe72EYDBllOSyTw7FSpHQ3ybHLgFuYgtIOAXzQo/RZdd84T/0oKHWJKW19+Drtqr6hImCxCUaN0vnlXciZVRHasyVuLYOVPeQzTRcpwscNVqUF6VH6ema3fcTWcXghKLU2U10GjSnV1Vbk9QPwr/msY1uP8T7kHgsNyDOqOwo+4iA1hXMRvgEBHsNQlVLmS+WV1jYlXhfZDP3iWcVdT2QWmirU54uTHliTjUtb5PDPZ39Jmh88fCAgmaX9moLIqm18Tgj5nPFqJcgPmY9xpmjNH4akFZDWSKenTuRTsEAtpsHjJENUnj4r69h2sZUlOImLZbisLV1f/Dw5CuKwgfzZ5c1wlkVHStApYhefB5TPwS7A7lSgvVRWnsv+AwHhmRBV65mLhNz2BMKdIlCT+i0w5NMMbEBcniIn+LP+yOm+qqqktVSERUDHRW0pG0v0TijLXaDhrTXdLcMuIvc44/7JwiVWp5NnvSoU+MVo/b3BUC2A1Lq0TkstihIL1w9iXuTrbKVFYbHU4cJA8B2TupdGeS9AsVefbK6Mbtx/MKQXqHJ+mbVPEfQwilhplaeYu1IAbm/nw4XRrsZASg/kbV/E2oy7KJMqAzwhcseQCp3+qZDaTytc9X8B9kAxojbYsgxpLxwAHldzEv8TDSNKIv/XcFhMCIcs/ZG4jv5R1Vltcf86LuZt2DNbaePlvM5dHUb1MaYIJyHvcWbAOpNOfEBLQxMe1LH7TkVcd01URaY3WbgRT0nYwBwmkIt7AcZX5j1X3TWiqI8RNcCFY7s/1Pn9D7vUTm8Fidjezbi92Wox6Cb+RXLhEKKo1iYW3yqwjn5Tz2pCOuxdYgSSr8TfcvltgwMH4rZube+Wr3plH5iIR0pXNRDc4183mVfthSIAUYNl/MZTXoQbPg/Rh5ZBCg3Lsy+hbdg4DA87bLzoEeKUj6r6KYvR+5jrzhaXKbbJ1N3QBjhPcuEkRIyWJkutKnnWs2t/eO3jIvhH8RBx3vpJ9oQ+O+hGW0neuJd6btqurCioaYQAOhJVYbIAmyYi0y5tFV3YpUfNCEU82ATYEJZDUk4fZaLwKTt/L5q6X009JaIUzQmQHDKJttSqwU1TYVhrgAY9i0/jJZOUORmEFuRiQEcUH4k7nqcodY00T2IzP3zkbytwXB07588kEaxeOPw6R3Zs1bffavujY/meqenYMkNAJiR4Ri2nlQa26wcWGEIQAZEBlxgYcFoYBLMUBpyYCAwMa2BAMaKHnqWMcvJ1CFxaUIutwFH3QzTOnaAJ1abH6B6E6giW4xmtOzMRaF0AdKKoZO0E73mOBJX8Qd3Mr38ttFdmkXwg8fJ1CRt+Cw/lidxpz9CkbUGZs4b9YSJ1STw42FB2tNoM2Ji2pCU0QX0C7P47Lg7zSGPHlEVHlxmdFgLH/8mWL0Xkps3tGfcRzRYMugzmCMkWlvyFWz8XCpGQCBuSdj6tfsBbK/imv5cyY1X8IY44+3MLX1l/SM5cYVQP/qX2xau5PLTsDROk0toii0pxetQSXp59RgEGI4Y8wHWbMlmOfmOU9PIAHTFIMlDnY1Ca/5kurMkIl0WacvRTEE+g3dSFWyk4CKDc2vE8/26KvYLgKfIgbYTe3dRZzmq6F5R1fn6FLK3175XjIriOEqiWKSUO9sVZShKv8RcdIumfpvlQDOcQIhxzw/XwzktWapnOiQFE7TKFLT1B9jn7Dg2S1pt3nUifmU9hH09SeOe+T2s/VpHec2el+FpWPa/E6enrjNs2JBy906Guc9YqUI1F8ZoBjN4YBB4dnxxwh+iSUN2t+N9OIkE5eoZ2gn1UZxSwxW2X97cWjyw9O4jJvcMLV/UQli/RFG/XrwsJ1Xp1fr7ymeoQ0JdB/v6haulb9wptiHIaVpL+v+swDjnE5jOxBWKBnhc5tBQFxZXW46Lgk8HVpsNGg0mp9i2HisSM9SUDhrCH8+6hTtipr6AnJ4OgaMoPfFU0pQUMTbMA47+Rmrrj2i9rsABqL2DMM7qNcxZDzSiVi+h57izqpuvNo/QHLXhNOLgdl/LuIThTTFrQLdh7cuw1Demwx4WKz0FG60aAbmoBrDAmXjMX6KY3+/qA13qGK1FWQF1jLj/+cxpDDhT121KzYUOvtIgLq4Aa+OInhEHObaUVLOCVFatY2/yxmS+xocIq/lvliOwMHkZ+zuL9PTZiav3PtN8CsZcmRT5F7w5dOHUjbhHMuJX1UYTI1bD32PwzBphUAjsWAhrAOBObV3/bmVBEWw2fKcm6rhH+xKKtZe39YAIBRqBmLUzS0uqc3oJzPQrvckfP3KxZjOJrxkDOZD9pkJFEt17O0n059LAZMOjHSz7EJ9kFZertbAYOh6D/+r4i3p1bh8W89cZ8uQDUs4G+9LMhxmTKdkEas+ZgfMqakG79gAJoQcaGSyMe4/ccvfopKHsZ0odGEsSpPgkDc3sOVa3fQheXm6rGIUgCaxWuE1pOziEGvD+klqIQ8Xoy4+EAlu5JZ2FiJyikHmW8wzbHSL4ZksMBRdwrdPLFjGywh4xGWQdWRTqtQDPUuGb7tnwI98d30O1JPBXMf8mnWi7p90tXwtg/O2DKjNxUqGtQqvyj7bCB4F8QFJVJcnkt0ugoPvMa9GzXRc9J/SHqiZhP8BFn//+09pq0Ly5RWRta9bkpUYlgwql2so/zsI8GHVYVD+88//azRJ32z1QW1aLGYG//qlO3O0QfDxWi6moRZZ8ei+leLMLMjmCFo5cnYoGI09lf3hgWGJkRALIJy1aN7+jr8felVHhuEvVsgVpbT8izWQUhm7gE43nYiQ5lewDsJePxUMuKYwC+6mzHPXbsZ2fQPgND5IOuJaWUZbZVYKqsnxjX5hciqqobnbimlA8cpqF51wQMw6VeG290Yu+vqQWYr9dR1m5SDl4uwpbjIi29FS/jvMuDA31ZYtkZhTPwZcp1le033qkDFGItXOJzczTdI15R0hkqtTk2mlkw4CR6h71C/yOkv6r3rtHH5n07ej4JbniGP9B/uzhvA8I1Z+sC2JrinrHgluekttOgHYVLuzxRVrLm0mlbal9Pgy0KzppCTR2u2ivYQNJtUDgb6n2WYPFTGLyFUd7RoKLP29gw9enA8XSek6aS7+pEDgp2XDtyRyXDJgwkLqhMzAejC4GAM1zivhH+cRK5oxeWjvJZSxlrPzXVjl1DXNFGNgu7Qyh7JVJUbv7oOHNRZ7OynqnzVIpzZFx2ykurf+L58XCz5CghK91CAMEtoiW2yABSX/M08KEL28Z5g/NSi/MAHRfq78iWeaQyCqdTjWABjgztK6gVlVGLTZ4/tiBKmXAk3LQTEz4HjZjvI8a3J14fNWy0V2zXl8L+rN2N3ZWXi25v29IKwpe0BKv2ryYmnxUHiM3wmrgz0czII1TKl/fyoWXizeI5dIsX/sYYkt+K+X+No/QEniv6ZApfZ0odMDyuWnOkCndTxjDEua8H3fWh4RFdlI/hH79uU0/juLT+ZD9Vct56/Hz4te4zeAH2OARII79MQYNFTVT2nR8V5IfTfQKz2YlmD17mgej1QL4pzWL2Y6pf3Zozm7MV/PE29C98hT1lUOkDp5ZKCedL/42Q8qAm8HIkoigSKbmFWSG/FrYVYdqbAxTxlKXH3VOmAr6r6oBMjzcCI2aExxhfzwzQ4jKbbDX3Ie3uuqZJlsi/NY9nbbZNzTd8RrkHHbLDnYOhRLYwtOZb6/zOr5xlnNhEzhPf2dELs+vkrJI7B7L1kPiKdlUqWr37ia2SIRVn67gIg2GzzVgpJI4FzSO3PofbrhzpByELtaX3wKIU7xCp9wu4h16tCl16ZwuLXQ84ACaNaIZ88jiEqy5QtjHYWMoynuK9z9DLZEc3tpSQqh6TXfgWtEYtoXe/EKBz4StWaE7eG8IVRzuVGXShiT7xheTGA2byEw2jxxVDZ4E0sd76fGZfzrYyLQG8DVHmQ5Uu/b7V9F/yICzOprOFL+ExyBIZcNYAOsu6M5PBO0ev2x1Kz/lakSeCAb+ij5gcRYWlqyVJ0yRrmySrnB5L4HjeLvx4YtfvMMZiKkMvAhyYHfY1A5Y9SXLweEYBKN0+55WfclurXgNiqnw76iZniOWpTAus+ZtWYK3Jg4ArOR1/LM7RceSSlCkctjBBi6SDg3+IAbm5pSvyaiv4bFFtylv5iJcNi317LyvQwe+UGMC+UMgG9XnxhbcA7Bk+ctvG7rm9RigutzDBLnzFi5fqXpEuaN+C2NyYiKx9JtC8+HMVifPCE7Wr9gzNhScQxvtwOZGHcodM0i9kQ0oyaRDNpuy2uqpkhcpUFWZFJAE8zdwFz/URKc52cvTKqN8efXYxNruh+fJdQznWKvLMftLgiI6QnwXaMKGz+n05NuOMeC78k3ZAi1xPk6P12mCXx5+BGX4aUIBs4ifX1e5VWmpn8xIfO5+Yt8OC9jE4wu6ZQ8G+4klxUHwARMq+ov8OmR41cwYrxIv5uhcOCjv69C/C4n1X/0Iw48z8BPS6egnYqASoBZ5xfO0xZvlwFzK6fZ6wi/1dgEwEpMNSOTGMY+iwe0pJKNMjGL86WsA7ChlHXQBelVlX5+xhLpsq5wepbEAxol0Hk0nNp2s90a7IYnwOUJQNuQ9gLazW/ZKUdfOX292ImZtLygzTkxZJiPw3RUMTdTYRvhUUo5oSok7cnIZB9oeqJ3/Sa2pa1y7+N+ppPHANfeMrYMDSN/NwZgWCMsYcZr8Kik82ZrGSVO9wRDi1U/JPDm2B3B+fHgC3SsynjjuR+iA1HLmb4xfwZzYMFdP3F0OufmHw8t0Fdr5DTsklAx0rKXTlJ0BkU+etwzt3aanGu19dVJqfN1Zmi0lTij2tLdXBMIGH3gJSelL4CXqCl4aFcNj8JTsp37qmbrjixrr926vKDXFx39opDmqYDwhgtQ6MTDXqFVIl7HQn1rNO1TUM2CeJSemtYzkir3L32/kLTrW96qi97DWVgjXhZYhCYfNHs4J7o9pE1qk4HYPUyZS5Pp344y27bLtWbKaoHWxCLfkbbicSImhuU5SELxhbV5tRq4C3zDTtDAnBx5acflHd1tQMug/fG03VSxNQ5cl33pUCkCxf1h3a5h1nkXwc4JqQqvoNq+HuHaKenbwEA6LdhUgMv6VsV45GbZDhdswZFWIUVhs95bkFN7AgBMl+Fj8ChKOIDQrKIxUk0aE6kniyVkC/p7LXSbYmRVqRarsQKIpoEutwJBVRSL9wq+kI3B+dI2cQkbIjbkwHbCV4e42NVEbiOd7RLfMmxHS+md4MR7+vonvkyf+On0gwfoI2JMSkwttcUW4bq8neU0LC3IF3LiRSmH8aNMrF8ZWks4U3bXzE39nMJzJFCn2ZG6uKhBGWMCdhmNlN7Uq6TufzUX+JltW6Vf92klh/UFAKc2vKacbWOuUFUp5KW4F7KYSZGa3c3YmdIfIacNeRUEGP25PdkiSSchE9DWOcVJFJ2WnV7iSrkLeYjbxc6rb+y09BWrsoIiexT1FwsZtMtGrls6SRQNUH3mQ9QDIHmtRlHfRsU/LbrhGf6jGI0f9JbYQn4JDNRwBFDhOQpfJWhJG8WhuE8DdygQ/LS61Zly5a1+1Zq57gX3BpNkOgX5wYrB1fgznX+fEhLGFBttDtoaMWCPGjvAmVYL5l2XmSy1QWOpRz18U3Q3/GcjIPA0i1vXFo9zivegn2zicuYJ+TsHMv9yLMsis8nMakKiNXF+Hr1LfrnOBZmHBHmoeOuYrR9yrKSeW5unTn69+a8RSJwcBdczeD5nBJKiKpRC0U9f++7GM4oORXPT3fCZYwc9PsPmHq9RjrWaKHrCkKPezV6CstL+j9uymFNiq78j+fGyVTm2oxF85DRqs0xLYcFm+L1tEPs5qv/kulj85Ew2t7AaWLHPJ8mcSFGJAKfZ2GIhBKJJJjSCQx7gqgCXPU0MW1M40dtlMRi+uPMqHsR4sNwTkBasmZ40fv2w7gWwygR/g1Hp0oscVvzGlOFh8kAhCkYaCQFl4LVW4G3diM4SvAZwP3ZcnXRENkdO0vqdNZrlx3ZvRtxzjnik+wdkMnAlbezi8JDeO8DEdPjDvfXW086SiNVKIkznS0GCjJ/AQYrjRG5uBYmme8p9EKPnG+kYX50MsglsS6D7SYXOrVZ7Bvpwb91fJQbn4SksvM3y9C7okz4d9pmfMtFYhWYKBUoGquqeI//GD6Vtyl9lLtZn14/8BTQcSpfJHj46S5VaF/DpGE1s/WsJEtFMVHOY1a7FnRcY+Xwt+wv1uCi3T4wWfncSKEgqr3x412BIGyr6KlBF42xVpab4Bk24GPppMHtvtdoQ/6G6BNQvNGjXeUmmw90OJ8WG3fk/Ru0GsuR7e7XIo2wcyZ6nPlQjdhJcGfDm/uRpCmNyAtE9us9x+VRYTE/EwaW7ONTPL6jsTKTj1aQJNjSCAQ/TP895bA05fMAUi1IO12HdQQNf7Lvl00lTo1owm4R8GkfTroLpGM9TzcY9MAPL8Me2ch4bPz2qXBlaNQkwMt8To/q4+V9lfEXTNu1GV8Ih7zBgpkSyZYZczRoPYE095iDYW+iwjI+ddzQ7PK+9XtAwaGBNtEcFMonRVXzsNvVxQKEJNng21DiJVk/JKWD0pD0nS0z44qFlRme/fUeb+DqN+NRh+K7O55o9rp4BFW6R4kOUXo9roApIXShblqiEdH+L+k5m4waxzK4LuzhLGwMNUhIO0QCBbx8Y8zi1RQX5+aNg1AcoN72HlZfLDRm6+Th1l9/1Jde0uYMGxaLjqxvKEqg0R0q4QcsplrZjVLIRbeCTD8g1bKJl029AmBzi86Bzu/rJ3Qw89TmIjqH6J7ASK3goQLuPYoecpcBJotSeh9Ai/N+jGerxh21BmTNcfxahW+HMktGNtTTlYzyhRSnoAcCu4v7QMuiYMJaA+eTxnOsnGt5Hekfqa6IeRE2iVRjEuzltbtG9SbAiYQgt4E/G14zFfNKo1gX89oU8KmdUnje4qyEX7AoiQDZG52njJpX4872VvHNi/OurrhAN+KWD9y4pRTiN0uLMiWGVGj4AuGYd2+Grg8qVQn5Z2u4/5+yCi2xoHOuH+FsaR2FAxkYNkNyd8MAioTKoAU8HCzZPwDZVqllse0ymMw7Gyew6hZ/SiytVVg4qXJwMhYPWHChHq5WuCu0EFjMFLiSTjXFksTNqFtS/BKPSDGyc+K7OJ1wJXTxN+8d65f9rMrYz7e3/MXWpT8uSfFQv1Cq10YrIUKuZOw3oMzC5LPDZK0T03vEAgUTTKLKO/I0qWmWeyKDJNDczIbmWs7XhnJpYVygTCfh3Ck68NbKniCLLeNCK5JMB0+uEtEp0LMIDfjkF5tWWyKfLk5C7VuK5xtzQV8ZT2VUqV3jQJ3O1WGNOncerLw6UoXkdnD0/h+NjaRpu5cWOVUWyJyEtA0vyHHsYj83BjNOCqvwGh4ywnDiscsWJkJdPG/lXQsMZDUqo/Jpzf8Yf+GrS+dkyj4YAbf4QFuD5wuMkQYEDs1RNjosKCAl/eijt3YC4Fts0UtqNhsplzGMfn07wabrx97XsTF8JjgWZfp4F5lXffcJO9FKm7FV/rRizS935VV7F8ykw6v0CngHWgOywe4RELCXw8Zngu+NUy3ZgGX25LH61lNGXErsP4Fm1zKgXp5QyPfoKd0tYeuv9f6FG7El36GTbnJGUeEDmY6vVfeN6u+up4uCwnu+W2N71p0pK8ROj97da7KPzQYZ+9kr38kQjJ91vL7o16c1uWlW19cGBgT+AtuHvd9U1JiPVr6THpfPx0N9WiD9VPUwZ4JcU77dG6++wWHnu73ppfl47UY5k7DbssMRjhH15e2KwFUZrkoqdIs/D9jLHNcEH7BoGZRsGM7JiJIVoDdpupniOoPbjDJ1Rm/n1Z2g8SVJKoNrt2T2hSp0QTbU+OM2SLPGiIRzCCpQEIKHtu6XsZQFzKyEg+mWLQV0/tI8UMUT5W9fNV76W6Wv5vnrq2l3oMgqrOR90fDPGoFL0LRZzZC843aRjMczPc5ofZA0zXOn8X12AkdX6QaPODUao3DlZkVLUmmls3AnG/Voq0CV6VIThd2zc1tETkOvFl+KlkTjOq0NaSUw/CRGvFDsAqHUs3wk0rL5CHHokwJ2SprpkCOfA9Adzgxj5Qm5fYw+qBQ3pbDPw/arVU8NUkml4T6hdMhaJDXhAt7fcsQ5ZiwRq5SPDBIoF2zbBY8wGq35VuqTZ9hJXtQYWh2JYCGtqUdbZ0O18nyouN/oowW0P862EGgwZNr8iDy4GJ2DYwsB7mpsoot0uCcFpLIGLeffZISN6/qEkzMIAmTDY5nuRGxVJBys53pnjTWcu+cRo277GsbYuHzmpTQFehrybxkQN7RhEgKxGybuQqqVrr/Qi9Sja1qPBr2zaoaCkKAIRwrzhJwwhwxbBJNbxmmi5EM2TGJ3uofHFLHw8/pSIK9RHtBiG8a3M62/z01fhxSv0Sl+JAeEXp7uVz7qlLAZ57odCWMRMiaI3c3R5UAPZH3yToptgzyIs0+cNWgUevOpCtid7aHpVgT5JuXiI0sQ6E+Sn2+LC5tjE0FcbcE57VwpnaVRF50eAGOS6qYZXyBLbC9Y13vitA+9s8wD+EFJr41WbVv+GERW6H4x9KNufblUXYmmPx3cCrZbEhlhd+R7ctNOhvcF+3sa8I16hveXheiS0SIYjMeHsIoL5hGv1pM7PefIA8aH2deVuBGjR4Bv6xRT8s0D1yqJSxLJou9tW2ho0ywWL2W7P/V5eETcot9JfXzNG2AL2wkT6pjIhU5Pi14o9WZXa544wyZk7XEvU7JAtMLwtjF+DwgVOFVkgjW3BhC2SVJyHN8oJm0PS8ugSdCcJFruB8O6oO9mA5W9/6ZJ5ZmvwggusAeGksG1LiGmnuLiS43F/lpXopfscoPcDaXOJfFAdZ1HLVg5m6w+sAmFHqnAuocxkX2IYDB/4PN0KIOpxweJNbpmybHAg79NejSkidE/FDv7XVBsNmpIXdwFB0m5oSKIB/MYckhsvboFWbE+WzOqsdSN1Me5VU934l+BHvQYVFBR5r1lkRKr2Jh4QhExpVbwp1EMWJuVE/uinLs+fOG/vLo1Ifxp6h/DkBH70DQuedfOWdIFWD3/PmicIuAjxP3aswoebfOQHnfeMSCt6OEYGJ6qlRuXp8MT6BbK/0enF+XZU0jhKsz8Z/S2PW7Tjyk3htQWQ5+vV5SjK+0IyK2/sK1oqAL1SQeFAReeAuxNGsXW0pFJJgOEv9C3ij/0gKQeKiWhdx/4EQJI9wtLOu2+APod5h3UHVsdyz5ttLQ4KgDAV2hVUoHqQ0i5pkmyO1mxbou6BjYVplVRMIuIAri7iruf0o7Sl+N9nkfURlE3dLRGBIjJ5WiObkwIkU4SKb7M6BmxzdHFIQDK4ePNV53JpwsBvSHhjA00ub3LyQau9szHloDOmTZiZQvP8S5py4zkrqcpmgbIIOd19Rgao1zBCZIkU452pD9WEGuZpWnjH8ltKPwgbBTgyfi4VY3tUHIdHHu8cITvYlXsIO305kQSpS28kQzo7d6ox1m1WVL4QkzbkvLtl3wykRBdxabGuBrFXO+SHYEHD114bjBHEoEp4L1i18mmbfxKaszvCBLf2sfO37eNLViQpJDJ4GstMc39roZ0W7RqKw/CzzweXylXycogolJPsENmFkvHmYJXDN8mRn853YxBhOMD3zktvBBjM5Y7Q4y/JZNhqqrI+8w+yatI1jwld1NNaQUEv7b2nPHALNTmynyYfZHE1rYSby4nnOwugTp7kn4pLNmmR2bgDtpJoYUb2ruAUXk+ssfhVDZ9ZPAHDfzMMr0uVbuUP76I01/q5J/gpW6r/255okPgFoEh1n9/apMnSvvJiL3ujqQEkBysjbD51wWmsnkmJfHeOd7vukQaKVg4oAK2Y7SVh5wIfc710aUPGpYdzI5P+kYNcQeyxGD/I7LvU8ZYJdR06Gju/odVYVIa72O3iA20HvBsLa9H0VGyNDUEY0urH1kiTDXgZoUbkA8Z+LQyelFiBUMdBk4r2aP1M3F0h9mVDjJ1Iemosm1D0E6E2YT9EbvXdgkvd+J7hI7gyEwsSX6EE5M9+g65wsmk2ty6ADuLpgLRzrPke9eTtydH4tyWiMASMrTR5ealKy9PU/XjHB7H0wjXCqEs0lLR2QZVimEv6p1VgcxTp/Kr+aEbtOybu4Ef8lC5gPpadhK31wsMF2nqIQYVPBtiC6KWJ+YPz8wZ/sEaDoQiPblwPoXDe1isps9YwoXrHktqZ0S5xTJhpzPOBP/bA3favaWW2WLWBZI+n9m20WeWDIuazTX+L1APm2vE0fMMF9f2eu0t61nK5SB+KafXfO0/HAGpxmxw+w9VjOnhTf/LdFO4f/t6cjdcDDoa9YzihjNH1f4+UTLvzf7J0PhJksVnXN5sjLC7/k9EfjntQqe5SQ/hsRr4WVWbirftywg8/XAgkuEqFsIhdPnGu+y+BABrm6S8FIMLHX1djDnwsQAvFRO7g7caBf+IqSch0OArttFV73yk0fsMdKQXHxkXI2hjEgVwjtLg/ng9K+6K4HUjD7EOdRnmxmKgNvEGcP5H0DJ2h1nDs2fRlkhJNCX1KM1gjhpLV/17MtoyZAFfir3rT50yGyc6070/z8pxGtNcZTjn2pOZsSVpEK4pTQ5iCCJShgd8MYCA6jO6BAx0OyX9FVG4tRhNXMR8qXk9frli1I3myoZB/Hkg3iaj5eH8bHs8DfOdloD0tVFg8QlXyezTaooVxxEo27lsUT1ZvcsCmWCwcDObsVSdARZiMn5b+HL+bpsl6/Z53hHlXluAo8LZo91SuOeuzwr3O3c0z+lGCFzxTUNKbDiRCcMnrJpeAHrNyxxOu6QC7jGTfbMlLsFDzpHh+cD4lM5g1tqV3/XeyRN5+Q79Rwdm4TaUbopUm30PKExgv9GkoeoTdiQ860T9+lPmGz3AP2s6DRwM7CNS5spoKkjH8W97IBIaBPXZSGkCFQUBQDpD5wHrieiQoy3aIOMNzg7osXla7ZibNDbmTC/X5f6Jt0AAMqGBOunS4LbcX7/jaIXk6VEE2ygZFmva/57oX/e34GWQ9Y7Qp41nkJr5Jl+2Pic8ERQjlCu7u2WMq14uD25nRfbj9aaetZSjzOgsbuFf0nO5tnWc/TtTaoblegnTuHJZpMYY+QeUilELC9Mv223tkBK+f65/6mwPY9KjO4x/l9l+OqnzJ+CwFsvyxYbrfXALsw3v+6OMboQ2dLlTZ476KCwt5OSz5P/VteGQuf/VpIRwYicNJGc9JzPaayA1ije15B1SvRcsr67r0BILX/c9wMGdqn5uR1Gdpdi7PpmGBtqBtRGyGy0AYp8lJGntMM/aapoOZXQRiQFZ9aJ+J/gv0ioKOTAexxFYHvE9t06aiq1aN8XFczzVZD7+8KbNpd4P5Q3fyEfzmJXL0FdiahGwXNc5IHcb33BVRoy13xJSEujq7OhiAfagUZhOYtOpBu32w4vcicsqpQHKiu5ZwPkbywuGLMFtntZ+VRwtZZ90NHpjZBVbqDml8mGBvsFzTwl4BhuxDLphdhTiZa7XLFkd9NvAyQiPk3oYoudMSKkWnjQMkiiabXIc7xy1EntCBX4J5+dw33uIbJ4/zczf4/lEwS+HFBuuVTN3DYCMKFck7aCl1aJz1BxILsyiq5WEL60hea+p0j5yuRhJBBKMMaoKbJrDiMdAsWsB4RqIWUo0bYdFyVZeQYgTpkRSrtRcwh66qGFnUieOFTwehSamlDA2dBJabD+COpAX1L6828LbL2VgjlMdGTFOKm64KWMHEoYXR45CdglxUuEg4jADQg/XRTZF8Cx7QvNOj1tz1Bzax89dYQziU0p2OcB2PYsntq7Za3jVe6yLdwZ7F0Zgpf19Ib8BvQ0f1nvIzghMSkr79CB7yJurh6pQj09zbaoWeEHI2SBfVfwvC+JID0ho1Mke1lNiGlljrAuOPieCiuXYVZuCfmpzPMIkb/vdbQ515bADs9wL2hvFcOV2LdKPgUfh0VnPOlEM1qppDdgFCakdb3h2P4Q9VdS09gXGMPY+JAV98kr0MkIL3RgimIn1//OSfQYMg0AJbXjXGXN6TY895dXX7Ew7qW4nVkutUq9drkK36YguY4/9DTtjSsUoZWQCAUNhZ6deI0g77UOGDSUfJdTBAKRUueP6RxQgUvseVck6AyxJw9t7l5MDu0E/6tqcup4zo6J1fpxwtg9zL+AL9C38u12gWMUPFZai8keX+0thPdsw+vz5n8pP6jd0mCm4Rd46JOZt2BS0EJOBH9mCbdqDFxFfuJTxOM5vtLfiyBBU0L2iShYccW+5RWR/KMdzTp7nq/RtnuD41ciGdXZFfY79d+IJxAAYdMKH2gJDCFmbhZFVCQVw1pVolA6DngIS8nIH7JtLGSY0AI8vcXENL37gb2HnjSfm8LZf+Ye1mCnTFtQu7kZM2cGuDEk6gIDNezkZC5JYw7RCfhupPyywUWxaMheJ+wU/c4lqGbEtIgIVdVGHnWeSNQa2TZEe61RPDbG/U6wdjRGYiNrF05bW5tUhEyyDOIChRcT7ptm4M551eB+vhSp6jkfhCL21za3K8N479eSs93cXK3Q8RJKDJClUQPxoc4xrLR1z1ONzC5OR8g2BS/2twpw7HNxYUsQITFq7wkDQ4aqnvQrECJ6WV0beAI6zTMjSvZS0d1nFjdwoUuCR6x80m5W8yWqgYPgPs/Lg0iwatRp8P6L3U04ikGaIuS6gjW3QyQuTZ/hlNDt6RGQItfT0I1kKoFXjzMLFo8ezCp9587QzY8mAl1JFIoFHVr+sREg9SJJTcB5CGQluQhYeEMPaCY2ffvLXOCV92UX1ofMVOg4UvxH79HkuIgLs/K3DAztqhjUkh/hqWQINcfURM3xPfUGy/9rTOq8+8mhL7WYf8ZEpzfEraE5a48vRGW05jkvQaPOeStAosTkfpKN64Kxyd+RjusEnesahVfXqs9tuq8m7LBAJT9L1fyeuGm3cGYqAuUdfW1wAafAU4zESJ8awFMwdvkBVbb/o+CGpenhm+VFLtsDWErTiy75Da5r5Mrcfbm/msXY0RxyomTBATffNKx+bzflHn9+n91jUU9TQ7LbBWKjhOSC2739py4jY1pKzNrTf4+vYFinRv2kBlvo1W4kYEwjvXDzO70JurDS2yGYUmo+IwpV1t+jEFF4MsMecYrFTnNugb3NKN4pM5Akg4NnfXKC5QhqCxVQHtXdMJI1Fq6BSeUtCa7QXfdzVimsJHhuG+eTg5BFksoHPO8CSgLBnPFoEk9y7RqXZ30TtNR8ok2u2q6AGzfu/pVe46wK8GXKf4JpoLdKuUN2Ta3J1w3IrghZdR8vIldiBbIHPholWqRcJ9m+Arf6OAzIlFAsjtGJuBLwbMm7VghgU8XnPcLEcQM08gCNcrG4trwOCpXGRejC6+91iMGF6DBG9T2kqht6Zr6Glp6iWVQ50W5OzOXhM4QJAJme4zjTcP4bVgNkZRTuuOg3OapDgqjJMJ5IHXeJBeMljO0HR0euqA9gOEZziW+sthUNYfStpGA9MGYEjFuPGqVZHxQmHhdnI+W+MdiHFLZGaZEouqBcpNGpdbRtAgz42zg6q09374J8umdbRfxu7IubTVs2ZBaOh3hNOJF8vKFgnR5oP1HD7HCzbvA1Q8eM0YLMV0bVSoUlKQFhJlafWwfA895b2nwcoFCW1a70luO4YYGWAW+6u0m7kj+ebIqgmXE1+U98X9YmXaMJWdZ/DhFPRunOuVMLGUBmoxDarFv/Wu8GSy1BOv4PoXDa7+udvDeAUx+CgQY6I4+CmVm+mHxF9kF9cg/WPqI8LsBB3WLk855FPyx8aKbFk260bFudrhBIRZ2QRho7ahueSn8iZ9ua6NkqoZ7f5Sp8DCW4uoUw+eZBOPRXVDLb7CRNXlwghdOrF8+kz6ox4u4FQ24lxqBqW82G3myXdhBwza2XQDITxd/nmxYoclGxsjk2YgMQAFCYIgwX5cfHcmNBNj8ap6bC9Svy/TiGBSFui9IGMr+Ui0RNoM5lAeNEWSux0E2YLgdv6o1NmVB6qEXwZzSxi3ZRk2BYL0Aq2fAtGs1bbiVB0U6GhoqUBjvDAGDlIYbcCqHdEaKE+dRN7VAibg12lNJCIGNwqIQbuqMXGTLyBIQ6FjtJLK2KmclwC0UvFTEzEbH9MD6cWxDqqyRo//mWta7Vsm3Yb+Z8qAtOgXTZtO3QSVL6K9PukbIqzhDn00yYQpomwgDKz1xdyBUaGoz6D8j8+6sPU2PDltPfW3TRrnrFfupqPnWzPxtLLOiVibioIluTmG+LP6zHGpxHrfLbB+1Uk9+yikGNksTqxdBo4u5H4n8eGo2vLnk06kVvTwRRlWGUjfVESzb7zUlycc8xB2o9SwrqHRBkYo0qjn6vAgLDA8PSfnp1cIh56nizGaT67L5/uQe2UrtylnzLht0bzlPe2in/vA3ZlJghmWqL/TG5twQnxiRlnOdeQWmdKMtppT3p//TPe8LY2E7MzZ/3WDmjhdyxeoBjzRJG8ok9HIqPIK+/+9GLLycWdCB0DvzpSlJRDMb3YHlsLZhhn1PhRF2lKCSKu7RZDWsr5NhFAIfTD7tLPfMHx5tmIJrcKjz8fqM+cz8M0S05jksYBoM3bmhTofpdnp0YklsS2Kj1OOs+7uoVkdSeSpMksQ12ZgfG3eOAmlsVkFT09C0MEaV/5HF6LY6GRfbb2k4osA2Z1Alx3w/bcCL6gLUuXXeLB0AfF/LYlVlAcf2WHX1L1cM8qhuD82fv8DvmrqBQePKx0wg7No3j57PeystIBfDhRmVHnJpOtx8NLn5tBGFJT3lBQVdlj1DB6R+wcao/9dhdZJCaQM4EIvaPpFWLXPh7P7E+y9fVM6xMGokAJYM8YmeHq90xX57alzqTPExcSZYaidWMMl9bHKM7JXZBJTqhajnFS3WLc/+HE0/vDfOfIT+1203Zbwm37uYOESijF/p01Z8Xkk1GFLfO8HzSXXii6g0d07bvTZ/T7yyDSHOF8HLmtJERZRXLL76F9ar1WyHLKY0YmBDEIeHYKci5zykoFoMvp3uhQGfGJMzd84795EP0H+I3U1QMIFOldYKWbmbI04dIDfPyVu5Sj8y0AXiHBF+QLIXWcBKMr5ut5lyXcmivVwLjtkTGAH2XBezR0wX3Yw0Xu9MHnGOMnQpjQWJrFlV+IyedeEcaxmU8gWJeKNSC8vVnhQps0Vo4gQAjgo1EFjkXnppY5/vl6FmnP7LS+P7q7+0C1IwTU3gqnG4nutdPtOndahGbvSyGF20SHuC3PeGEc6DApwHKhAPm61/06IlaGJMFUadTv8WL+s/WJJUdRg5Au06wd516bYW1uHNt4ym8tGc/1eWz2M7EGKEbBFtWxRf2ryGM3a6Lvkql6bw95rkykAwh7jp1s9IQ7wZOhLJDxKgZ+v55hpH3kba73zLV1dakeFb7e0EDdJwkDyGwOe67xBxMuhl4264/UE6cZtOghubO3K27m640qQTb0FIQERXdoSW54O+jCETItMlxB9bDhf7unm6n4u4bdgNWx6kBVCi27fDpKSRyhVRVIGtd+fBn5bWz2cDNyIRQMmB1q3/BjMQmsVoKzAqqJ+E6yWzR+B1MUfo0C28hS6CNfWGQWRfgjDWqJNaWdQzZEzDO2UNwGrDlbtgHlUwB07Jrk60bGjOez572wvok8+qPCAwYdOpv1Cp8ZMM7UKamJqkoidlI5ymlZ4CX/yRaT+xY6rHfd8S+eZkHSDiPXzeDCBsCOBA+lZZmymVJZOenCgF/G4RfbHzz2v+oWZJhCC07rVoYeEEgxvuzg5qyqSJxQV533EeFbZ0N1uupM5L0Bru1YGSZShSdYchWgrQcj0UuUWI9VISAzAvsBpVMT2Ok+1OBpQFqFn04noGz/xplgpf8QYgGirj2KJIPgZ2fMQHxbbFbfkyoM++GLTI2VTtjJ31Jml6jsYZ8ucmqAPlj09ccY//xSfL4tY75sx2OVWYEKILxVH6c93ejc4d0bZgAqIFQ4oeQZ3wecQYkisVe8V0w3kSECQt6ZMTXP116p6VAA2MjNZEmCtmMB1NgEQFXS9TZ37+Eqvd0XOviFrL0urjB8y7NiTsvQo7Cs9q0m0VefJUxvdOWPlOhwhj6i2ASUDobfrFNz0D6u0k7Q79OxDSmfrXj3gctTuW9EeZigvJRmHl5FBMCORNgnEDcTzCzQtIJIdwzhgn2jo0vxNqgJ9HZtDDS/HYwuO0caZgrIZ0rvZ1zfrmly3wXOczKMVt+mV8Mm9ZGynWEg4WQsDFlKqr9U9gFtROuk+yOxjc5zRTo+69B6Xj6/fJCY9mp03naHhkXCmsfk+bX+GFQPol7II+UjW/yHJUwIOoDxJIhD+of63UWoAWSTo/CNDfkyRambbJHl5beuWSmJ/iP8Ocjtiwr5SX2Gb3eUgPJgPZO8JULzzOID8w4E0sumCuQtLSq8LSn2XJ0LgkmDN48vRRWKEjvHo1uOBKlcclquZkkh8x0z64OVZFN9BcxVLOtsP8jOvNWtmELNdhjQr1tDugDQTeRGbVLUiJRl3d/AxjGo9/YoBoUC+12LPbdi5I3yRuAjiulKaDliSWLKVBia6Y+K4YOjceZHHjFRekNehyR6HeCU+7XM0X9U4HXz+M6UneVcWBScNb2QH8+NaIB/pGnJbU2g8P5YT5vOy5uOO10vjoc6h7k7AmijTDCYNvJtsWqMUa8tw9nhGg+vs0/tjzILvFMxxRvgPbHg11ZXim+nDSaOSDhtKa8smNcLd9DYdGCOw0bu5q/tnMU9rEDhy00uGl7+KjT6P/xrr9GQgSN+miJ+GMKIm42dJ0aX5SCwmVSjsAYUGNKTc4Wsrgh5lJ14v7kT/TswKUq0Jy7JJ+D5mQmMGpWaK/3yckhS/QHke2Obhgw5r+peoor9lpAd6LKu0D3w4wgy7p/zUnw5R+K486w9bTIlGXRsVgeQBACPGhMVaBtAgMx37wuD4qA7cdr5Rf5kTwY8LgIpw4xbeJ1sFHQt8R7doCIkr1GBIWDppdjIZ1mNNlaMUHHI3mGH18Ku3dPylcBVzLCffAABklJYcrTwVOm+IDTWe/JgIpLaNEa35U2b5agziLO5wXpXxiuDygbgHofmZj1yhIVrpIsWw1dphXEuvRhzUzdYDowOxwF9TYnSV62D45zpNGV+13JUbFKVLH6hcO9dPObR+y75sys3uHZZNpoErkOWrVfb8fSHKR6w/EcpfqAEdLOQrpnvyKNClZ/yUcXFJOMGxknxwXbZPXLRlEgLjotzcvspo+CbVGYzCiYUc2aQfqB/GMyLEH7/sXh+/L4rLugvQ+3AcdpUEpX68ZgiLxP3ClbRZlcVagUV1o2yxCwVwa23IEW/Lisk63AjWgezcOZU9Qv/g7BGqatrepcSS/0EEWUE8Kc8kxXguLS+FFNX7khBl/TUOKC0u+5b6bzzMJwujrayX9Uc/uW0Bo/hzaR27XxOPmEq6tW0INQY3Cp5QF2XUwyPwsUlu3Kcxc2NMHoc8EUwjAC5HhHQZjyHC688MnNoPqGqegGMIsEht2gSp9rsSg2FxH3U8KjyScxB7iVWmSdimzZVxGFmqepW99cXGLpU06XnjDm87rlPg9DBm44kHCEsyN3yjyde9498R8BRV6qMslgHF1BmC66m2C9gToBOIKvoUU3LVpZv1ULpCtixacZOQU+D8pNa+gFJfSRF0MvfE5Wq7dK3ITmJVuXng9wGyNIs92OayFOs2sMjZInJyNKljeHPRlEMbbr+qzYI8yXYv9KTCrxNled6gFBDtHN4ZDJR/GBS16zKRE8Trg46ZBJPFUfKBV/Li4yM2At5b8mDedTLKyr8xXWLjRFUhJIL978lQlOPtxZim7NF3Er0T7ZWZgoSuGN4+hSxgqakpfZxKPm4HIeAqexAhOsBrSv76qF5Pk/HtjQLoySAaq4phmxvIIXHEk5w0MnxW83R+7NxqrKIqiHLgIyThx5umAP2oT6Kdj+ZWCIDhRJJaMtv8QKwPVi4FQ9Kxk0KlrnRbd8MXfbNCQ+dqacnw5qRF/dh7TCVOr4a0i6sVlR/b7zWwIJRpcnhJm+JviEBn82I8JBf9oIxkm6kDpIUbhlCdQi8dT6iZKQvnkvuXf3Z9Vxhlj5pGElQlvMjClTdX2tZ0uqDKwxvtAKNj5tkV4HJFt6fsMZvRzuw+vkFWvQ1VrzNbvjk+P3AG1i7gm+P1ICEYyvpJT9C/mhsxmOOvXhmrEPvBjnMYbMU5lXF9d2USgFxgSEmAAMjv/xe10ibXyiDqKA2OQ1aBEuXmVbPtD61wF1pvv6k2iGsiJQzTOIONxuGOb1Myl9ZKSvwpGK9CQn/JWKxLQvg92PE3K24tAdiBdm6D9co5EvgxWHzhmM9dpLU0WBM7zYkEZb8ujE4XAKa2bHax4KhQthe+/v00apuV8tshrPkH6JcLDncrk7JMRTQp9/9DbjuguBIHDMAmZf0UCDbwbEEPFdl7L6u3ZhuBDVMLhpJwEs8bmRQy/ksBFCqxlSYUmhb2FOYt6TjeANGncbrd2ZVZ5LqWBmn28wFhMp/K0vKO1DaxKiHXV8JcIZdcnxiyKhqi8LUDcsTLL12/z6ZWqQt1gM1BIvrHK5OiYXR4HY92fG5AylkG9Eg/OOEfokpu3xn6XblQoc8QrgHwMfj6HEbtFolL5kxSnyNRnebBnn/EiP98nWcmIyA2o6Z71ejVsfF19Iozk1mEIP6/tUshX3oZh0xiyKfHE0cKShIqWjwuyEkoBs6pT8PDmdt81ehYm3MTOKABc12vcD6Y3YwSQLcGtGTMxgunKX+8hX9hwNz6WoEI+oilJnJ91TLNsXeOPx/Oe1zbsFhr9OZdUsrnvQh4PQQkgJPvEDPOHlAJDa+csnO0VmGZVrRSRzviZbsKiP6bxYvQ+SNP4pqIniwtS/kCh3tZIhZmYbLfNjHF3qNPhw6FVw6cB/PsMMiBjGDI+U4xgoGD1lEbe8p91oEjfD+exPh9tEBW1Qhp3ftHQXbUXh8hQbYjIClqbXa/mP9XZOtC6ZYFbhpeqh1Z5R/9IhY9xJzTJbMr9tQdpbAK/68B+PaoOQndYhXtUBTZg/LbFQBsKFUL1/e81jpMDK6Lt17zCxyWnTu+WQcPcKGeKLW8taY0k1BzLjeJ3/kmMAxALfXZqRSOnthcoAUB6vkmTvYxMoXJQ8uLbHFXRy8kyA/2WbvIQEUU/U0niOvOOKtCrnPXsf3XW/bsOMK9g4YcKzfKuKPt97sv4ybjLk8wzDOrQ8/p8Us9PDl3Rz9L+VGcQR5CDnlyA+0BYKwMuk/pN8V2Amcc7g1fuRIEJDj3x8Ym6ksy3VNr/D9RNCkk9cH812CqWS48Tx4h/lUIEvv7oF5DbPNoVr66yz8D3bfNqTFRDPHwU0cN2C+VneQb9J+zLMvi5I2ZmEBU1bjcGnKbNtTnrFQd4kA20KBbxyo78PSYsVMmWkmS9ZeV/KkK+uWbuo4e99NZ7qoqTBnQYbIo1GQdm7EHhQkma8/3cBnuGQlJTLYnUauHERuBHO97To7sNOLyH7vxhCuiXST3FbCq/PTjxe8Yj3nG9yt4bhUHcc+jufzXM8kUSmABVrceCNwBwZIUKzk94AtWUk86HSOR+mxQ7UUQOiGj8Ev8K4iXMUtMLV4CLLe8iOyyRKzMSDKtp7Jmf2FexWptxFoSmnACFtnQPD4HPiuoAGSFwy2KB/A6ygH98WOVx3UIBLuN999oSPeD9LqA/iyHsVqg+Qn2FO7JNn7aMUbFvBxau37t1lwQkRlNvvBkIloaABgg49tMKKGntPWZzGAMLbjDMm9r8jSRe8LArEjRFTG5O0d6V7QO8u8+GEo9UvGkujEvzbygsz447p+yLXvMGhaIZ/K/9gWYpJqzqFc/+qaVXk0Are5ryBSI5x8pYd/gpkcq3t1A0i7OYZsB5uUyAq/JfIgDCOXNPwnyQkyVEHINK67aAroI3HwgIYShk5BTRc2YH7uAnUXS2yT3hWequLX1OkkxmJwrv/h7p3qxM3Vgj12bF+KDPygyk78MjKbi29pCd4VXgI77ekVaKdoye/jHuxA/ZS1ITAVPC9Np1SDh7IgLCZN/NP5qjAOzIKbW97NZZROxO1y+yDPln7T/UeoOQbRUNpMHLDeqWRu4kX/w87pghXRKE/CviQa541mr4hKM7BNGZj60oi86ZAcasbMQ7XsfkUgBi+3iiB7ZeRBlAb03DLpO6bOOcb94XpqXmgweB4wK0s3K5KHbWsS8yb3lxnqOq1gwzRjRcdirFOQSlLIUFW7v1B3bZTwMGdI6uqvL0dWPbBktg9XZuMw0/jZAvo+38O+wat4f8NYjtVvXh/bkoLKEZX0Yg+38d812YKNE+BY3hC4X7tmpdfSbOPI5Z0VN3fKigIW5rJQJBH1VsxzNc4FBphz4Xr0InRpd31oLtPCKjV5M/Kvd9nQIen8wp4z+kyh9mACu5VzUfZA9gLoebWtZTDEGDbjbVPWCksRI3nGQTb3r1Chk8FXF1ENqltg9cTtdsmNPUlZ9JgoeQlN6YJLU0mghdFZ3Su/Q4sBEySr2bLy5V2kKBk9mQ3KVvzmJDYEWRA8JMkUMo1bCownoR8Ct8Xor/lOg+pr5qHHB6pa/VppzarzEU1jZDqZH9UfO1CYSidkk1lwYQaBXbipAbnAkwl4KLZHxP/DwvxEpRlokO1FA4P4CbNnfZErP0oGYjlj06OkRc/U3Ccb/Zq99y7zKAq0aMAu3vPdoTWIXHwYmhl344NCjYjd4TtTmMY3kv3RJSpVxto4temXWD6l+1k89DSjB1xfnfmoMNg+qp+q03CFLcl56ipjWZoncoJV8F9w+vOEhBdwdI1HEou71r5iv/Ff1zzLAV5yOKKAm3kCMKz4rkyX+lqH6SVYhMi3auNKlmURY5TmdH36qNHt6IqSz1v0cpKXHe6GbreYfy3sd+5Y3IVMWzcEhzAiuR1+gGvijiBMg4Vv+siPsnJK32wSShFN8I36C1WWbprICY9yG20nbg+535Fkx/aQ36NvgMGoett6Loc/qmdvxAXUDhxIos2ZOKbwAo1agsSIMkhMEa1xsto/ZGWwZv1aVxt45BCUe+uIzEwTJGBAdOdYwNsG8WJXWykyq00nEKFiLNWTBr8YZcXvfGkZyy3XfQur/QHDRdF3x1ul58k1DGPQP13GBNWgCZg4TLMUSUsvM0xCphZGG1Y2mkG+PlIOT+JV/OjVL96AG+k2crWWCT+GWl3FNSOOwaZlKl1L6gUBsgCRKoQOFqcb/VXv7KwOkS86EePHhaomzflhvrHlTZHtaH25wMQdfOnf+rhaf/wz0tkekCiSGCQn6tKNhvf2V1ErQZGRbP+r3qv2COlZQUlriBhNX/Yjc02JcU+5f7k+PNFYDIpbHyJp7a22ZjSwe5bF2p+lBMxlFOkMzQf7Cbf8yCEgORRNB7A5hASfXqd1jqt06Fc9GpPpRe2FOOniLJOQ+7aP7RNslKPIPJT/oca9N99qP+JgPnR/FYUMSC1kLGnBUjYhp+kIKYyarFRPa0PyqjU8jNjTc2hqBlrbAes/y+ixmsPwoLbkWqnd/TuuMGMDutLecr+LPdFHONgZn71FJFRWO2gvONIH8kxOlKniMXmBUNFNsd6NSbmkAJN17J38mUeXaMOp/j2JAw+Knv7vCWj6oCn1kA4hKa9sjZ+Xpg9yZSXxHFK/l92PaL8EDUnvifuS67RoSNHlP4zCAi/US1lbuEA/nr6xEGKNzLms1OcP3S9BivDzUUI2sVdt3IKtgX0le5VVTaljjCj2xQBJFIwtLd043KEQGn/D/YhX9Nx0C8omlRz5qeW3fj3q6GXBygN5fhX2vKEPnFRnq9HCiR4j3ZxxL9996vEF97/9yBUsJTeveajlyTY5stdSygVVNbRvBDpEcXU6vuk8eyd85/TSIeznxfBhn6V8bdXhvrOGkginVUEV7C6HzK+WJNCzxIsR02UzxlwWcoyBpaFrX91ZSuDw4WY3m/FIrnrrDvAu1dZ3oGUMVO1n10UQfzYtHidTsgYj44fTOyqcxxOu38RScNm2lnX7Sg+zg3N9QhooSQttIT82JsDNw1SGC8y8AiRf3Z7U+E5/b2i2UIT4lu80//TDcOhw+9IS1jCMgQl4wg12RYDTyQ9lJNVqDpfSwbfkgwJOuR73kyMTg+Mfyh7fvVZ2dkHJkY4crekxB2rI6wGlT+tYIk+QgthA3e6Gj+LqtFe4j+A0xZCzE6eeMVc7ekuETVaCSThkyO6jbi1NIXWac9s1rG0kNhZVEhyV9OEY3hFVTSQjK5CIBR/Ftsj3oj7V0p/w/rhB/h0bBDcFz05FEZU6WOahySJ9xJrkRrNWijBOYVqzwuIOtzt59MXrU/vqqKM8MxsxcCQ8US2XGJPWgZEQv242EWVPjcQYcH+WnMH1seDHeNgMmkvJoNTTfc5LV4ukxgTvI7vuvrYZTv/28IAgZ+UukmrsqGZ2XVo/4PnKEmaypvQvZgDjyLw3NqLBRzPN5uG9PgWSZ68XugUBSW8Gqyk0uP82OW9KGchizueget24j1UXf/h0RsNUluMnxshlQUiEtVUeuYiLNXWscXBuxNSROwO7dC5waDmwLFgdSAqfKAuIUNPtaP9kNZRTKVyx1JslrAwLQMLLXbdzDLu+PVLtsshHUdpFpFcKQJ8vVfFuo6L5bJupAAeuWyIITYgilisoDYlW8E+ag09ZUUuq/MTPKOAl+oDUQKGH2k06MbjUrwzhgNkTL3I9Y+eONMB1lbV7hxR+QRVjreWww5HUoxQNLHPdSc53YZZdALTuLX29FXW0RywD0Hi/0Co+zH1iOmXpgRtZ0F07rrhCr6TlBudJxYuuzf69AOmllySZrKj8YupmyYXOEnvksPwH2kIBdGsh3NAH+K/xuR6Z2yMccr+c8ZScih84yM6U8GuGGH32Be8yQxKXnIGBpnXlvZuWMwObg9McAgfjsaPZtz9mUz3EnL2LWJhzXu6LhgnAwNArjbtDQgfO0WyWpCCFViFxqaT9u86w4RshdiMwIaIFfHL/8YU3fZ/Axvn+v9/3+EYkvOJuZHrXxBkcSeurAYBd4QZ80XjMK1gBmq4J2wGwFxflFTpfDMQSMN4ynmvoWIhoWvWJfc1MDh79FSTU5UTuHkMECqIu6AADw4MoCxNdulMaH555rDCSzQcWBup03Vcyf/FfkJaIBLhoPDn3glICLuoPzoDAA2koSOWH0OqmrbVv+pxTxaWNwV7R7DrK1gxDnl/VQcGd3gmVfK0uaZwSWbi33vAyxlXVl9tNZrIrrMrjX86p0a9/C3S7VB7R9w2VEjasIqKdrFLMNIzXgK4wToMHadeKqhjuFcwTDG2UBZf3/suo2EXFPURH/pX8H8CpELmYTFDSQBQfPLltu8EXX4L89zfkj1zDSz8zJGpbnXsb3U3eyRlhTmnSfa9zR1jFWymxEhftmxGMla2vqQoFOwjv7hBUNhS15DKoTcpgVGA1zDQXuvZ0FeiR5lfRsaJb2tH69G4WHinjorvhtwuqalYeQhDhadxc2uRobsscx5gbz0Dlx+GjKKpl5s7GKPO72QVBThiPrwppfOeskoWQCmBrNWOlCvnDAx6dO8E5WMVlhALWL9Fm1QyGCEeRi/he+jDGpsdZ7U7MoaHCZQmqZOQDfYetS7RiXVF7YYMQg4c2YBYSzGtRy2Rl09A+OManufIPuBJEr0PClbSsTrks+5tu8AzZbsvPbQviklGTNtXVFJEFUY946u45OdIVo0M+91bh2JXM7UzfyTnzxKmCneCo1Lt72ey0DPkPyp1ILwDn7iU9Dr2hTyzml+XWbFTGQm07AWcoG7f+HOlh7y8DcPIRcopI43HUWs0+jmbAN4AYTSQv0/CbtHVSjz5++jx5rcNl3xAx1YcRqB+M9s/+jJowTsTv29V/PbBHXYLcIehGfCgkEJjP3KTLjaAqZMYnbAk5A7EK40RqaY4MQpzLD1gc/BaN4gseo9d3GohbSD3yDfUGYj+/rHV8RrSaXhPCcUuRcXVU1ILu9IoIyANajzgHrdpHJVqqkldlVco3BTSnoRgpWALSKrbYFb3Pcvv/jKg1MlSHCabCluHnqIUkQCqOvJmFSMqsqjwRaDS8BbA+Zq6/IWhxeAWeA774x+/2KZdx+udbIZ/UURhznSeDJnplICC/McVrbXaMZWw5Odk4EqftoktkX7/WBxDtopSmLaEYNcanmsy0Bk+5ndFfhDscDno5oZB/PqsmZ/1Pv2KEbJ5I245ISG1X32+O2vHWaDqFFmr4fw+hDwDJR8JrnRDyJbC0Wbq7KSPrbYHu9f9YWIxuGdPFoS8pNszdzUlxaGCi8W1+jXfl3Ui+tunRdSZdW1TockD/6bGx5S/j6jKFpU9WGw+P3uxMYDI9D1nYxamDkalPKdqfyFlDsSk0OoQF9xiSgedA80h00RXGt4t5KuOD+g0zYn8ODL5D0rFWxEPB2bHqkbYDDWpvOCDxBClr4rP6VR+CkdvHIo5cB48Nifyvi+d2NfazVL64yfu7kyjDbaOeXfc1B7BN4KyVKD29vWJ807V/0dvWH4fUofFF+zuBTRKk5fef+SEMzofWIoXqKd3VWRoOgCmGLUcK/tBDgy5MwTMSSeKxxLJnoog7G4lX/0Y8KqqtNfICK0n3ZZV0ihqeW+3DlJq4GkL0Hwo8zNOJ/57qMKuaNg/3l6HY6gGXx/TnwZgC3YvqV/oTimwqeDq3zTa4ZjbpWSx4eL4yIdAjbsYPn6PYm7p3P/i5fz9suDd9N30NUDydASe0SHiZDi1oAvILvdqxaZWKHiRPz5sKsrGGnZKA+2rA3dQVcvJbLQsxQZXt+MMp2vRQjrRBikoHnHBIx8deatscOl0KCpnaZNCGq36xjkKCZDdsKBi+5O1RuKSNjkUFByxLhykpP7+kHrGxyj5ApNlnGsiK85P3PyPV9rAdFebp3e2SI9KldppSl2Wf2qRrKQwlqLa3AHFWP5FeEKR3xddH/IOnQXnACnu1e1djE4kvZOVg4AKcC+zPlY+6tJaNgHK6eXHQ3zEcgAmG/gcSNmm/mpXbnbYqaz7zWna32OCVuIKFnuBsQr+6ihIvL7N9oX+3LVsELaj4BAtfRl6s4Jc/U1Bf+ZHZMKWw4YNYlRtMY1jrtIaK3Oq/cLJUxd3sWh61Z5wkWw8548C8rQbP6+Wh8Oq/y1Q/3DT7TcsxXdRs1wj+A27ka/u0+tTRJfniMujaaafI/ZPAsyTt8xeFO5eI4khEFLHwozygJa9/70CiukU+i5V0o36ct3nt+nBeXSW74sruhk9OPAFlEQT3n4Z+wVWabqbTlWA/hTwoFvzv1KdWqVm0/bXLpRP8mt8EfdLZc1Ln1l3bav5i/7oVOimtnerqfAMI7qjhruF0ZhF7584MBZLrx/pPTfzr3ZdrqQjCXjBT8N05rPDWU/LplLVFv2wldSqJNIA2TTaoX5cRz8Gj5VFxBDOHyd20c5G04Fnj9zCwd05C+82BDmWPEYz2r1Snmp45r+1lvOZ+jYhjUxOcMIMGke/ZQCSL+TuE71magrb76kr27K5Q2SS0fm3VUiutvVl1Z4eqZP1rPQFgtkLX+uupEpN1om1fvuVbxeh2DNW6foJlTVirMxa12BnTC03Ypaz5nC+AW5sx0bbwTm3I0M359JyvPgUYvNIShYWopicDaR3gS2S80cz7f60EGt9CKzCcT8rJVjQIuP1VPMjCf6J2Pxb9U3LUHw9GVBA1QRqROMQH/ESPClFRzsqwKgWT9lirYpoH99jO8O1QTxvT1Vwq5piYGoMPGNk7DEmXpxaUl4Uwlhb1kdnD/26oE6149H41K2hOaEk+nohFWHFNCHMkVVBV9c5ODuRgvkIo79hXVzE/tXBe3bYCtjt+KjenFvYajznCjMiemP19anqWcCjdZsf877ZvWCCgq4MuPLdFXLNY4AuKqskHaBwe9lpyZXqoORN47YCEXgoYA4u1WGIo6iCLYj7Q/ecJgyaE2Sz1Htad+WRmGezfihYTPI98+UztlxuPcuIuvjb30Vcx+KAknk1H0O3C8PErcvmpRgFbntNcAL0dodQkzD2DNY4DrICR780q1IsFiCHN6hUzO7WRYf5YPtTmP8TuXeDBzaUJjyPozsmYiekulyYWxf8+1QYmmLd4PIfmgiJ3L6K+6/Fg11+72mwDaroaHW9iRCpl138cZQ97u7eg6rxN5QTVCiF4zTLr3IIwWnjURxqPiOOOof9WKdlVWxYEZsA6DEaBjgQjL+tjU+D8mVD2zhID174Ks+FHDR4Xg/isYCI+jS+uMzY8o2kh1V8DaovhQY9VpC7yDuwkKBqr4AVFBKu+wVPdVn7fR6iM7who7chyNBYfKgNtnPQRf2z/0YgidYCAg0mQkUgHxCitu8iMziLjl1WqUYGqoYZrUQ7/Ln0xMV0EWOia0FfIzA5vW6YcB9sS23jmXk+vafI3d046by0emq7oX1KjF15azO/EtEJK74hVBNV61P5oOp50qcizRat0pjIVDoOjmqy6qTxiUvKcz+g6J9wVNOIeK5pUptUDbtlbEUgwN4F7W7law2qAmn+lNtxN9pY5ghwLp9itZ+cQoFS0n1HcQv1WY65ZJTkcAWcI4vuncfZ8usLS268sYE+2K/Z/2YNQ4jhiQk19kOaK4u5LwJBmEpqmMfsV43YG6O02RQpebJvCB0+yvsFUohfL/myMOxhCE31U3z9O41UnsWJ9V66zJUkXoSPivB9gy+t2PtoQDO/QbvTob4cBjSAhGWy+DOOwVnrvkS7CaPbL01azb2oNl6QePfEF7Uce0NP9NxKk4AyTLDgVZSgFmqPPqBKkk7tl7xEZQFWPZmBtXuv1/YGtUN+9JVSeRhjdFALchyn0x8YnpZ+wFDT7uS4gliXnzmi6zxtj2YmGGacpsnyDO1SBkCsvuRyJnrL56VwKLXiXIVNNEXGvtBHjFvYUiizzQ03BDiMlgKARVZmczck9PtweVl4HSrRoqBmEi8FHEGumK/NCwffymcpNDaKE+fI+FKA6Wa5B6KsCOhUIFvz29zPoBlcw8UfIbaf3h2vblklZ1yits4alxaCEnwYfPZPqrqnG0fe0fK5GpESx6RYhNmHDToW9+N/bcK3ZWr6LtdAdrnDN42Y1QAUtXmRiaF/oA60sCvj+KimxUma6t3ijoI8ZOT8vKVo49so+uo1h6vSWlILYx5WVBgPB5TNZFyXl9JBbRU8KEQyEeimw4vfrINc309KzEmEKQXH/B66vP1Puh3QNcNN4CKYzIdSm4qvZLtIsYzPChIoS9mX2GMsxLCsewROXkMjMXLhURBmhS33CH+pSA9MyQs4IoJlkxWwuGoa8YG1NnL6ynZMm3AuYEA6cFdhSQGS9GXDtvDJWPmuOr7j7cqC05wvlW1OtgZBaAXNJwPrVCG4LuTV/vdM+SwuIR4K7adIRkUqMTYifPfE6WBUB8p/zqjRRn2uHbB4BZ8oBIZfU0Ku+EOG+lMh3ySlOQmGmfHjSuXsiXZc4/85CztS7aHuMwReoFH4ZtAIotg2Lr+XZJshBp6zeNXfmbl8v1TRYWTH6rS/iTA3QvINx2qvEPdvR9jBT4LZamMixrtgd+u06RAZj78NsfJLhQ5OYpuGB+skZCKex1OjVAx4Cp8Ji+TFMCA/NXh98J72M4RcOmzSbyaMFmlMlhMH0rZHbPmyTe6LffYyZM9ch33S/KWzVZzLScBgk/fl+HijnHlTXm/Y0/mqEs7/ITOVw2SRbBzoku7Frm51MnGGGpU0V8XMCtT1lrSm8FlgGgT3WOvfAe+dVecrY0me+/oRlnI2oRxQKk28WkWPPl/hfWk2tPqa793s4GvJqV6iwYsTLsEPmkDXJkNlhcS2xMg5mOVh6huTMyBjUOnrKk6C1cBlR0GTAVvtFbeCOiPjRsJV8+h1QxzZUD+YB4IucQCc+thWI02YGftpLLB8+qnVHrYAGqipFVvU4vtiZ6yVUvxy0fjY8Jr0qNZfVvURDGHO/KaOdmByPO+Vnn6nTq/OYWufTuZ7Xw343S8F6qM5MT1J0MJHXssgF0M7x6O7XD3FaIapDgcYGjHwRYM3UzQVbsAwoS0hS3dWu8d+P5p4xrXxoy0VN5S5k3CWp5d7EdN2RQY1PeCE9a6XtQCB9D5LwLqT000mGf7uJ7pgGGf8mpwWxwW3OGECCHlYx+K45FZXaOd9BF242Fvda/cm++JxWRIEjL8FUpJqhSyDMB1hn5lflu17g0maArhUPAb3cjB4vDr/73WSvnZHhWvbx89FwKF7LZiN78one1kVBV6centCSK1jcGTXn8qt0qxdUirLSgA4dBBPQZq0/W0+3r0Lc5g42F4CPh6XPIGegOncdXrcjVJxbtrN/JVRN3e6KZ++rUfJXAm6WwRRE4flX7MVvoI8cBgYsYlqcc+ACNQmwOeQvm89apqobYuKDQV1QDRV+R+Ahq9Pv6gAzJMzoRdhZdalvXwSkpCrWcbjCjk++phaOwMfPxzELzRZJu2r6kzTW4I+9ziS6uaFXkdr9LGbBKBqTf/mus/Gen2GmYMnyiXMm9IVkCoV/I85LfTMvfDPV23LuwrRhdZh6qCMsgRxR85u6wLk5H5OGbRPLNkXGnXAFqzk+RvHhMLxLH16/dowLZTPWJ3xY8yp1FE4kO58mLPwK/ey0ahIsCGrBCVC2ZJs/qzi0sEtL/DSjTkRatpqJGfqNKFXIH7Ilsn2/w/Irw+ObTgq6Xd2DvMdve3Bku0K4VYzGmVGdwkRWku0paeb0/n79Rbx/cpKhSG8DujQf6zgd2V2T3EKpThAUJ4w0Vx/VmDvlW0+mycr+ijXmO7c6+kDO4PHptpZuKbyz3sgG97un/5itt0iyzqumlU4rfuhJbg9vQ33uL0HHjZXyVA7NQSaf90eTtA7a9KpMLZdmkwu7BXcZ3/eoeQtm/aak3o0iQVz62C10+mF3CRZtKFbpLJj6n30BRm+P0bvTerrN5OhCDQvWSN9QX1LLa4hhlGzUO/aQ0TmsTDN8xQbzxd5yGcOMcgSV+SOxLc4CgXK40zRIggPf3uLFoNvkczldZa+QTe8sHPjsbmob0LSd6c1jxyxAE/EICNKmX5J2rTLMjC9mseA41HmLch7Du/NWv9p/GpExZV3CVxh5/bAYBC5auGyyx1sAb5AZo+SMvAPe2aFnNeuy88MZpWbidzbym2TjalTE5BkCJ8+cT25bJ/9/fF7Cz6A6aJDeoMGBiM1/N7Rpy0hkdoHZk1jUPpRa8f9inHnwvoEdj926qZ6NBcvl4E0WJ7XGMBh60euOok8LMZe0fDXG6EmNdHE+3+17G4JOsE21s1gqLtf5WtF+7z5pkN8GYVONMpMW2J19pTRW9GhqQMaZcYVYL9WQ9JoUdyJripwQmHeWsLygFQUCv7+45HTmcQ9zTP3ASKmpMeGIGnkCm3kxrGw8JUSAY5zblDx641TowXvQqkoIKfwUJ32iDBBmEKymu7ogiIVjBHwWgMvDygmiUtUoh9P5YtROED/C7PVIiXukhnYe9EfSP9AHc0mJldFAVJLPXDbC5vriPY8hQ9wSrCzfc6L58kaz2U3qFcBWuPKWqZst1T8UxDCPbqhtTeUTW/VxjnkFKF9e0gpwV4fjDdhPFXhNYs2k54OLA+26wbnSIxXPFScOgEey2MDP5tScEs5Gjf14hmfuCeClQgpOrlzggaZEwDFBFYssLNlacD8ZxNEbKtpYA4ZcvME5wlX5CKtlKNMdb8tqw/61K3j9qtmWHlQdURgGI7VAX3kzsPtu8xsgHsylEHZWoh6tMxh+9n6/kD9YCh3QP/eRtFuNPAxxcZ5uJt8JZDkWFEhYjdLdBwlMaA31ejQNxvPEuoxBYtUfigcDvjWwCKMLE44A0/27KJN5l4QfOGXVPEMNrTEl0oUyF2rrIf+qhRF3eJhDqTG+/NekKrxtPKw62e4FsmBm9pS367wqzMEVGa7X0aVIDGUOejJumh0N3lNNOIWxIjLsBpsulR/AQA0MxPZ5WOiQjoy7O23Ild3ZRtyEYWj/S3E2fDgjDN7uLiI58IaQHiFij5I4vlO5/mZscvacuScXR3K7nzZMYMVE78kZI6VZhjZi7rJJ+kXeiRqXbbC7phjBqWo1OfjYAjPDbMDaivfqVHk6ww7iyoTkYDy1z3rwHEfGSB2Cbus9OaBrp/oBXi3CPUuyFz4lWd8mpKRyoK2++9eWUQkPm5c8JwV8wPcbuxFqI61MtRHZp5y93wWHQhah6rDreTEPf0N3XMG4rF9ccV4YeH7qu1JvVdBVpGgOCiOx4Q6BCA1cCDqiqfg4SvRQuvuv77berA/4aXvMB7b9nugoK3Qou7MIAOyUHNixnZ4Y7185+2MKxfowYTKRynGlatkmdM9zZPivEff+29g941A59fKZrbrpfZRHjwXAfiUlDOcjsGReuTX29KLiQxhyHHcJvOoEwkLczv6BnHAprSVwR00L0diYQ80PlGhaXQuFZqiLL13VTVxWyE3flUWL7jEbzsDDa9YgJXfVynLOrgC4XJYEvcZA3IfF2HchVFMF1v/2cnUwyeVWnA6zVIZNTQ8qLB4AOmatbvTJWSGQ+TWfgDZqFrRcFHIVUyPu71dQ8/U7jrEcCx0lDQ6OGfukmM6LUs077ERzI91DieAHdUZ4zJ/shOjYRm2M5oOkTidjBepgnGaLTJmaOdkEBWeP/g/zB9C4dS9bcht3R5f+UeLfnPGZyWtWXX4fGUqft82/1zrzNAJPXHEdElAkBfFOKxSH2xADQnjzlZGmj9H0taniJ2Wkd3ycE21nCf0x94IPVSqQMvB4qmK7tK4hpHerHRtcniVgJ/gO04TTz/Qd0bN6MK19ogv8cGuT5PAeqMTtxqxqK7W2EkYNLRBW56mEQ8W8OaBKHFx0h7ACLwpvkijwh0N5T9iHOmDudJOZiNvbYgt1nBwGAKIrTf0O/n+AopVvjDsazOq5HDnnFYh36mJhJSduPO1tkNxsN8Mh5PPPf4TCFhui4F+siUpfpFSKW4lJrJWXrw+ZisIkubSNA/ym3nkAI6i8dgf0an0Soo9arcIVRmVT+IecuWYtcBdVWy0TtrJR0rfGFjNytWvcRnDNwCWqbSuglFg6uuKBxV6g41o+zLZz8GIrL3DkBL0UlZ5FZhDPOa829Yw5SRlvFOBE0b/swS6y2nAjGGuA4/NtXXMSL4GUOqiDqtww4rmBFBGq+UjQKbESfIXsJSz+AWp4tsz2ZRaPYNsJsibQBvSl2atv0GStt8Ift0fKecp8FfnwL6iONPum6nZDgWEMvAUiSyllTCa3J3he+ggXcDBR2KUwzJnsYzheMbZAEsdDHu4ixjDiqKUqogN6x9KSZVGw0g+P2pm1HWLy30U7e3eXho/OZhYlSd5DuVuNBe7xLm6dxxOt7KFcnR+gbWF3HYT3yW8uyTbVyKvrWOdiuRpNJb76/u0Viy0T57mA4nlbUJ+lCof7LXidn5uaKfcpN+bNSpLo77PMElti+qBidFov2WlmLv6Gar4AHZgtbqMGvZ3HM/3vBecSyei4RbBPAGwBWB2QmJy4jooSdE4nD+1+z+qd5rnpOByK3+tdnarPaawpApdZ+wGriqJaYU+bo6OEN7axbn2d94npBxFUpXh9uVrRHgGt0k0IqhPg/MSfkTdcqpHVm+xVKBSJGnFh16tqNCtoUEnc44D18uqMbTCKoPgjJnK8lWb2Xs8d5joIVmHy1tL5hriPpNiNSVlObywKpQI2ACBCy5kNuOXgukjdAxHpm0uNeBAmFjWYIGL7RDzLI+17LpOJ3Zkw18HvBlHRGaVTxCV9DOvON7o2xVqSkM5u9bfZb8PGKIasskhj+WW7dE9GxdZucy13xXVlvofv9qtXpEuBItkVAZ5Z+Y+VCWCLlL/cnlYQDplMMtaI7lcWdg/K/WPPFhvz0gZEizMFLzT2wnTw9QDweK8AlY5NjyheNbgkH/+hRwWb0ScP8F6BazYe5LQBHjV94JYQGXeTjPGKiDmt61s9WQ29Qt0zgVSnsVCl+8mlaFNpzrsdXS7JxPG9/9g/0mSRgmI/YqKv1GtJQvJIxSBUMAW+DLUaW2zDj9pOEK7YFJdKAWdkqeRA8zYkHblaP7B84w3S7p9q+wi1YvMkqhqDlKtl5r7SvkOLvKIKevufwCrL7pY6ftKwECjkZOt/uRAmw5hDQ+0f5j0GE8oCgESz0WfDWUhTlCvUq5LpJ0sZdVrM1DntjGEmRocCC89SDH/aGBnkGbpx2/Xx7MACtgq7FkaXLmoWiQWnTJsxzxS8RX/CgdTvNFrOpUZR1O8MMitLbWNvFemuLqHwb8xqwSbqDxrqxqEbZ/EZcb+UjQMxz8n/mZCuZnrrLQw+WV7WUHSSyrhSVjuglTOp6kchqV/+2J83oEwaPFjKPLeNSVGdj6jjYGnVraHxhgS85ifeyUN2hzYt1Ccl/yOxOZLgKN8vd2rzG5Z27r7mrZ9Qrpf82+GXBLPj0HrqN2WG0KZzRAt/C82/nSaGVpZF+vyhyrBGo6WvWl6jbGFF8dx+Zp/bU5JF7WDe8n5KOfYPBduYb04f7/QuhhRotUw+vAUOgXb8N37USGBzgHUUnl6y+Nv2WqZaEeG/8MshC1KXlIPICa1KI5PPEzXWN+5H3bGk13EhCYM0QA+JdFcFbyersoJKPZLsT3tKoFtY1PU1qht4hVnBrwVsQnkPMqDO+DqBjQ7PtKTNReja5pzWSdtGp+IzHWn7VSg7WLLGSuEv0Chk9klXNhHbREcdUOZvpkpO3QSmHtbkWUIu86T10amH1yA52K1IG9aRBanu3HBkUkJQ4idEYV+Y6oI9nfzzM6aeRjRD6DuNiGsWc8Py+5equm0yKI8L9Nvo+63fkHQryTat4Es4ze9LOY6TUl9zwUdqfJ5N5AQ9J/zAPOAqz5VKw1VXWC+NsJL9/S8GcScBIx6v5ogn9NUu7FoOKBwfkbQ9hR33+7GjfauZB2I0uQbstafg9B5qxYurNLWMmmE9Eb8DB4NQKFlVIZQl3xYMUDBodyN209ygD/umsVWB7srNpV6rvn2l9yCch/Qp7L0rll1oKjKeDRBeID/z5JDlWszl1XIJEqabNHevNJ3Ty20x2k4V/lnATbylyLxUTTmw1x0Qt2ZDlOan3i8wme+i8zq6qO5UWxiC2ZzemVWzTiDkLaTViM8r+77B83qm6fCXyYWr4Q3aHNDHK7aMyFnR5oKNkpEoQiKNxtAdiL5+XIAiPJVqWwN9TUdF0SfjmzVzR8GiQm1SV4m5ba+/3wmNDi5mA1tL/vJYNg1qzHFmPZbGevCfmbFpZvWzeUbHV4KdW/SSLwzRrPeyFYfueY6OMnr1ybyyUoMEv+MMflQeNqu+XQFhrzK0sEQ8yg99OSxdtsHXhbv8YTKuBwlR9BSH0+1AxhjNy/O+53wOPJlHoeaIjhuscW6qSbxo/mJrwsIIDdB7rZ/tJrDVZrOpra8mVq09KS2xaAg50ANmXa0qultmdAQjGcrXRGhMyVVbsLBywz6LWQ/Tc81S/12r/k58bufRJSRbC59Vkmg8YWSKPw+3Z1Ynu8vxgHUFHARMdMiCEuhi3fyVqXEhsVW7TqqmqQE7QWxgpCJpcB5gYAWJvLaZgoj1jbV6hqe9+o2UNrplN0RNvJ5SxDPtYqjFuBgA+w1oMuiQtGok5JmJayyw3c3X3xTmvMxAJZcMwrLJj94d+gkwmXFfJDBCy2i0McjmszM8N10VijIm24PXFOzv+KThBIZVvrscOptmx3mv8gYfMukObk9lSOnj/f+VhzXHSP2VLr1HulPcUXOJYizO99GG5KdX9ka7ejkmky28AuoTL/YajWEEUy4otFaYotOjnFlWxstopR42YntUBeUeZqVGrZbyan1GgOo9qyHLNv2R479mT4Y2fj8enMtMIBQeJeaKO7FxSgF8Kr1n/jU0mVIassYY/pPRIdYT8OlUeYPuUgMnublCFnu4PGxPbbHnxmRWwyLop4PaGwkmNsUf6Zg+seTUQLMQJdnw2Lj4B7SnstNeAgvIHndAPt2VjxlYWoWuKt1wDL3rTbtVJ41eEd9Kx0WxG6vU3nNamA72pKf7fVlUsmq/FSoGDM9fFeWLBW31L8LQd1fP0n5b9hLfdOPPbeubXz5vM5jo0vvMQ77wCGbENCUAw0PLz+La8CX611CKsSVNIVxxmlntIoAFLXs/6YgYn+LgtAKRiZmSUJfb5F0oGW/hYTJg0WDQ+Au9Zvekl7ZbhVVB0Q9LK0XbrLGCOHFMZIdlQzoElNgKoxH/KNtadmM59QT/+2PuqizlAgaBSGvUeWyrlwHrRWRxN8MAZlKL55rqLNjWkCKrfIqmrZ+4oqHszqeNWUMmjKkLyPPilaHF+wAqe6anSjtVenM0k5Kq2kA+uwPXw41PgaBDaFDUAYY23EmG1tFpBUoz97z/sHvx0UQvhZzhmv3NfPM1d5ujJSeeV482WOhycIfMs1V09IEdSAnWSq+8BOPsSqHT5yIoJ47ze/6gu0MZJeQMDFx48Q04ebTA0qm595FUHco6It+3EUa7wY8q3kVmwoRP6pqPwgs2SfLAUzhs7AtuYPrUNu2YP1eeelT9q44Iu+14DuEd+GLPdZiY71JAhGIOQFjUQXQdc22gAIgCNhp13rgejaWUoW3ly6Fb7KO04CPAjEhRia+ZK97FyFSsg/CodKC3DrJ3qbzdAx2CdpFBQ/H9cvFA9/hEprtlvy+9laYOIEtBnj4qGSpFOHgpJS30wOYLhc3/7L+7d4yDRKZ11UKcKEgC4kF29z73hXdxg6nBplQj2QtmNWWq6Sf00heLUMENF5KoImfWRIXfzBNpat4ut0M/RTKxzhdMLf3uMws/n6nAiMEtShBQpKKjR/3MKvCz91cfL5kRXDmYt3LnoRZ4wJ1HInO5QdLiU0/U238kbsuPrnx8PBFUJu0eI1pa8+0WMNDhFIqoO0PbJSf9ym2dY390Xfxpg/eyk/QUwZg8M+BjaCY8rQ+mAOjXPccIP5fgAXUn94WpGxJ1qnUVUmy8YMYhqSxKPTE8VR0GlUy/LTQtIl6Cr6vOqtqjxVTUpAcKIQWfIpjVOMH7F+wO32TAgLFWIHXfJeWlogZr55zQoCrAd7Uc+I2PdyMJvSjvLNYRQg4pgu0U1o9Gx7UbWtWODYNe4jTuEWtyfacp9LYJbwQkfcK/PdaEs+L7AIbDn8zBjUXrUSU+Sa2wal+fjRdeX+9Ck79T36dyc/Y7s5SVGbxoasm8Y36wyGvJtsFUWmoKZbdY49bNxkmSqwrJX3bk4qAZZAulvgN6fmMkaOMxcMIkKTCo3ZIFxTPIrvrZd/OEhqDRw/blslrIGq6i3Ku+r/heox4zWmVLW2o6J6q/+mgObJXbqmnwFfLo+jHhUOhWv7FjeOJmzzyGC7BAUZAAz4v9mmPd+bGFQ4w/9yzPIqvmf+ey//VcbNdYqku1vMdYS0apf26SgwA0cvb/jO0YyHfrQnz8ZFR0f/u8+jYqQrj+GZZmEKikny1OB1ubGioUNE6uPZzApMh8lOTX7eoD4iHaG2s3LIGLCajAOU7Fis/s/IIqrLWK1zLUHAoaQthIt9f5cefg5nVveRbrOnSnW/Oqr3AZCEV1Wjr3tZt4QJOkd3YHaL6LcXCXSECYmYj+FpcKTbPVDXHqqxtOS0lOXgrOnO8JNR3xpzw8ZNFhEYOeHT7rbA+UGsz5olwRzttBzZZxXcWN2NQXirWGK8pSTBz57Jz//4SIG70rilScXAsFLhC4HfUqImuqsLxiAzGOOK09pJ6N9ZTeEM9rlxCOE8zI0UrcU0AybR15yPe6QBgszXugFbXR1QyNS0kHslp3aVXzbc7k8keABADhQCYmUwQoJsJEOC/hp6x20Jpb+5IHaCy3m125sfocle/kJB/kPNFGpV7+Y4X9xEvxkBjo3AofkQwnFDKdU5ZNcb3Iiug/eYHUtt3Tg33j7JOwrJC7r4kdX+CxQNtyVz6p5xdPWBgK4q+CQLDlUHvSY7BNdBfGJaBaRQSGMm09POl8QXx5+L8tEyAoLQRITHZf/al6A06GRSZkSIQieComwKM1JY+0dtNgW+ghI4WO977gYNh1QOYmbpNWRUu6sN0b50wlfR9XpnGUwzbIsk+axNN1j8LrrmOHDa482jjmhJYnBXswjdiZQb68QH3OP2itsbk1OO+lhDzLeouJAYehS8gCSLtJVBKoHT43bCAuoWOPgIh8mgpfvTJI9AuDTdcAZIxBN+4uxSw5GyV0aGTew65OSVygVk9EYSNETY8UlymBC3TijTN8+8Cjn1eVMA3JLBC6PXzhYKigazm2ro3lhznqaFxH+1cIYaDVsvcbsGBvnmVQz68xz1lNdBafgGFczn+HbM/nNzfyldMEw3xDIXYsQPN1sVbKtX2kGOcKOwH7IkRswuHdQliEXeNfVP5q3JTOf2YkbEg++I6puHJ6IABkGn9eoqRTb6GdA4LxZKY6DMEaJi4DlPQo298p08RX2zWkapgVLAIdgIogSLzW4c95oc6VVoBbE0n/UJP4LeUPnGGPAdQR//9XmjnjFOqbmDBYIbQ16Brd2Fgn9Ozmqxqqd7q/ZP5xM9w28meFtpGOL5e4tYhwcm+Dq4H6KLmz6SPEAIB/lqFhhucIp7OxEZzEFdgCI/+v09WlUDZpxzcVgpMj6h6eNMO/GFHD92FverH9XvCebNFX3Mr2isBo9WI7sqCDgNnCkLMbbJSi8IIWlTxy4irtWBtlgNKurZrT+NRR9vBDVqovac3cgrLSw5oGirokkyGAu95BFkhBhHqCpCyWxJTxxQOK5V01+TXhtSHH9oyOHkczcDRsdP8ypT/HzVo8eQcZR+TXs10AybDbpvplOB2BJUDySmMowDFnQLlblBIGnMWVCtVgwk7z2IJ0a/VgG8hOPXGIAg7B8pQ02KxBeLcvRK44g3HmJR0DiAvfGhH5fvjhRHROiCwQtd706mR93QfwotNKqCl8vacU7eHoUvjdgGJuyG75ItmWgObwYneE/hnmb5izZjIohNNyHXl4Wr7Dmhiic29whjPtTUeeuLl7+VVHJSXparhZPPiw7jfpHWNW7vFrDz7YiEO4PbZfpk0cyTwjQBSDNCaDmpaANUtslQpNWGlE9pgWxwJ3TI9y1yME9oJwFc4fEoKjzKB5NPnONGyGXOCFdHvyT+03ouozWYd3j/je5Ux/0LJXb4vIEK7hfOMd9Fkeb2icgTvkq82Xj95ItuiY0bGXgbnSTbvJqpwBtvn8pGlUSsjnRqkZdaPnOPOQV2tm5amn0QGraRaqDrTonMQOLNld3LVAd1hd7m9Vy6HC987zr6wAiUkxJdZIFrWduMFbEvzPtBJ92jvOhyg113tKDsXNuZk1f53H1Cmlg2Kvg704krVp0BstkYmkxs5bQYe1FZ4xZxNJ9Q2jw5SzsQn9W2qyKU9h+PIb947hOlV2Ml6+H6ZXnZR6QiIE4Fu5CYyGjsvmhGk5c/n1eYXmZP2ewmAQKENZsgFMAvY+c9LtS/Fax5uh1tS6mxlSukaQJW7Wu3eA6BVGqiC/OxebInBw5xYmQM1m2Fh1JAmNbppaJfsKecFn0BO5gT8dDLzAy6VKLiXEwJ6VMiceHU6b9Kpvf3/XC7z1o8ZrgLI/j6xGMrhrIziGc+Q+D9l93RtdskoCyfdP8+hjhepinT+0seHa2MylXCeet01ECI5+mm6QEoNmZ31XFZV/ZZd0SaSEiy7yAnuLO0Fx4OtzpOyFz9dfWuwTq/EIZMTOs5AcTcZ8J5SW5nFftqAsz1UVX0MHCajRm0/g1RsIAAiqzL5+Do6xKpPrszAd2EjragLHgWE4DEvmxsDyCTyB3hGl1b2aIccaWcHIdk4YyULw6yZJPMzdkxO87TD319p4tk9bxgNiSj67jMTwJ358UiiQTc1603NL35L2lMGieuy3Tpf8qwZSBs0ey1gXIrnUFri3tWOQkQtWBYPLQzj4uHSQ8xF+O8llOL75yokUvaymi4vLzGl8BOVNuHmWoPzynwASJlMt7zAOkfReBy0iNMWqkrvdlLEGmPq6Vy5ygviNDNbuRKNaA6mTkidupwh5bVvtOimE6G6Yp+Dh6HwwV8PW39VHtVB5m06pII5KLu3XjEbFwlzX5Z3H007KtY2cPiOfhqdbIbtDBJc8E/n2wFi9+euZWWuekFOkW2R4eszmZ80gorpXM7iwMcwPWd8nsQ3CfTfO8jzSKuMWZ0ErCu/ExOW7mnElcQKCNvCFLLrMqwF1usQS/buPn00t0I8i3Ccgqv5bo0lDoWkaFlAeYqfOFYIGk+sgVx0+j+HwlBaTV8SQ6ADCl5oAypx1V6RnbfuZA+DSHoQnRmt3vaDPQobF74uSfLjzQA3ASPili0Pv5Ew/rEZjFIXsbiKlA1/yYLMDYUk+PrEajnDQmYCMIblo7lwSCR5VKeWwfv4+VQaRDYf9CNP1b2hP858GKcgyqY2lv694L5tOxtDEFloifPF/Ilm0CM06PllenJjnAfGEY/R6ugg4mzlQXBwhjaS8HCRPSViz9WFstzfrHRK2bIl5vLUdTPzFeOAbJ5lZNpOKKvVuO38+fm000PSIRKWZN3ByPV7VmAy890Qoj/J0IzRaSuZQU2+kMwN59JLDWF+aBvm9wLpJoWbX3ojwBw3uVZoim6PHGpjDjq4mm0GHf7X+3BtS5DGdlLfGdYgkB7mS3Rzp/bYE6Qh5V6jdf5ji0JFV0mCH+VLLg/fiEYCxYhRVjG3jfGF1PNL/yxKzOgPu+r1fj9+EskRfST4hQFJeWjxzRbtHGiLs2kiQ8A0+33MA4srM9xmlnESQ9EwRVNinHPo1pgQQ2nA/ICtbrWrga1ym2S0scl9RqUZcww6MAiYgsT1UfDXKv9sZlU3MfwsS3XWGCJuce+T4q2jhczfHERZMN30XwTm3VtRNUJLT8RpXo+to5ZU16Y8XBxHy7q9JTHcZv9X6oGe1+5aJoYKuDrEaOwtb5SYggjaf4obWvJ8lFgD1mDh6SAOqvIcqiJOB6TI9w9xGoreWwY2RkqflwpYzwhdFL+aX8jOrdHjyiIyx1HP25xTw00LWTECn5fCvtzs8+InkdGrwaUP8V+wp8BLjZLpOwMWxtZWYYhChU9l7JEM9HFS8iaYoCOV7ThHB6wzmNXPSzzf2FDHEa52FmzTp75GVcirTzWdXUFi1soTORRIAnax2IcVNNO3gxsDPA5yhpMQtl03ppbkzbSMvXOypeWM7UqrZEGlMwu5PQic32GGgUbskqjAD9YuppZCcEEAvf84unk+YQZL8l5NkMjtsXj4vcQO4N2RxAS3QmVP70S120qkGvnHDgl2gM1M2vKuciXyz1gNykrS2laMyJO6nWno1Ae7oHjBIIuZz4R/pWH2nfRmti6lC2Fz8aaUSzfvu/kMb9zCyolyWlRZUVF+EdlIoFIpMll/w4o0wMkRUJmAilnI1X371InyKgvKJ8KF1u0MvMKmC7NwyWmN3ss521gzQaZoG+WCUR1Dxy6LNwkpbqzhimK4/PFoglHuU1OiOo+uByIWIFlX1JD0vQxa+BRq9x9Kz4P+lVKdoNbNBReek0jWF8CZV/LPdutKU8rUMw69+FouxhCF6fow3/Czo9u7w/3Sp/0vstCAFHM9F+kw192JkVACExQjdJwYE8dyRq6cMqxwYC1+Kb2dyst4VLdhe9lhEvWdXdWxxwuS4FMqZQzjto9NcfqBstX6cVVV6rFzCFN/KHJGsHcYhJKiEQdX8wUYOnLgZ4oPYDME2JkTJfMS3rNwMx94qJKZXvuc+tXKX3xj+ByHhrVW5bY+O5cbpaGq4YMSv3GnE9QNa4Yt45/hKVO49hZdXvS8Ih0jGhy7+JY8Hdw6M+XIjamo3fyWXjcYZjcshcYHOE9rLEo9KGN4C/vzZm93TCFsjATjRCHKwylr01VpIziYzR4Opd+C7wcvd0HZBwdTXTL0ebjbZkFfVPuGkYXIIssrKkdKod1b2yQTiHT+hSPyWd1mAwMCKcSwLc5RlUMHRm1485Wf+794R7JcCGXGLk0s6g7J9ZFIT1kg1Ok/yNRMbrJp/XMCx0AjYMh7BS04phVYbP73FQ6YsR3P8FJU+AO54hiiOGQA//KQOcvlHxcCeA44gfFKHu+ryJvNfrlFxp5+IoNhd8qwThkTtbG2Zx86MAtrhxpVNSyPkDSFl/rIHocbiL2hlgXGglk+t/bMa4H1uOM/yu/69QvWRJgrsP1DUzjhAHmU//7KiBPEcW9Uzh5sVPMheer3MS5dUHzX9C1OrvqwW8j6E9EYLnnyKUuUITV0L7h5KYgV9k56Q1v9R/7bWPv0pHZI1R4mrcEAnVNwYz8snFxCw8d+op3wprgqqfoo89LDt0WrtO0ii9qvsB0FhYlMfx/BCIDSwfysM2AH1Kfm0Ll/2bNiJHyC+uvU8o3YNUKX1zgNlBTwDHHEBzONKwHkiuxRlbIyiZGnyxzT6yffN/RpCu1eCcdiLtRk2sGYjt+hmo2/4LnDM2XShrCXW1CvKkgvSIDBC4zbhKGFCl7BYZQN8mxuA2j05G4cEidkYE0yF+ImGiRqUhdVUkIHwL60xX+m2LUOjyFpxjy5aapPhKjyjdnWE7V3c9NYVKGmzz43HqAuJD3OMSy09pPv0djYPpWKPnT7JRzp1+HJXfSbv5xyOqZ9SJAkS51dSA85tXUx+0YaJbICGCdwUyvb8naD4gHR5dSULlogyrmks2F2RJPiP8IdXNyUtGwtpsEIxcefUij2QkwUaa7CWlpBamNouOq/Y/DR0ZUV4VozqMrq4vITLqQ2wISmO0JjaZAG5Qm+NveUWFdKCV9Iy/blr7Wim4lQmbxXjMqktcQQPy8yivkJvWgEQIxECDIR+Q5Ly99X/AFV0NJWdsRzorgK83pdOVDAcacTjvcoOR5iCxL8SSIgJiZbBWK2cGGo3xOLNQtWtPz8sIXrqgf6sCw1JorclQkhR6NivdISb62+gqlHO796Y1O7WgAqqjA+Fq0u8zOgMwATP9BlnCoq7DvVgnl7TjJToLtuhFKTS5VPduamxRYMTme1OGRQKgQmI+eMCYhrp1YOdI7t8+/VItn6cEDLzMtY04llAwG23yosP+aEITAM1srTZ9nKJhosVp6T/3+eIxwnJWWREX+KCW+irP6CHKVFgG6qvg0IPriPq1B22T5fpVrjB/25cWgo+0YFPu/tSH4tfyqoPtkjEZqbUfMBEmbsB35AnaRsoahe9nAgrcSxIznwdzqG3RBiMXiFYLGjTH8w8/Gml1cy3xneEWEKXZqvBZxL+5g23bS+0ndsmchYfQ1TPMk/7SktBk3OLAS6mpa5TxrNaHCxkOgDO7KVZW5Wzsnq4JiagIeoIiG7wcqXrTJGY3gBMIweYbz1vYFbPnj5H2VOvpBH7VABPjghi/c5Kd1UGkbyXucGIX86hMN9UYN+CdnKhSupiFsLejyO5nFveeRV+ULwWZ/h2lxbn9ae3ggg3OAKo5CD+4jh/zirDysrl8DW5t1pJlbafbWXUFXA282J3/OxlB5nf3vsRrP9FRBS69lyHfqB3j/+s7oRsMu0/tBdLgb+q75yJOIqzf25jUsNWSwpq4903U8uRw6ltQBTkSSZFPh8U/Btl/dr0DQQlfHEPDt/CPqhsSg1Npv0hNndjtKdXYbpb61UmecuSVWaPuT50MqPUnJiaRKGLBvShWnstK98ziCGx24Y7T9jlfxJvZtqiOKPIuyA82VO3YYLRnd62TeSggPhgvWt0d1OtClswLHmHMUGWQRUenH5fkQa+KNhAkgTgsvVwSnDy2AZodO1bxFBhOcCmwX9o6e7TpZBeOpHhXKlnod+tPn5g7VYQnOFbObS+o+F6pbkl1VlR2PSdeBBeUQcm5O2jojKmG+F+Yt5VgyDeESocbEVK035mRh5MqCSX3wqKXm7ufjkAtPOa0OFAX0IITaNoD6L+PBwVsv9NEJAbfjHgFg/l8Z3vGpzR6pXQcrf8yJxPOrZHK0qLw3Q2SXUMIam2QOgrXPYbtl4uVLtrXCHX79rR8Lv9PI4CNP5kl23zBpb0TaQdKiQi7+dJbtCybfZpsM6BGhgkdlWYHQxCZ5pcy4zAWUcbSYje14+m1aMtt+8kBBXeyl6dQcytnJzPu9ZJADcvy1v0raaTm+nwK0vRO9k2o+RID6HL1B0ver4RHW4fBjzf006OdRgDpX+lRrXF1rxeV8xtHKWvoL9QG6bOBgA8865H4M8FIgs+ydCnoRn3K4zvXKcFuguenUYKW2jiYn4wGxjQKI9TdmCGoHZS0OKWeLUDbfXWzHb2Cz6xdQLWFeUSKjkSGIQD/Asm993PSLrkvpTpCb7ZWGXBlVhmSKo5ghoeO3NBbXoBIao8YtHbshMrDOWuDk4urd1w3Vkj590EyQwYawgtek0eVBhlUgQgPi7HYzbyLRHOrOSqPSJvTqAL2JCe0fHZHLBlfxtuO0f6mAHaWeD0FHpLDfPjaakDWC3pGe4ofG/Y4YMvdV3c8qn4CJkSKW0ULw+ygAtijo0YX2pId/6I+wKvQQ4ldhAhNz6y4UBE1OOXe/XaSjWQYyrcKEIRzFx/oDWLex93+jjxvfstFkYx0VJvncdGJTVsVvQaIuO2h0N+jvWkqHSXHxv7yRkxgDSNoVWJef2JVezQyqvoE7GQwviXTsW2pnie2GZYUGHHLG4obbwPvZby/tIEgeiqBIZwZifqFSYxsjxt2DIv+wRbgycByUr2IdmxXuekGPv9otsK4kyoWmCtKmqFASQTBZj3V6mFptgtwfQ8TyQ8HwBeJUpRHrawHB+kwW1Sybltt8oUD78hBCkMspB6anUzYHgaeR/kNg2lR1LyC5b+yXWKgoPduFkWPEEJA0AHRCDeUlHMXNDQR7s0Zxk812pUmtovtDCdjLLQXQMYsIgzP4P7dMfHtklPCVwXF4RavoiMFvWU3MIVxUODHcsb8iGzhUZgoMjBrUGoWhrpcf4OmNZQMAMzukOoF1CQ5w9kl5gKuo21DvwJUqm3JPFKMtLI7mEV3rx/g4bZfv0au6WNTbybFTxqs9xAdWq3iBcPF652DSfwA/LIEQw3HxkmvuNQaYPZe7UKpDsrMsYuE0MuE1t7zkx6tY9TTRscIuB2OacEqEqlfa3xNQcAzkUXy52ztOigNeFQNtod+vLrW87D2H62NxmkKAkQO/yQXetENg/Lc+YdoJuLyKh7fkqWWyl2L34ri0hX5MDBT3lTFXusQBbARxrJ4bt7wZivnourrFOaDjszQ4sogwadTm0X6CE+JymKycbWTNUHTMGBld9BDiyYRMGp3iKxsQUNW6sRbCvaU7UOeLM13p2sd2b0ulJ3U2/S1LEVQbpl+CeS6QWn0r8GoXJ4CJKdlrb/RLO7pENlPJuomvSBqikZhWXooOn1s5oVepwaO4VLwggehqeyNId0wsAIUt/sxJ92A5/NDMdr0iWFu7reHw11/NBxPShNO+5kWpKxDxciou4AHiG/EkK40JZ7ZiQjTDr25jk8+Oj+TYiXRli/I+9KCYkURb+Z/tOj/VyIfHbbsIdEngltg49Kjz1blDQHFhBFJQwPzLua1Lt+bgbFWbQJwvIMs5egWbbSjPPdb4yGHVQn0PDfCAzP/Mq6r0yADj0gWXTc9CUrWH3EnU1w0vJjAZZu4ByWvpY9DsB+pqMbuRPXLAwgI6+qx2eaPnWPeDJU8s0CQr6mVLHtzbmesTd1ysu3hz+5wWK76FxR/rRkBWZrbzA2hXnj21SxyAwumj79lGCUyt3EzpHlVNX+apN4SA7AYUZffAOgUuWstjXuD7sflY8+sd4WOxOR5R3Kf/knDxn3zoj210KM5HxHrjYKQKRJd+0IpuaXUCj+z1CUK6Gt92Lsndxck8MP3SrnrVJF8UYkU5LDJ1HJzMUl+HKkvljDUflU+Qk9rZM5zYb27e21CDMkG6a+wFzyd8CVm5btKHC02dGUO2OjXbXBV7zA0gGImYPEohRrvUSeURA8d1k14o9eRPYGfMaHrZjsjBK1YG1/gDREZgb+9VtkT/W3m0H6AMM14kv81ML06ZRp6zUWBduJZRnai+obQiSS3xZDMYKGVlJnLgYmxgP57jMIDCSMuqTVXUjhoVPRJ0p1tG/Vidf6KLZqHauiDvN4HhU/3s6w7qrfz/ZXj1RPbS0HpXw/uZ9gg0khdS/fyj5rVq17UxYF6BjYqueUc+R3LTl7v/Xf9Fheontvxh11+EtNtfn4ZTPoFSz+Rd5Zue/1FWkau5vxDXNCR1aLIDsQ+3VZz2qwf1HqLOCMF28AOFLVRQ/ZQ2a6dKfwHLQ9/gDr/K+Tca7GXtu5cPUs1OndJe3D1jppnzLaFGULhxmGYUq3W2S6W9fjDL+E9e+57LL0DlqII9oGzS76uDNDI6pw21HLpNWTvO3zrRWDEitJh0EsYSpPOOeTcWV6CRK45hGL4NTUnjBjLHw89peDyo5pwYOtQebSCnaWwbhBrNXwx2qURreJypu2i1NrLCVg44TM9L04BtAe1bmZD3zIQU1IPJNZKZwjQsrn2l1CXGxXan+S/s15F72/dMQTcT5pzFdJFoVMJbR6/ChVGG5PzoNLmbqkCRjsG2edZwUznrIyQ1fpgGyGlRw3Cq8Nx2DPbSBULB1Po95Ira88mnumaX6S9r+TEdIgh3sJoMVJRyygKn5QEzeS6dwSQ5oQw9DtixXlQcovZz/wiwmXYSVVHsZM/GJdCShfty3PtiDKCSd+4entiv6kAG7gNzjqJdxw8Cgt3mdIDE+dhPgcx7fyFk8UqzpFJK6Y3ZlkuefoHG7GUVnQykupd1YEKSb1QjiwFSD8If6zLObvv1nDCSbFS1c3c3IJbzaDwGPN1Ef6LrTzcWGa1Ls+q939Gre5c9gB1VxZ0ZmKfGeJz0rH3vkScbZ9jqf+v5XFHvwm72v78Sp7zGEvi/pSAjfxIQ7v++bqhJiOIaqYwINkH3Pf16cgU7aselDUPJR6jzVBDT5375ObguUoKDT6g7bu79ZfY4HVQJzMgH3D0rOULrivW7obet7rU5ndYQGZ2l0ldXUqEeMPdV5vGhaulvuyUEDNsMQzAfDcH4SnGGixnXZnFhIhDk2hLu2q8Fhtby7Wc9LyqTbP7rLYzIKxp8ntrWM+amwcpWhv1Hyqz3bDoyb0XrTuXf14JHZnMr9Vca7TLmZfBgYqqrnTFrDeXV8LbI7o518qjAbjDBnCzEtK+G5nbgtVbsPeVxFBlVXzlr9kabqccH8DriW9x5NyzO/iWDgbVUr5DLjfVZCev8IIYOnT0xXQzN0zK6xiv6KHEVtyaRJDLMtkvqtKMWQF+YgRwAwHYvnMtO+ctudSH02KQbZBQ460XNDP4xofGyNvizENb25bdRhjJvsI4atfODQACYNEXYVnddosMuUFbCLbH1h70t3dXXPwdc3Qf9202aSrjTF3Z1WyQ6r2YIOh+tesKSJUuSgH+BYJ276u968sbBZPHJwrZA2AzTuY9JQ1sOebnNZaSfmzKPWKTE1VfghVZyskyv1tmP/QmM17yHKJiHYgDD6j1ez65abosO5UDpf9uQJFLhI6Vj+y+BPredsyDBmN4cxmycgPLyxDbp30bDJJ8H2PKUsH38aZQUxgjURfDEnb6dMPq9uuvJ6qRxnM9iIswKHqef8hD2tsT6RXUTRpuMXANiROTvo8p5L/q4zXyAPP3wdw8Cqr5Z51Zj3pcPyyTZYGnJEZG1zlMq0nep2GuXHf0cO2vEUzKusZdYz9y6x889+gvMxsgcXg0rcriQJDy4+aIa8R8Jd71dxGNzkl+5ChFSsJEESwnWBOVR82+BejueNuDsQmPkTWbaK36i3dwHNeRa4CyTHTTs8QTdG4lWEbzn7qgJfwGvZz2K4Q8LJQAbx9P1oSDlYcWzfw1Djrm1jHiKwwrQP6HiAFfUrNj+93S+WyxqjTtyXrm2eFrGDUX7UiRr2xt1vsYEM4A6mFns/wbsZ0M/X9FWyOQasl1Z/mjVcqibrU5k8dpCwpl8HafrlfANQ6PbkhEwo0BhXdvsvxECVhXh7ov8Gz9oYL8RVMX9gaAVy6zXWZk2PwSGrKV5z/PBkXGlHgj5sivumrspYTtLnSxBFFApslvrcRrprJ/k4hUm6Hh5YpwUCTuef2w8MQtLqppi9DDL1Wi5s0jsxXfHP8CeCD9r9IDRM5iw94k99kanxy33uXTTGFYIrQ/telBwvIwK0ytKczPJ7n02H4wiRZHr0o370wVA6Xa+Smqh2PUikgIiSSW1UjZpDfhgOr2Yu0DtNFvWMrL5vO5Uu+3IWwPCoaE8vQ0gk7IBaGJ8AhasL3Z9zKt69nuELkQ5pAsdgMiJk8/Vym5LpFMQ4hobs1HVb4AyB9dRJFfvQvCGdew5+nMTa2Bds42iiIlezjXMb8AjpDS3/cwbRnI+sdvRz4YXuxtSpF2QG2lhJxhZxIDzr474KUlNsOGuW6FAZyw5oNefUqXkKUsnUM1jwWq3cis+VFpuf63XSn2lbp8zx3wkkDPDxwwjseLI8DzVXzeEd6ZD7Xj0cRXtY/M0tJ3QCimeQ3NAD/VycO+LwVvdKa9P/Eb9l54KSn8a6mRtZXWSPzM2zKNnu848cPX2Tp8HnxfRaai4TG1xtfmE8ywy8mKDogYhKZeNhgue9+fsbCX3Yjw7FeOR1b1crsf/fW51TuEWgAwYUmfi/yiY0YoEhgXSbXqP/Q8OIVg1bkXTHRMtETSN06aw7qvLgMvRsFFY2l5SCU8NPCE3CIbanyHfECwZT++/NsvNq96j3CmLxdarOGif5u+x/yi4RJfMP6VWWzQg5FCyZV/LSuN3AQThPHbgMC4yVRrP+91vCuiopbhaidrNnOsqm0IqhBuQh1C4wmzRBkU3BS5nRUAkcS4bDN4FC8qS5/r+xuM/wn2wfSNYuPA7N2+ZLatMSC3fYioB65hNAIfQkX+dJqscxk3rUG2ph6FMPCf0jzCpJzdu3PuBhEhw3WMdKOT2ZJFoPTu9YOYyGTsEMHZOD2wgYRf/8w0u48//vgRwbE9qzIB0QQSimdEcqpoVYKnWtKAn5/pe6n4hQbof/E/7YRRN60KM36r0wdYDALtah1Dblr+czgabM6jhSkIq4QZTPvRff4vsauXqUmd1csxlopEG0PdBEY0WsBpkZ4XBnc+LsgMHoxNU6189/0a9C5if4NpSBN8D6J5tMyfdXR9MlTGuHxMbB6gDXCO+Fx01VjqaIkqqv0gAWwZeNrdh0Nq5qrb5hSQXLg7hR+DbrGHqholt4XPVLCqWejBIIYhXm/28mCKhQNXm4jUdi7prhRAsJjhOApd4D3fGVCO/utdg4WSVXhxyme3j/LRkaWH6vETS8CSSNhZfq6HjuIuI+YOoMyMJfNEdJrEKQHVN/1B92Ovk1gjiytbbb2MMNWh1A+l2z9KLt1ZwZ12647i1b7z1UEDKiOXyAl+R62LZPuaJ3/NoHUmnZ6wMvjq3qk7jcCMxXL4Z4zZx+6Ozf8IjCaF6rVNFqfgGTRvXW7xvtowG0q9GCIAA4mRc2FQ3KDKTMZw/lOSqUse+nvq3l0yN8wQYgJ6uMJmEuUxy9a9+poh7YLA3HySHkgsmwi+Pk0UNxkUXtfJQaLR2qpnAy6bAMz3BDqz+/fs0h+4uo2hCS5HYu/D2kPjy0vjW5nvCpsWcRIosHMUqTuMMWWRA1ZjLD7IKE2nTmiUWEGVYVBy7eqq1dg1zWEid/dmNTC88MMdXG9KPfOlMUNcQ+1ca20Q/qQXGIkZD8IYJqpI0AAnJN4STZhiDBYF2lfKvUnTclDeC3aEx9+WlHc3qelOBnmqQvafK41QqNqRFCUF3qmQMtaKeuLwkBdD5zMxrNmaqlFwI34fGyrRdeqJ2VI0xW7qtP6dF6DXI/fFemiQ2jR+Pn2IqIvZ4ZSY3eFmOQrBIiIEiDusMpgJtDhSn1l0JXUwAgr8/7ovuHkKGtRFZk8UrpaNVFSYKIsoNA14y7IGQK+sjiMJAxMaYcpPIV3lEFyBx1n1uraSouTWFSpY+kc/D1ClqccsEmyG3jiv1NsxriHCr+x0K7UekxfWpY8Cgs0hRkH8WR6QMUzsVTJd21p7Sa1/mi+Iai5vGjKvasCOYmiDqOo5JRoUUnNSeFAv0yd+JoEA+HOB7luB+ypEyabNU6qD3hTa6WSR4WNxt6muiEYSJzC35INiDA/Z75vSHYtUkL1lTZI9yHMa4W5vdSlsM0RkdKTGUcdTsUYtMQdqphRuL0gHQvgcuxBoT0INUI3swNhzGsNPZSPpbfmX6x5UzN1vYt4NmsD5yYpCYLYzRBf1A2NGlrKMOi4WvwH+N8/9e8occh3q7D20hjQVvOvKeyjTV+egiKsyaZhhoBPBYvmr6eoMJHAlsND5N2CpXFEHHiwAWwgmR2A5raL+B8yTKJnBbwitcGda9qlvgcYZF60qWwTTNIi4Xy4IN4SQ5o28cWMeuI9zrg3UQt08xCcC8a7BBnm20K8XNrXYzmbxGh5u4Rg0C4NaU1XtWyLpEcIprM+5P9JTzO4d2IuCZICjMIILzAulTlkYNpltbu1zSOYNc6WTraLkwmrhNVt4Wj+K9/D5hdioS0oBcqlaKgKK4Jl3i9Js4eUk9Zh4WsPiY75TOkbdVzT4dAFwZIf+U+ae/JBVFGUrfa0N8kDW6xFCOgqJedxaJ/GVcuexaFxS0bJ/ft7OqXzSPV1ZtNb//PSqJ3aMVnfWFPw1UZgDbfp3J3UQULFihKdlFF90X2NIYUNRXu4zka2GGwulc0B7x9d/ez+cM94ETL09AzV491lQGVhMKweu8yNbU9G4viLefkq2OZXampB1HzQnYOTabMjehCdYNiyd4JLG5zy3ZfXtjxT3OJnykXlpI2cLd2zgtBtm0AJW9MoeuqOZUBx1uLSghDvyHc0WX+f4Un+t3H+rP3/nREOpfxZEbmmdoVlWQip7tdeyi61ro3+mOaU6C0pzr/YV33Zw1bw7ru2Gh+F5Tgu/cjUq4e6ZKbJZyFIYb+j3fAtS045jPgvlZ58sGKVvtXlVoOZ1J7+kTFsx/g0kwuJT/CjsjtP4NKenZjT/I7ZD20zUQVUqTPxfTDBHDlRWrnHi2oI1QaDsImsBR7RpVOYUfOqW/wrLJWe5l1wtuEdHRppf9O7YY/YmuvGMZdMqECPK+iS7TxuELcyuXcn6aZd8lb2cfHgggoxQioOWsTUBDZANzg0J2yulEHtckN9FesTufiPzlAcFuFIjihgALYo5TM6VkhqYE5tX5BmRi1keY2Gec/FxtxON43bxuXH+j/512ZcLsnyvk1gWpLb5bfpZe6k4dHGaJ4iznspvP618+NCcy0wU2Rms0vVO8TpsBAtYvKRjli4yQIylxWiSoJLUDtWGv5FuIwslW5oOwb0RY5jvaXYscV6LUsHcPISQ6KWpSW6S5WhUpzUUhS/NgsPnNugYva7V2tbeb0f4u3Z5zSIbMVuh4ZnpKmKsmwRwc+cQECJ8xy4jnHuHlYHnXLTBLz/TH1JNfxTVZ3E+EuaTp94s/zmPuxwgowkxEVUfVgbwl6h6zAakNJKgfOAvuJfzXT0Yf/ACrNXWmZHUoua27fk/NsuJE6R2edcT3dCwPuMWwg8BJNABrkotCEvN0vHxBEXUa9rWPGxFIXzYXXCNFXK+WIlYD0Xe29X9oya3kSmftypLaBsUZyhkI4scGhcUk8/vBxnLNTM8VgUKJCYG7RKWJTfuZ79FvPt78BH+nQ/jqZt/gjG/TImmQJGx7pLKAYE7D0lp4tTNNP3Xhl8ZpfQIZeZn00dR+CNsZS0h97OiI8Bk2eA+4CiaLb4zsUFkDCHeMVA72DGcfUWqsYwt6aKN4WkhwDtuKhku0W9WglW+ThXoc+MOPccOnOEBCwAZ20eHdRsHnKkJh8ZoXPkHBM4ECnlL7xHfijPZHSQfGjQAEEJMVHFFTuF/VnbRA+LhNY2GtFXN85vJtHEmppXrl0hWZfSv0qqZkd7g/XZKw5Fu/juDwPlNz79K1ECIr3jce0VTdifquVwPoAW+8hEIAg4TV3rM3j2xejot8QFYyOk4GkQqXx5jzgQrWqm7byD+WlKPYOT9xx3FNkQPL8+gV7h0FTCBSezzqeNVHtjbJ5h3lSgpFBcmqFcTc1Np0mu+ESiZk80soOJwGuyleFxh3yFex9qsqKxSBNXFRhpaO4S+qjalLghn+ks9LnlDZ0lIfLaXpnGHUHdP7PsN6I3PLhgZU9ylqAzqmjMFviq/02+Bv9UVYNt8x941g2bMtOCqdNmWOs4E6dbEFBacyj6e16wZVHxPvwaC1WS+3eEk1kVfzTD8571kpaIs7q2Oh3WaOE4cegFdESoCRWBvnK1Hx1Ll037RoSEnVFAHbiVtgazLEt3MtV2WRSL42m//HjZ6W4U+R8hYSEQjzKH23v6ek7XsrovlyJJu4jjc/zCtCy1iRiGHPugPov7xA/I0PRus3YVmzG/nvpO2FKQ+DotDH1WcF+JWLJlv6Uhg4kbLjJVdGbT5es/VhTdfwShxieg44EfiSPSvmPGE6I37GOIEfx/+vFW2jHZdjlw7Kl/DdWqFjIR8lIip9545fBIDjk9/UFvu0Uvxyp48X1u6O1aX1EgOP9Nnox+7sCUtDubshwXOwPbRebtnwK+R0WD+FSdoB9+xasWIVlYiozAKfOwnpeQKyjjF+F1guMsggie+BLeDu4eBwtk9HFaH9pBkbo68nmaziBzka0jHkrCIMXCjaTsUjIScFIo9ldnt0yRG43rc/0HgV8/lSJ5Ufqq/xq5HakXnIuDchr0e36sCEj9OzPsQlY9pKZP9R79xLqq1yeH1HobU6Q4RytogZCckFMMs4/huLs8PhXQBR8cVRRN9gSBTD7v6ZTqn3UP9CFHttFUqym1KxeijBwPZxsMZ+pVcVGxjgCwRhdAXxv6SOgcjsQnlUnwEbCRnI/HOKa56b77F6TgKjzoZ7EUfrBe3yluHGemDkwqn2iW/FlgN3JkfM6gwnZ2RB5HBf23djPE+g+CHjlpyBXNRq8W0tfBQoOAe5KubkS5cs9/uWIXCLwkmq7BDKGzo1kErog+cdYcZ1Ae28+dJ4yvoSq3YsTMsur1RWdKRHMsWlv3pUebHzgcvXXixZpGz97QSPJ7J3vzrfUrjm4eDe39xReYIVnUIB8Yj/zqECzzswX1ihIT/eQSaidB3Ymyw8GIuJBBZ2p8rmZJYMxRuIJakWboaVKbJ402BNMBGuit61EAFDz861BXAz07Ao5/ndpbiznCODiZAVLLpP1m0hAVSfGMlsd7jz8UePDEsj33/5vSdhkC9L8oS0wpc6ISIrhngdFjfJ+vuxJDchXzywVsebgQpL1eMH3zHazGcUQwUpKeDP1zKpOYS6JqTvKSyncgjYnBKsNuUTQgGcpWw5ZkclSf3m7Z96qGkA/4vQh3tFNGlUXN3Un74n0fYCi/xhNE99m8hHjXSBm9siMGlegxhIX+THxSWYhHHulO16EmCRO46HtnRYqsnLV2N3iqbQZhz6gXB2o4xbLNiKvjhoz+RUEEtpmo+h/snyFIBee/7rg6IUkKZ43VVv3RIQZJ+6sTZK/QmrqjmOeTnfjTwOKjXPmm3RouZ+/wN9z/0Cj3Hifvm7wUTVdhONdXrCSlfQqepVQ/8DJsXWBHIvT4BxlVT9+x30w4ga9OYODEIq2cvAQg5i8WsUd6WAFMHNZcYR+ugsFZSZ01lobBV4dMXxTfMQi+gzMEB+nXQnGnSMfFP9GFtS/Eg1A7/efstHGCTEuWkDUO5F99UrXm2ZeSYYKrp9lkqy779lVifPD70v1ggdr45cj5SOi9ihjF1SxrQ5jQgr1TFV3hj00TMFAsg68mU5g+X4VXrW3B6ZvxsUNk0RPESNub0JLOoTqoTESsRIxU2iXvo03EWfjCnq2mbLvXtUYF+nyfp+o6i23iK0BiWBYuKwvhfzWmMvKQQTJUKq7IUVEFYmbkUxu8FZA3TnwYZS9C3qUOpr7Kqjsio1Ika6Vj4XHlMz1kgRT+fQBVIBrP5r4zMI/3eq44BRNMYuEw+a2HMgcLb//n/RZzxlsD1eViDMHVN4DRtRLaD0IqVKh1YUbZ5UmKhEHFXLJPcZdllWiSocZ034EW/sKdGTYv3h4CFwRTKSBqWlQw+rjCKIogCaLQN2VD/tPVHar8ws8swSk8ZgyH+eqnpPb6UiEaoWcJBy+s/rhHuZPYp5a0fnZkG/lV/DAWbS+TI86Mz1nJHQqL1OkAlnceRUpJUp+uxU4ZF0wI/qGzwzZkoZOC/i4sIuOkxVQqMRbekoiqsVul5h2SctHpA7b9DQRfwQa//I6GLH1xBsl/yrOW1u9w7oMrgacQyI/vNtmjNXoB3A0up11dTVRJru4yRPLZIvu/Q4rCUhIbS0bDTFti1t51ouV4AmV76dhsOB7B3307aqw3QwGUhZNROucElvRuMNUKJB7ZcSQKqyYodlaSr3563vVESYTnQQaTPmQX6myJEcO5fAdkzR+hjtCbe/+3yqgBoDocx8yRgoLb9z4RpU2S6N4W71kgAMCI0AWA+ntKnh6Jy1lIpJ22q+KJb6iLnfCDWcwyDar03HjfTVxcuTpVDH4PL/07PDadX8/daFyNqpS+7E/9mPOANL7LgVCPPcDAN/OzeqoNQiqncWouo2i444/8ZWgRT3iU4FctEa7aQy9sA4udHq42G/JgFClpW1BUPB7IDqjA/NUHvmJsNSxIFJ2sop7wv7QFwtOgnY8ZMuBBTK6utL1CZArJ3SfH4tvQjba7T9uj1NpL1wzMhIjU0jtU24FRky7tjs8OTPHEoPuaQFwCOsG9JtGCpDpDdt/6+A+KmMfu6MN/+C7HKq5VZgSvRP9v07N7PkyoXpmeb6e/XWkmKQDbcl3LKRxMJZ/XeGUs4bIrWsH66KdBD1F2oqzllg3DmJP0ETDwjrlhlJdl5oidi/QyVo1LdHnvzmE9T2ZsZ12QwAR+Zyaeon8wEBxIAuDcQSUvcdKgDGdQs251B8zXLfYXuBcKrQQRwmJ1CcvsBs6HHtP2UF0lQErjCevZCdsMEfZeSgUasPDuNxFPwTIPoL0VNqqFk0OK5kXKp8Q4Py4Dx/pPOa2zY+63Kw6OdCStG/9GfGXVvqMPHu5PjWpP2kqQl7eMC2TMNR3pCtDOKg7/8IuvkAKUdoL81oTRkozJbqb8LxwIIedY6N6lESIVas3b5ahYA72ZaCjmmkbsp2UyLhuqDIpWpRRieO3TtGDffpwFSYadGyyiLaWzp0KV5E7YT7MgQGSMYH8HkrFq0Bn/kFHA3ZbeRZXBA2OQhlfGrj746A44JOGM4fjGlPeOXUTs+WBfzThnDr3vbrFdkOjnyUoZKcAmYV7HB4bAz2YJtwCv2I5V+adT3t8riJ0sEeSfs/KbvvOSfVWyZuiCtR3KuXI44PTU0o7HADlJuqw3bdAuIi62rnYij2YVTruDVTVTcdM4E8VolZX1Ww4bTYcvF2xmmk6DKyG/t9vXzgQD1AB1LuwutHAf6JCadgFWK5R2deV+lLQPJDYuGRBsKyJEiZF8fReRGZXrdPvQ3LO69TMarniaWe+03zfM8ra9G5tmIEOj/YKsN6pxo9JFBj3kjQOO9KptwACcktGST6k7e8TpTjKqVXXpC9U1xx3lkKQ9iSZcPQp8JxFyu4qlqn8YDg/Ef0dJNKaTlI6CSEAcHgqtH7flIajXQmU14IncGCbNAIey7zqMdWx5N3cY9TK28/mXDeiJYdxIMDEF6IFSF9Fx1MviF/BV9Ro9FaOmsF0GrdRkZJKbbtEihIhVF5+sGNRPl0VAqbtCY19zmG4GNBA67zN9mtSbwEzXTvbgz3S0DlpwGE3m2JH+yE3XBDczpRuoDyr9zXsRsd7K1LNuH3GVuz6jPeOhUcJsr7OVDbob5tcW2RgRVReDnsBJu9eSFw9xhgYmjF3BFwMi/enUBHSj3CMxsD/fuH+USM5yUyBgEnAjcPxo2W7kSjlnP8CgQfMa7qaJwGsxxhO2Cdm2MxdVDIj2dVi7O8DbufJHpgSH0pcudJn4tCeXatzfZ+UdIQOCNzc6ONZUKAiXLTd340+ypKtIEubQ1i0s3DQG8bKQ87GqH6hdQzVyAnvSbbBxGlqMVRmJ98yc0SuajCcuCs7PB1gD81bxYFSKVxOA5op3PXAUEtfpwA224mQsNpIdMNTGyzDm+8Vqq1FqFpb2jyRUIefBjxPwHYaD3coUoah4Dq93q9l6m3QiNjn/B5BeFj/UznCgaJs6mTiZs/7qD77cMHZB0/GJj4x1Mp5pGS7p/RN5RfAzCd9IBKlhhmVr+gC29s7kf1FxIjNlGPsdjXh9oCf5E6W5b9oO3/U/h0wIdOwja37+RgqAOmUBDKwnV8osI9b70Svq2hoEtXVdbxzqutSKu3MCTc+LMoVBxyg8HHrdQaXz1PQhCiT3AF5wy2sO94UytlJG6cZ1Ahq98ARYqWKFRLhCefCet36LxXs/HPlzuTQo/i2tBDc0pnD9lEMLT5Ly97d48JR1P1KEUNdXARsblJ4T2Fq8OJ1ANeu1sM46551KXOzRBX/MCtmqnmAhQ89NMKewDybf6+VTocZJfPreZYttpH3R+hgZ/rorUzKo7rbVtvbsw+al92Q49DuTsSnsSCLyHCfnFQ6SKZTdrIApsp7UspLT/OzdAYrfhDWAxrNVPKXQVwnBbzlkz3NSRzgDW6EHmf4IPP4ptoW2E/HYB4rg5Fo08OxvEV800CrNiez0B7H1zF+2AiAnBD0ohMj8XIjmHYzMwgZIq9aEFvezgYDxMSSHBYCEWw3EaQR1Mwhg9O3g5vLeA9wzpNfx/7snRK9BeHk4A9F88MrT0nF+Z8bWWAVsR5lCukn2EBsUltB4wjvzApjo1fR2GOmvZ3nArPlSDmTUuIsYjBcKu8Rq+xalJ246gVHKVyecNCH7GpfkEYpAmKz71QeJof4qPOTNvTXPM1b6QIKQblOPugcsohUOEr9yp2PQMUOSKlg64YUA7XIK+9YEz0pJftkqUHtk1MqUxqM7VSvPczQSTCUlDv7Ln696K/6GnXDur6GjIv7YkEeWkSLSb7RniF+7NMxNlyuZDrX30FYhyIA8sMFXkXU21ITgQRF1rf/RJeYCZv4z9xQ+CZgVK0lor6jfJGGGQ9fZ8VtTsggboe8qXlEBil1l9Mh99xRy+LUUyXC0zxARHLBAZZbpa/jLg7lBj1/Astv8xS4MywG8g05mKGI9HNgYy+qwgcEtp7cLI0YpBpNHR2xvioyTtondy0T+fn6Ev5D3KhNrWAogEmAV/0fQuZkYtU6aSluhj0z7rwQZUib52a0x2SmHciGkg+ddHqIGw24Xt/YszyLusWaAUol6sy87EUkToN5im5NwUEIaAE2Ta+9JsBChkjf8QXRI2i9PDwQ9aD+3rlwgOmOls6xRfe5iJqPbNPKbLSI6WGz+c8kiGLQceFrJXF+GYBh2Ew5qjR+ExOFKS9/BUF6UEcNnnDNNdwzJ5CFAlXNiTjb0lgR5ffm2Yvw8Cb+gImHaXhowuNSsLcJLLGm/XZ6a58Ufa4Xfz0auYRX7jFEIl9suYWDLvg0txHLRYxyKitm7ERFMWAbSgHRuEIq9gjhtcMrhA7LwJO2JrRnl1E+ujHA5nOQi9yUnhypX+qxLmBmMzx+1+M0EKrZi3Icr3chPVt2ANUcnaJvbSwF5aKpuKa5uayWVUNOJyw9XwYRNzrF+sg37QGRZLFK8mGYE1PfKODny/n9Xq6NJ9szMvrPRXqyqLn1r8y7I5DpQJVEz/Q+TirDjh4imddsXADn1V8hHjvJSdy5B6AEAzOU59bkarHPuL+JXlgucJFIhmD5vvOHYxxS33yMU2wwGJZ5z4nvMqZ900L8Twok15LRcpZnNBpcXqBQKu9ASXD0+SkhQp8PFAXrcs83SQhZTBTMBdSXDmGD8QyL//tF3xf1924TdR1KaKNkLWjdz9YIE2iigFyLAE0rqtMTX+LJbDiap3aR8sdiD4VQxfR3ObAk6hGlSzEuUdw55sQ1J5gEcMx4yQudCmXJruXrJf4nS+HyKKvpiZmdqiTDA8fTDBd2b29JuljfEFx0rlrMLNmFBf9QesVTXBA2LQRDQ+X/kMG7MvqvGG6fQYbZssEuIptyLLM2oZg0tmyAeqIp0UlI9M/LT9Ub2rPR+z0iOxcZNuofuZjs2PC1xjZ5eQT7rbYYZXdOvLqmhB02l+aAhH8Y3igdGE2t/LtPtW1uZIO8t39/aQFXT7pozYqpVPd9vZHLfvdqsAec0/ByonhW7Hkjo/Avoy2EseJ2lRvQaRrGKfx2YPthikgtnGbdjFBFoEdnCQ7n2DBhYF/Qdpkn51Yf/vxrd6TwJDHPfEg+vQj+P2rR+wTU6SJSyeMGR9Y3xpmFKrzg0N4mciTgX7COgBOMKpjvUJzdWNEfS4tnYo9nDZkYQOrCFghWbq92D+XaY3Z6FwirsroaG39mHXinI8/2C/gqCOn7Oo6l/29ZJlfDzg9p4Hjoto/qERN6n8yxaAzbRpHc+S+hz5SKzQRNxzp1JPZF6v09sGaT8IV+L+wKPr5TbwZFlU9TbLZ0MNrtrp+woaHItnOvdQS14oEGgMYGpPL/rKyGGovvknqdQWj2SHk4HMxDyRvFDCFQxm/V0hE+88pFsVHUma7x1XgDRpblT9SqZbtXjayMvEvb8FlTug1rE2O2bWcBuhNPW0h2AVcn/7WYk6qyoaXyYmlSNU8lU2kYbkjgQE7qEV4VsPp56K4j3f7trbMAEaf3+aO+2bWZ3gzJAE2AGI2ldNwrLNPnxnN9wXYX5i8CaI1/YKopJ0egv5/gN1Rrk1VmgWY1uYewwiKM7UUDok1+S0IqccRpRcCfjr1pGopR/m/ZthJ7JwGUPAyGQznpp6NzlO00N3bA+CuRRles5vajTQ2s9O+9ve/N9KTr3muggDKmnvQbucdiFplkkkdHl2xrQwBvu5FPKVHwlsk+YdYjjLiWvLkcDH8xuiHQNWryJtOEu448MObdyJqRmwJdHZ2A92OMfmRuyCR4iwsk4q3NdrJGpS93H+GokvDB6RAENSUJZnhKsXUKRGlAR/TULlwrE+FDJ4E+GIEsK1VmEK9n0ZPQWgUf8jnwRDLbWwQNsIUTrB/F90DZ8NmjEHCAD+0Yl2NVTFkXQOLUXTu95Rgluwja6HJ0n9IT/Pi0kjTyvLOirtvz7ZdoABLeMwZ/XD3+zVxUeFygqNgj5QmHYe9OXPd061s3vxtplCzCVGV6ND2pbZ9hjmSA2MBWqVB37ufGji3kN51pR6p+bRNPXoiT763gKCTe3csb9Zkx8lYlqqNB4xVmBAg0/AWD1DXJdPtzvkwAwWTUOgBsIblCrUqIBbpPvzLgzlAwLrhFQSGM5AD2OueblWccNZpahGemucrJ0GoztHVyOtbXwte0mWZdQwPUuxslBJyFu0N52ZaleR8D0IAwPEfcsW0hcQL8awp392+YcKpW7FU8OHkDSkfu4RS5U2hUnBNtq+3WMnGdWUcr/U4gt5avceCt8vgsqzx2OI6/Xc1Lxxrid0OQsgyQFbhQ9hvlf+fVuFK1t/UPa54fjp5mGKL5LuFvO+Buwj4DAmeo+iGEjoxboVdaAteu3xEKpr5GDoGCEhyR6npDuRu6MnPC+OrOZ+Ft/fw9eeJONv1VGjevKwtG7uGYClUAONEFa0nDAc3yVDdaMPRTHc1NTpOCwVmbNeWZfJgmq2KC1Y9fPZNgoWd+cpnP/r1sLDmkgYUJXW+KDmHx++SztY8xZRTE4MBSZYS+uctMHvq36naTa+gLO2DrCREgwrhh362jzafKCNDFqT8/i0D3C3AAuwCjOyMtPejZsTZ+9i74ka/bqpjpzmBJcKLq0tOuKROm+3jfryg55qq99aTAEpDURC3I6WzpNJFLSzzAC42rJo2SJTKSGTvejwJyHpa+KdQjWgP+R5i/aQ2uMfclNSRxyqcPmbOM24Vsh3s1XoWr3s6ctN+JU43LXPzuQnCBRFBNObE/z1wrs1AMPuFv8pMigjtXDxox2tiMIdiyem8Ptxota+erFiBJPwebIpXR7YV4JWl5Ry8yZWNm9HNWyeKVAZYK2hgHremigtxSF9HWU4iXCFSrVBal4wk6J+X+9nYfH2XkeLrYwd2aHFBFm/cVYpCCw5xChDIJgiNKb8xa+IlHaI8erRrx4zrqlAvsmlCVx1RLqLZPeHn8CaTpRB5freXEzdET1YwneiraBBNBOEDizf5B16ak/e1SZNfGAeXzUzx3SU4wtphTgEaEyewf60S8QbIj6P76ACwSRiT/1MJpNmhHCiQVyZicVMKFMokh9VzNonSeMne152iCBdVO9iWedls4c7ah4uuwm66YXBDXRdzTIzL8UrQN6Yyd0KEK68N2r/4F7DnyoSHPQ7FkswRY/CJOvOY1qJQHF6MvvcDxq7OZDE9V8ufE7CUMdKFzjXDtFYCFdrD17wlYek6ebN6tFA0DAt235HRJTT5sxlgVvvov5C5kXP2GTcQ135sqw8wkLFNPN/prD0ttJHJ4Tu43RUfMp93u82/MA3G/iRHKlGAdzL80sdkJJPLv/2mwuZM6dWHIX7StaY9x6cHwMNUmvxulBUJ00O+zmSPo3ZZLSmJUEJPoHKaJPQfsB94p4GscFVBSUmuah+G59S/+JniL0pT5wWyh306CPgYK8/0D/YMBuOYfLXsrBYoc3z6CPAihIisN0iaTFRq0wX/vKd4ho/0ZThAkZ0/cqDjHatu7PQ3oAmyOo2XmKLmbycDSQ/FdmhIYDgGDynxmoglTIhh8W4Csq+KkUH2WfwsL96L8vc4KdDIZy3L/SqCsmd7h4iqwGFUJdhaVNDv1fxzy96g9YRKK5pFSpGq7glcrLH/hmf8JxlwJ80zEHy7Wz2iD8kfuUOCVgbaSaQfV/8MGyTeqBSz1DzRb/iZ6sIVJhFkgAS0yqhG+KW69Va8330t+0qlMwT5O6oOIDcux4ACKMkM1ylhXy4QJpQ8ljnte9eEpXukmFyskDEdAHZICkTOJt+Wbu8sJlY/DIlzGvU7otVQqzm1Xpv5i7Ikc1LO/2mTLMFhgnyFBzQcfjszJXwchJMuS6G9WQjm8PTfn6aYZw2iLaUl3xzwwAsbrnBNoTPE5sZnhiJ9+ena/Uybi1gifoXwwo96TjfbedwOI6r/B0hUAcuA87p0vMLOhiUbaY346j0KS99wvp+cra4FxP7q9O5g3ABPKiaxuGPy8/cZlmvcgvCqPRLncz2Ks2hHX7hwqaXPvnRsejVAAAl74sasn5m+uQQFBxaGbLfJ6nRrlHJhCys6od61FtrsPn+Jy+EC80imXpytOeBL0SJ+T3sf4cg3iP5TjcyGrsDyBZRIh/ic7LE1QL+YDjVotpoocyXHnSLEvue1h33lkBrSos1kdVA+GruPa0KLfmvYnHuzkFEfGljJ5JZVsYhYdJZHQTg3opq0hWvPTh66kCQ1W+PR4k0hIPK0WVO4Bukvgfy9R0jkVEubYi3qYivFQVdwP1cg1i02SO23kbqacVuV63Tjx4DXFGAHbKh6YuU2Th8beJ1cRHtP0ydwT6w8uGJzv365oau+NTVH1eEFXLWx0iqcoKkTVoaXxmkPK8zgUrXQ54PHRnoQujwkURDdbk8ktECZW6cREp4UN/dk5VdAMMXNMYZQOmt2VurBMUlcYO4RezoB2wK3IAYt1WDprWTnauVD4393PXIFCrjoHMIBZnP6MA4HzxjQ+T0dDqAvMGgP0WL45gtKiPMUzgCvh7sAt8vnblwEgsERwdEVg+ZgPPEdzJmTaqlLP6ceAcqmAX/JMwVIJBGOMulKloKZTOO+Si5miilWeUUaEavjAc8GkQoHNuWWv7nwBT10d1k2agrr1ciXHXG+hx+ieCSSRdlL+fWu5CEfu72lyliFSgrFM18adJMenQvQCAZCJHkwckX25dPdettJrDwRoAVc2JeouF+uJ2gYH07+Cflgj1EP8pjUxpuIwxKBb+lBn1KTGcy51B3kG+rrrbBKglqEtxSLMZ0ufhVgTavsi0nMkLekuLJZ1SATswkQv9bEG7XPHqkj1GDlcVHo2VgvKwmYLINfBJVLIRpBviOBorZAUnMqJR0cHieJKdkqDRKK3pvx94X+T3epPXkXgGpIfT5urpzHd1M7PNpdTbtReDZ/VSEE3g29qtP6cB+eOqGjzWL2jeGnIogjOZVKH+Jpb2y9+X7zFFo/0yaFVVwjeGARJo1zuEJkjAHZ09G3pmTjKZCWwLohrf8QTgYz2rrnqdoOneYIoUTJRfGtiaHkFz0Ve1UCFEfRv6/IlsIAw2Eeu9gLQsU1GhgAsccK4VZi0dVXd0QY80vboS07YjaqOybZM/Kk3uWoFCxWv/9N7DRqATKMKXAFa5c9Ss0l+s99NXb6jm3z4uhxzEzgP3Q1+lV1PUk9WPW+BuFrY6xFA0c8oolpm+CVVueFlFmBw0cLviP8RSaJls3DQoyVe97043yrrK0UyF7eycSKO/9XtHuxwbFN0CgW8781AI0g7pX6E53b42hNlA0sLgZQ/+lLWsCsdOVLpbIxyLPsc25cnqfNGr5KvY2YNOvfyHMpgBlnC/k9Lk5Iui6RSS11y02+H9Qg429iX5SgTgraKz42aFMqz5idWkCCrPi5RFbf7lCdNibm2AnjY1tQ3opmrxYTeIJ1X/r7SmUdm/9mzNV/yWKDibkHUzYPlo8Fyz8LhVTX+LuJ/IDj2+aAk4Eexo4yk5Q2mpLbXndxa5Fb3oYMto+nXzLUghK16EzK66fc2aN0CoDGcbV7IzW8YLIng9Ivv8NwOSQVzauvOou85ZhKASBFgBB/0l3vVOmt8mK48LnvbfSdbg79sBkt59e3lI294n0sL1RjkjLUAncAZXU5egzXmAtk/ZHjGNK5pgX6CKj8PK70HX4Ilm078Q6Lf6DeZDytz6FIQwCbReKVEXxkUJgYazjRupyziFiedZ5JbL9IhPgI9sPhRVvHGEB0qxkNja5Yw8cguXH8BVm2socBn0v7MpUC2yhG7UL3QRdPwRu1CK1iKyK6JoWEHQp8YQrIUjftKZkzpaaZac+GvoWBoG3onSdlkDCpHTWY17iVVma+SAFXzxubR4u5mOqoPkou5IPi3hjvTTKszb5Y107Bc5/6jECxcUv/vzIpqoULKnS0XisbBnKDEUJtdhsiGu8Q3UTSnBR+lxBZLUqMuVD7YrgKWFcpqOyeCqZ7/tN/oFp/qc6QnH2BxQyhoZLWsnsh+xHHH8RIueUcPzQ7rcEpCNxYcoyTcDerCU4H+CdXXKG6gmdDm9vZ30QDbEx/UJk54AHvE7Zz0B/A7oCeHV/2Y23Duld8JOw/hKN03Xe0FYG3CbhOVf/HrsUGFVreD8q8VUUij7BpbkrKHXLK0qL8d/IJ4he5jdkB0yeckot4NJOhAjqaPyNeTzuLLyVl4UNRjUPX0q1z6UsmlqovHVAaaFIVrMbTUfLScQ4uGaV/mtlv8QmaE8pK9u6jkAvjLqhPU5r2u7jtUEa+z8o4NrqwfuJDwSdkjKn/jGjSj3WL7AgeBFSy/LEluAixvx8lR1pTyFSt9Ro1nZ/ThOb9n24pygP+A/uLaQvXo8ZSTFk/R6Tx0sD/EfI6bpo45Jf9lfzm0RvULBw0TLTp/Frd9jDjapSe9RHBgP7gZpbThc9pJ7dZmuwq0wvcIVkikKN3CxIZcP/3+hC02/ryOvEjw5pxXZNQ8i32TMu/5l5sfQ1a4mK288YlbnT1yX6cawpGZan8U7OTf3WBgR+GBl74wSgl5I8rivNUZejd4k/Kjks5xwqkzUtvhbIH9NBMZnOUYkMS9OM+e5YeIfi+afFOnVRe9rN65yCU7ZwV83iAKNaTY3tsn0KMtf//UL68SoSl0hcf4FJTJBgiIC05cyPIAqI7JvjA8WF/freZn2nmEOO+qWmyt1yshlDg1Usv249nv2Q4C0w/JKzXe/VqdJeV6KQ++q8yc7a3W5BfMZ86PEQrMu/CQwVvoyguteGJLavndSUnsfKfdeISVVfpMwILkDpnsQy4KfGLUkzb5ZrxFzxBMr45dyxF7WGuNP+nF4bU1OT/CiT+XB44quJpx8VUbEME0ozibr6tQWRFR975vDamgIlkmR74szQdVcMBpBq2DIHJ+6PP63xBcNU7zqVj6yqcqs8Ye7w6FOozHxzCnrT+YDlX3pmnuO/SEIpKss4GbPJBF0wa/R3fOQyoj8xAtFv2gi6Y36z/ElfPRiSFN7CvV6Vnutj03LREfV1w4ylrl7V+1xSUnM0uaXX4EgAGdsLYE7X9Kp1olcIQ+hKE4bDPhJj0/TcH7XcDB6DLl4snb4yiAEeS1U/84pQFW3FXNi4ZN2mYk+XD65RHyP8gZjOUkesp5EmIiyJatB0cFdhUV2LSKDpcZz4VOAfzfsAZu2haW8wkW8JvFz7wmGhZWL9U/7TkcLRsmI8X/On5fQUeHscnBjv8BiiLw4jRnfrOHEUENaA+aMU5/YyS2w0VX9RXItM3Kyjl6u/c+DTIlmL3qH2FnZ8w1s6kSNcZt3bY+VU43HTQx0cPtC+NMam40Cg9ueTRpclfLqk69udqmq7I024RDB3qiXMd/Lzl5ysOxhgQy9m6ECP88xeaOIGKuze/xIakAPsdWKAW5KGvkVOB5C8eYvRcdCYYHUAD9XsIDVObW3dp/iUvuLvCLAMK6L0fBp8KOcqjKQr9+rO5yA3RHtaItndnt0n/lD/5vM0h24NoGaNUWGVtYf6UQVFeD5JXD8XYFsr3UfiXQEXBkCAoNtnPFLfZpV0gQTmIewFA5C90bviANhPlPr28EUI6tXF/ex/2nBZI0AJ2ceY/cXiQr2dNssdpl39YLa6gVtKS4zQToPO4wSNNi04fv++UgidF9Qeiqs0tyBiP+xMH3fqbBxCwT9HqveqxGDgZyL+UYhpeipyuukE6R3uvAwgwkRcqyB6H3eu9ptxpjCjgFTF1PWo7WN/eNVbo9XahweqrQwqV/kVeQFZcTrYDo5kd3woq5/Li2KQ+3W134q9COAJUoJWFMK+6XGtLbNK5DYQdrPyk+XhPlT1/YljLgSMEPHo5Pzb7C41ZkmUQNl2xvrgttK4BqY7EybXm1OEaCc4flrcfcv12z63FBpLYU1J9vEB+6pGne1xn7pLvo7xuQi8cqW4AmsSnefZpLmXGMM2VxFdM1jL5f4nN1kyW0OveQUil4g0opiuo41DMgtAmz6WlVO9GzZecipVw4hKyo5aKYg5pGXZ/kM+2vGGjevryyLcHMEqFQrV84HMyuw2a2jJZUCbN0dgAXqcVl2m2b01fRdjG42E3wlvKQt1NYAHZarZZbCS0vAHnxS8cNu9qOoTeNi3X03lQaVQG1e8MmhO8L34Appb+gmK3KfZUtBlAR69yzWBLNYpDh7xia9qEVLB4TDkumf3Ca2vRl2g5vPk9nhREx259igPsxCPaKbYqbpjkfowqFlNiUpng0pAsOpAFOeBvlfAipnl7fLIkLjUTDVCCr9K+yxJgn3ZpwsF0cQ8zp5uSUPIll3NJnbxPZnDw7wpSITh5In/M62fCZh8zaZkbnbiHTWKUeaZqXnCqTyHIywkCxryc9B2EzVTa5GE1eD/b/WlwDU+kFUJorHc/DRVRsERatuN2Fxab813w9jTPqey8wWjfKnQrzrcYX53TpoJldLW6glS573513HXGXubuIKdrQNCnIsFqO/4ZnAxASKc40Ysnm3ia5L3Vk4IzirwIWaAyLTmMhLWJIGy4jB0X4lkNvFI19BoE3/yLQ+/2pe3DAsqCKAmN0zWI63hzNaQZYtOwKoP4XEnQ1tsLp+mRKGGlA//DlvbECAFikBdK5uIBOdiy7aCr2crEIKzxyuo0XwpSsi+ugQ8LqhSBCV6j2gNHA4IA0Cc/78y3buKT0iK4aP3KTmAD+lI5ABA8+FPCRaASRnQr/kzmgqYPnTTcLnOv/jCq9HdqVTFxQtldtSQGFPRPH0UHkPISJ1smfGXKjKKWM8SeRy5uuiNZoJkm9y6BqksPVeDpM5bD+2j5BnKm4lT7yrdDO5p6zBZjhZwtwC54i4WaW4rAg0gNDKec+JaO5F9UDJ2v9pTHAhAfK7pvYxk8hGY5zH9rSx1wbTqWAuit09tL6rGPape4pin9q0gQqqIuwl6pk/Up86q0RcHrvIpQ+Q2h1F9W9i0EQzH1jubz49AoNNDne2GKmI5SYNf02KohhIlyrX4BWt9a10YDPdmGvr/PF5KyfEevp3ezxOSraBIsZxPPoLV/dADE8wCx+P4aT5Q2yN1JNBgu6XGKI3GxpyuQ08FtO6UmZOHckoIw6ki7qLiMeqwErqNFAnCqKZXmmAQg9QEDHcrIrO/b9dZr64JyPOjdEoxWmcikFyvqEKYV7zZS7n16ISzPJ8Qx2IpcX/hfBfOT/Q7Vg5jrj1j4xNN//Ri0euSdzb09i8ToQQSZBPDvUEZvF0//HNcNS+s0LxuKbur9yyWrcOjDlas36WIcjXJ1Wjp/H0Y82hRlBurXHm8r4DpC1MXr3iYjzGcYQuwbTy78kZ9x6+LprSFBYzLao4Lpq0LFlcMBrfLJYXLhbX0VjcEPeOmQynl0+oNR2L4w1pxrNIFvSm9uVjqyMdKDv9RCMDybUKBJ1AIEJ1y6mgOl6xwUYol/aRn5tmzqeTfSX3TAqVxCHRSOmI3TPmBvbjAkoAEeIBKvjUvU4Ekee5L2Wufc2RNLuwQcK2wPOyL2qv3Fagtx9ccirZ8vkjuTwhgaovzUJ4DIosy5Fxlmnz2WmaeacH4I3DqNcdXSsHbczVDYbcLWUg/65dMPiZnHEWcr/rAmpXIh4nYh6lgUXIPUiWfcBH7EdvQdeOTSce1twmU5u8zGqptCcKqnq06jyRyz+nyj6RzsuCFUsZ+ugJ85EfFr9aLrVwQ/hIkxnUru4u8xki+9bryT2Nz5ogeNz05hz4U9WTfCWxQl2Ny1eOqJBxZlLKc2B+YWdzbXDJnL63nTjzbPUNZ+Qnusy0sXJgytNyrv6fKlXHAySreLaEjzaTRMJyXwU6qCFQXonrnOzBXg29kAjTtGuG1QHti9VvkifGxQh1MOq4VArzIyxUixQEfRuIrMMewGIo9RD9iRhBEDHcMKcSBE+z3v2hINXTOS0GeqIrZZgyZV09cKL4i7Fq48ewqAw6Ewf4PBkjtV/RNgAJzTQfOSKeplGp4qSj/qetxFC2qdeBlRCocYKBdtitcz01jsAnBzu9RcdgqZMYACF6Li71PqGXG/KNcJtMlxML3X/rK0wihjuJNptLW/1keFTXUkX1nmVOphuccxKeNaNZqVyjD/7wd3hZ3uj4he29k2lDxL/rV621AKQDWP+aXKt36Tif6A7g9RQELmE7SoXOjDRUdNDfxwCpVcFCovqQXBv/PjK3Cnf2uIJA922tBwJAdgyonQjwC99kBtHx1/VfH9z+gGM6vazpgJuBmdjp8YthMHeVSvZvZVdHV37t61HiWzOqNr+P3XgHTudxzms6bUwFYA5HDtc4tM1p0FjY87/KE2mdJAsNhOTmdvHcPkaRWjz6edGZn+vwAxoisdlOTmQJ5Civ6VVoV49OtZlf4cpi96KJfCVjlBbuYrp0u9nu1xeEub+EYsi895pafULrPGCLyJdYfH4qInuHc/RgF7mj5J/fYJN6KHxpx868D0Ie9OzOgSHTcRUd6GfKcCQBcQ+1tQdmym2CobvIzQOAzALaLUNbhR/spJjgtrUyue5JkYjxr6Qr35FFb1OCjYSkk/Y6/HoDkwfD8vS15fEMOKtu48rDkFQTFeHhlfvgCbBpas8KwELalj3HOI6ZiaMS+htGYXGuETU/UmDP9MrDFg5lRCJBjt2fMRy6HAq4vkOiKkDgxjcSbcyqT1DNF6RX+xfpkx9rvmTPiWaor+eytnKCredx4zQTcRIgy9vlU0r9FuV9K0/1oc+nF2bM193Wi4lYywIy+s5+Fc+l2r8Mx0P32u9L0SZ03bE9mRYffwG4+0zsjyPxWJDPBHicRz9kedLjm+Tw0+p/jo6Ys7RNT/WvAl+16mDu/RxXizbsu58Mdr/hwB871puj204j9QzCknh9zMIFyj8XRSh4oU9sR6cqcBSSTgIsNEtrxle4b0r4jwcV2dae7r7Khkwezlq382R6H/UqBeb9ixyqek9ckL69S/UbBT95GrAnT1Al0WKrSlWwvOetUJukGoHM8gAIRgs2r06K5z/Y9/pEMXuIN2l+5UhKBpNMGP26cW5rmA0yUwhEgnDu90ttL72/UVP2mKHdanOPWcKsauhISB3zsDqnRfZe4ScCckFluFSPkMd/PEdjcvGUNIoJ+gMYLCndjWk9nUeHYBDlEeS1vQ2zm//3zAdf8xDYd3FstEsMTdConwLalq0dvp9a8wf2GD3FfG4V6zVN7IfcLr/4dqBPXA81kYnn0aUoMWJw1PmChrJTtpUxAntVdUDxbDf92856DdwlBsIDR5xqoY8+SH0+uGY+dl5YVmLMTLA2VIfkRSQRM03XWjtbFLpkXn+IRMzodVF6vNLWaRvIg0hIenf7zPRl0/qvu2FWpcZtvE8eyY+XIYSj3ZquHhncx7c/aVvUVY9DdBSW2j7b/BIFXqf6/yfypv1R017AWYuqxS52qSxdy9rzWxKoSU38ckucp6jwqE5gix8FPHCOcF/75rFVxGLyj0s62to/STz0T6mS//UFUJ3WWBXR+vxTJY51Xeca2l+vnJ5hLQPA1kXKDqGxU2dW/8NEra5JjMDWjJJebpG4B1STPCozIkvS/3yGhDUaKz4Hk0NY9d9AAIh7A6cvSbfhY+yWOko7pWnNGwUaEszJJlmc9SQnF7x3kMBNuLf36cT5dYAyNs5mrZOI2nY/gb1eUdz6PW8ZhkwI10tnSZTnSteR0+DlGY/gU6zhCFj37EBZE7axHNnFoW6Ln95h3vcTlnf+E/U/IYa2IUNZ4dwada4ZKyTiCf0TMwnhrj9pkZyTIH6ZVGCX+IyOr5lJddEkj/5pckGABhMGViKfD1WKyzMa/eSveNXHO5oh+MYpD02yaoI7op8rMYZKEv98kjIpHRof803Ku2fSRQfSrw/l+JIyX5p74aMVWjMgNPgGDlwnY2HQ3p8qxwmMJxU3KVCYRjSpMtZ37Ly2iw9fiWSzLDMV2pUSD+mNOfjKq0ryITjAcqWLfmIwiOvHfWskCfGOu8L4d2KONkUblVJHyi0xxPHXKreGygli4AtPvosTle6T7lFMT8RqouFYW4zRGOtFcSAnR/iIbN8NfIkLjQnsvej1FnWmBWdFcyG6pOcQ2Y8sjxtRiIGCkUsPAefwkoCKEVA0AnvI37kYldfaoy6pVoc1Clj2ITcF1jWH3Gme2UgLuyZ26DfmfdnO9YYGJt7npT0SSyyBevDEQcWT55BM4V1c3FM2irPHjaLgu3eWU2MEPT2UNiCKxKXkShIY4kfIbeaaIFdKOnBPZkIAw+XyvZhm/8wIRL5g10yQA2oV+bxIJhxotFaJoqPac7ZnlRGDxG0xocp9E89k7MqWAxSwi1C4FMcw38nc8vYvaapYCpSxSDB58J5UbcL1yGMVvIYgY0jlAodjTzNK0s/TOQyKpgf/mfNi6NEo+0hCWtkXUvRVc5K7WSMvPizJt9GuAh3k9S/5yHaZvXJhAhLClgNRUrugPL56wouyCdRWZxzaB7EI9V9PZoNeUS3F/PoOkwamMaLKiyuBfhTgOqNRI8JZyG4yREn0Q1y7rZCQRCrEXEgPAfazu5OBpvBk2kVysAWKpP3EMUkf1IEKSKZeO3tHsAxxYwL+y1nK+NOUa/7a4tR34nzf60LQO45kmFYewmgWy7QzvwU/sgi4XFTUHAvXmJVsnAcmnHESe1igS9HvFpc4KG27Ip/sqI6h2i4/9PArcwTlHTvlHwIo3ozvlEPPdbwTwCw6YtNJQWVi0w3nqPsU7tSDfu4gDS60FQpzZcsu0GqekgFkN7tG7Wg3bgNDtQWQBKpBJZ8Lde/TMw5rtFscoDlnztMr0Eymq5nt9GQmA84VQ1a8oUR3nwnjSNLg1eKUO2x2Ms3dhT74SoTz9wv5hz5xQbKjI6YjPH3nbeHHgXrCehcTE4vBsWfUg813D/tFZk+aNWRnejXWfpizo9Af7cYSjUs96hbUEGypC3m4q7umFnQDZ1JgGH6G08ArwuOkasfcy6m6xUKuj0+Dfg0xTWiLaFJ1/eks8zrULOx1u6//gXM5fjbWXw0haplmzoOdIWqbtFRPXyADG/tcVDv/9DgeOTw2iUh5mw2o/L9+78PgNRVMjKuhnB8QfKEz1kvcTLD4uOAGz9RQw13qlcbpjZj3l4HF65Dg4uEi8djgw5uCkdqSs6uLIOncYi75kxOqDp88w68etz77L0BpC6sclTazLV4VFyWwfViOsLYAsW/hgyeNwvlVYSfIoGNmTKk/PRwTO7L21fq0XyIwXYub4QclBAFLHgB/v5zjgzxLZlSLPigVcCxmXRg0XrDnNFv18hFr2P1TwmMgzXpBn7tEekEfCidopaRjiRGd698ZbpoO/28z/VLHhRKw38cnxRzWXfsNCiG9kVwy1xoMbBwk3ouavCyd0GDrp4uzcGs64zJP0TyL7V2OOf/IQcXRLoBCwFIz4z6FaOvBh00A1Sq3JlOq/QxDJo6vOBWnUWu5KWrkIE8ODRS4f4nTKPwNyFWkS2j+QCu9HX2rOPbteW/N3H2FKQ5Ta5ik7XwU2BWnCSgGBmXg9GkcqM3Q1DwkhDnq0D70/5/WuGZoUVdegOkkZbaJ3SC6ocimsIj4P0XJikcpnyeDM5TYBuHf2b7ppZV24sn4t3lrK/qBd6XZbkFx1VtlJQZ0NTGbfYLRrfHSQod8AkxYdfJi+RCU5ZABRnLq/iybrlYHLgIO40+EAYNp+OPiCI5IZ9nIbmp9mjLeX1of164H4K+mz07rUqKZnHLwoJsVKL7gIMOq7mdS9v2R8fFytozEHoVRckXmONe+AiOKjkQoDby1Fb9TvuXb5euvaSZaxdL3aWqIO/WVxyymwJe3I3I/miwNj0UV0zElRvQBLIeY0EgnHV0I5SPKJsp7zYkoWvHMYjSwFQpfMsg/Q+NIJxAFAaYceTvnBnFpF/ksGzaqjRFgx6F57Mm1Un2ZRhokQqhP26mRA4ZU11UP1JfJuOd/FdCRagVECPRd+jx/f9iTHlznZl/QXcnHQx6H9soNIGLJs2D9JGsoNd7JTC0ZGvzniWfMRhzdcbacP4Os83qNixk32xRwNs91fZ8Kaj3Ysorf7Y+GiugzkJ3/NMJrAH6lbmad+JmzxzTV1iPLrPMkVYgITXX7UL1Ry8rLkvpGa+gQvGAdSk2VGWokf3nBWVs7cKcdA/GvwKlkZEalhVlU4ZV85oKyHX1TPw30YOUIe5n/EpZAtopZEKPN04n51KUVD8Jkn9c0x1tFD/a4aXCVVk3OyCv6gMSFXcQFHuNZcqYHN/veJTCRGrGok29VCcFe3WIXutfM1LYBtRuBpBmbU9lv6A5/bnhWVIu/szBa7+x8axni+PlP9k13fImqXvPDwIRgw4+D+kWrItWoTW7X2o6Ynwd0nqOKdhbBPz7X091SSwZN/djT8ZyYpvHfW6dI9SnZWA8ePLCXzJzMQOGW2pPCdlLpNvb9Y5Tl35/9QPckH0WjxaVKbpQDdD68kXrtxJ2xv21fxYmqhvbbstShz6e1ARaeZEOffDP1YZKP/x0S2zllM+Tw92AOjnEs7irBcdx3SaOZJ+zdhTE3uZEcOZfRWWhokci16bglaUvfBlozYlAdGjp+Aswf9UCW7aKzNWs4onUoZr+qHVdmjKf3z764JlbuuYxbXHIZyjvwbNVJ2nYZQ4tKuUOYUg5AlH2zqTlUPODPXwJUM4vtsYs1N1FU3JkY9KMoHC0Eb0Nz7YtIK6mRITf1qOw2fHs3c6E9r5oHQWAiK6eIj806+PmsQJzt7Qd2edMfsN0bWUhw8+6lSH3kshAR3oKeSxdVGIU5F7ayfti7FHoPydh/U956THJ2Chz9NV6ThFeSBgY9Ri4rkeD0YQTli5wJQrX2WX5gWBszCi5BfD45HnJt0RGGGfrg5LJVL/44QpQ/wqljg9V+SR0GwNqRveCiZI09a5rD3FlyMO/G/kNAy3F0ybpBvkDLxeqLFik0N1Pivin/hQxFIEnKvwc+D3AF0/dpXFXVrHzBoiYkT94578FAQyLhOP3TA/ukIHOhBracbQUT+cO5ZFJXb5ZGG84lw5fN94ug04/S8xQ518Ag+kWWvmgCX+MAjR+32/WIFGxg9bn0NGpu3hA2CJ831YwtA1rQOKqLfaZAdkWdQkCP+h1KbU1J7Hhx89VGofPVUQlnTusEYGGNvlYuw9C4p/Qg1XY9dMQh819BpU6u77oztNqbDNJfo+28xSDQn/GdH3ETMlrh3FN7yQtVLM2ZBoftO1YQn7BMAjDLd2ekuhHQY760rrNECpkOpMcMYEgfvLNtBh5QZAg6mda6z0gb6Q8eioBW3vsn/Wp+mR8YJxLnB79+YKWb0ZiHXN3rVPU0ANxQv+gYl41ko/JkFezMWfovLzJxdHE+vfMhBBDft2Jj3AD2QnXgSJlLaI/TN6SZhODzDP2I3MHf5YNa5clqyeM9WCF/XpG9hE50L4XVfkldIluQHYVlUuPQtUeLvYs0uSW1y25b2YBalO2Ss+R43QHG6BAYVr2/GeXSlY0/bkbY2Kjw8iI+li8r2N644CL5sSmM+uHlrKc/iMSY5vl84PpHNxwIp7rPy5DUMkYuONIwDz4KLH0IKe6vyexkNRc//J6cg2gW3ZkexZWHInSG8VrT9HezF0IkjH8cO9t+FB6ASx2U+llMI12B3nu1RMUlpcr+UaHQlB5g77BBWnm0yQGuJa9p0k8SQH89WIPV7T9Z6aQkyuwoBFD92BfGatPR0PDNzRR2uG61wcdR7/mPacIrJjQN2DPxGL4o4DcRIT+NMPxBMMa6GvacGtCyek9NSOctCV7s47A/wcSkUwyI1C1DFd6Efr73w3e0qZl0WNeUofMilnSidDBVDcBs/9xX2VT34WjHB3MccSJfjXThZPaMqDXd2N812ETO0w5avxabmVwZs9KJEaiuOfcgLGDCKemxABJ0VBY6gDpPEW4dcuOZSK/4CX5EzIIBNjiVy4zCYxAwb3zySTcWbMgDWTFaOSZzJFIPRZeoprJ0ZeCdP4eF9mALCW7/0n0gNK2vCPJ41p5Bp8mnZtaXpFyg2+9QctMw1mvc9einrUw8fXNlTckYl3BfxejlTYQjC3tWcN4XOy119hg0q+RBKvV3O1LYr+4u7O6bKY839JS6Ai8yyzPYsmJ7FgvD/5c0q4ht7uPGwjPXldv+WVRTHM2wBT2G7GQjxu4/o82VfSMVefOZMlVKfUj6oebI9/0/f821lf3asQv3JdF/pxZzqrM2wxA15rMifd7ouaWUKq+2pUeeAU+q/lrLBnFo/UoKjrsrisLYa4EVwe4TViTT1RHKralT2dACvhNZQQKI9rSVFY9c3kcL59NmWKjSYoJD8czYf8+07xXJ/jHTpR45WVtOPTdgVofW8DxLJU5w7FpuFaLYnzidDaGWH4AKyjQY1dadx60NafH71/4RrpgNougA6c1xklojXmU9/OsKYbLyGlscQVrktGt5GKtKm0j436uOur5l0ffzSn+EokrBN+cfJTK+hxlu69rxRWHbwICXls09p9fiyTdanm0JnDDEKKLsSEjIQjkGR/D93RLh3raTStQs1XfQxhQV3Q7/FvqrgKgl5MC7ZD7Gil59Kjp766xfivpFqv0+gEL/eJz8eJEjaxJhUn49AX7EHTNp5YUr6PWQaRWXRhz89TyPQfUyeV3eHKb5wxAZcM+0+e+apu+RFB7LTafrad982cGEUwaODTp9s5LFugP+SuDGYEF4d7smDwmKPCCjjKoeqMQppNf29bKzwwfB3hNgpaLGIAR0wKakMP51taFCcUgtPkSwPdXNIwnyLXrDH+V4hjfJo43FXM2z7qvR+zxWjtlzW0i4lYgxJVRH/uJmdSsppIQKciHND3vu4pGBkZ4652htJurm8YSVt3N1QDEEfc/8VBh6vqLnM/TOJSsKkd0TdI5k95FIdAZgBzL5sDDn5QMoGwVnL2Wm+OaP0XQwC+wVaQ8qoSB37gpd8Bt0+iF3ibhtWLIiYW65vPE9/3RzcTT27dMLCQRBQdULpvXgNN39IN3UWQRT61O/WyrLVUNXgJKZAWcgKLu6F9miydcwP0pvY6H600T1K8UpugsE9b2GG2oudDgxNXf3M/bH9PFVaFzuuGCCxXx6hOTm/f/m9EQLO6VLYk7sguhFoekSysFJRU+ZizNZPwepCLlLWpT0WGkTmNU/tg9WGp51BIi/eEeiKGVFLa0IryG4+2X5/EWq9RepSiM1ZzMBPaf2jJd17psQSTj/Xid4I19RSUAo57KcwMuZsZ+lSUlCSqHfsedvSEpvoSQ5KnSOpMN7TTj1LSp3pDbiK5Pu4fdjTvJolymkzSafTZftFTVKjo+OgIKPZLjcmy++NPmfm6leFadgZQpOd2HOjbOJnSNQHAv8bc18VLK8cw85J9hKiLEaLayEmLHzs0IZvchyZ4rqCo030PXIkZsM0b5MAOUCQlvqGTrfa1R/uQP7/eaeKnH2EcwSx/Nb8GP+J9UgpoVMcEpKnEesGIAWwzZNnOl5jlQWsaqbNpp9PJtWWOadamCwA7OgGrUXkEb36hxQbMfQCuImRGkjfqQDsz/taL8cp06NB0V4Pfr0tE85XYG263lRJAcH0j0QV7w1ppSX0uCswsyKlWTJRrPSVUMNrFGr/ABZpQCiUsAB1w46tRvMpTvLxTwUw70agDXX6/xAMMPOltTvc5JKiyQBbjzBl4ai8whajkFHppswkp9fm5m3lDENDxO8mOhKlyF/kx2b+1h5Hr4NAeTOBton2Dz5Zqbt5ibaKsndjDr0QvxtblXmpgLw3kCjx2hn9ndAoRY3CXB51DL0UbUfu2KV9XYoz0RwKjNqozGQcDepdkKB+OQ1J/6O6Qk71eV9KdYOMpbgs/8I98QR9us2Zw7bJLmXpl7pdOfFXGasrrzvmwBYCv0nH8iNB5Ufh3ds2Ay1VVogdzv3ORJO0M1awPsRbU4NnJcZ+Q57Zt93ExI4U2xTlXG1LftPzvh4io708DTAYW/FdyVDpVOoXUgVSWE6vykSd+350hasAB5r372K6xht+74ejtRKljxSlfTYmm4dcP1XZgLg5jIpVe23gf/e3XQm31YDHRYvAjanLnunsNe1TfcRcmrmb1Hgrlt6SMJqeKKNA91aJY0tb89V2cmScsT/HafxbwhYmfyyV8I+k6my1clczcxFxKZjgQaGhrWk2JwEcKt7zP5TlyPcgXT/9LiG1YvLHCyNAjOtEoL2BZL2+V0KBSLrsSdJV1jz3XkWSKLNSeKXWdxbPJlyPigPQofp+Lx9fOIyXMB87T6MJDbbbcsRaUl7fpwpDvTh/JEW4bUGOKkrmAtMXQfCFPBCV8JwdiJEyw6ehlIf6uSeEwmpHD40QhzH5t0ZGtEn8SRUXxd/Nt7fc5jScIadpXL4x6DJUsfrWxIy4dBANzTfCiPQSrdOnBx0mxvU853p+4aw3YqjjGsvhQV/aPuZvfHePxEI5c38CqklywLnOsKt8/Kc22Oj8wSbyDKeUylyNnDYpIk/85EboBphKP7Bd1WgiHqQYWMuuIvzR2kjY8jlQG+ybSpGi7Pj+V68KpwROP7919RiWFh5JcOK5fLXl4JL13NVMvgwXXxglwp1QIIBkaGfqaIioxWjnh5JsszgAIQa+TeO+YtTe1mlhX61WsEfzhfwooiWUvgsJ+3CrjBDLhJ5LrdyeOP/s8cHg3NwI7J4X57ADRZUdC2BJvwZ/TexGuD0PyQn6cGT6h5kanSAtp0QMnz7iX5AuU+GRlJITwdbClTwQHl46icsb0iE1AETvkznXRhqaXypUiBCdJgsypRuPq0Xaqm5LxCu4MJ42K7RdjtIy4yekECOELow0nn1A0R/ist3Jgi2YBn4rIGCb4TpX2KpMwZmzjGXEA6IryvIGQ8k7CswqAxwPz/+ar9jUoQoIZZFJKoPSWIlZHyjKQJmrl2JguR3xHDz3TQBH6UsrbAjIjqdQlNTZ4191/xxoRBY2FplHnqytnUgUHRg4QW+MG5cn7bxhoP9xQAKLnPiHQkzcGiRa/eJHYaQWgJ4h7OdLYZ1t3GNv0cSszZfXGeSRUr2mTtiK34E3Wvnook8rJY0Y3PTeB9ZuqFL/o2YYPSIUL8rx73ic7TWjavtAZyEMSeM2ZJUDXKQiaPXFMKuBr3NzYs4X3kpnZpGLpG+oB/q4num6zWyOm+rL1yaTiHUHHC8dq5baxXfjzP+wCux9iCOrLR3EefIsuUBvBPqbleOg4BXF+/bAwvtKCiPOQFl+aIwl/XF50ixlI+3QPkKmipWy0r7gETvvVBTBB2m0VhHkfh+DFdUxEIYwKH2AvEDa+XqoX/goxevVtiPiKWsec4KSSg2Z90zAN7P5MPCX7NRULf1DFRvGX8ybDW+c0BeN0pdJqaxn/kU1M5XW+CDma0ud3Z7y8977RdeURcto1SGIiJTTdQ+0QNpGmLSqd2uXjIfsl/OiZh2A28sJyYmIoN3J7k+I+Q9xMSVFAPeQi4sZC+S/A2aCRpeE5FGg/7jyqVta1UTx+gNm4Td20mtxWI/ReZn5frv80UKc1gQNqpQd+sdaB4CUwONjsjLR8Red1TtAIafDfi7nar8EAPsssoZyrhcfhSTdFFCbLq/HV3xaZ5/dnvyS+D1489eQ/ValN6amx8QEcV/Bu04g3r074UdTOUGMwvPnItiZVIrwdukT5fU2J5pfmIN0HkobwfZFfC0Om4M5PSXC5RqLbM/1A4rYZOK1PYSp0qp3mbbAnrg9rbAoHquCVUhOSDCSnhgK3EuUxDYxij2G8eemy/vGI2LB3lOHxkDNJv42oFOgesw3tLq3brlVLd76WspoXOnw0kiHPU7ndUUKZZIhi9z7wvZhdHVVLtVGZGU2bWRdc/ztExpdMX1xvDmFF6oHZ9UtownkFCq3kGX6e+ujh1kbA6R3t+sirQuofFw+tL04r/sdU+jC+EUaTIR1GaFUr2AArkRxfwMAZXTbjdt/MXJiHNWvPc57nCu+pF/lA9gJpIyhCFPfJl8VpfJ6BjrdIcKQWTENUgywZWNJAIZSNdBRkWgOxjnBoShCStYCTqUJ+6jD/jIbmwJAx6kl1OfKXhsicwBQ+pKPLukZ8d2All6fz5SndrsL4PJPtekfQMqBA0IT5FJRZaPrBJOAp14TvtLqONhbR/9zzJRho24wAT9a+7DFKqDO3NPV0Ts2uaSQ6nxz5rjNfcRq3Dgk5s0i1aPtLEpBroLbaktNq63id/zDum6XGl1HGvNnxih7ZM5LA5vg/paIldEkaeWcOlR2gxkf+Akydh2Y/rCtaELvg53lHuMdb3WrG/wkUEdKEfVbqjqMaH2njp0c53zQY3kqe0GA3DqAihBrOSI5XmUWIJAVswVpXShSRYHq3ntCwXKXe5HpGBzRHwf5endUT9IVJcUgPwQojkqIhIHwpzVb10Vc3OR4DftPOPGGpBs66Vhomywrda4FwhF2XZ4EJxOl4wHUB7eTz0P62RwLDFFmeCqbjgjcjwKluGlSGn5P8749LmWCKWhTDJWOlZM+DvK4VABbbCOnr5RH+ez077kmKWqYLa25c3Cf2dXnNWybPcf+deySiryaG0vFTXO2NLqy212wJb9GTUQoaPpJiU5S11rr6n7EhEyy0VcOwlPL02R8HFROWzbnmSqGYs/wA5Qg0OXE6Qj8WlXBo5yrFqMuU1Kb0VTfW0E0gVByebfkPdwGQjGu5y/KmVYhXYgm4itI+I1V1dUaUlIKapC7fjFV9XxP8nFeJj57aD9NfqU4miGk7SMLD6CQFBLVhS1KcOMvqZiO+BHOmwOm4w1bN/LTmbEMAJ7h/n/dt+yOQwPmWnHU6wGtZEvkTPdk456EKDiX1yxuAjCMq7pOugN3bjL5u1AqrIZ/dD0GCLsDPi/mlRhVJUw5GGmfqfn2ni1A6yqBlDykgX/ZibStD0r3vG2Gf3qev+cWJG3jjkjdM1flz3edZPhm5okL5mUi3zD25UWrWW9fpHh0c/djvf0vrGlP79AydvpOR8erqBzhspE3TgUUPen4O41mWtHJU5f+JWFPd8gKuLjOhipo20zLkPgRXq0IMJSgUP5yZm4Xs0zceteACNRiO2u5vNB0Wx4g6jw8L1OOISIvk0Yi3FOvqukw+eAllGKAcVUKwKIRjg/zj3BmYhfYeZPBN7dTuuVYePPdG/IR7Q2Y4SiQs7PyyiY2MTROoFa1Es1RGdeT1Tinn+BMulFWDd+gXgMuJG31cOuUUAIIF++nXnu/R/6LI+W7j1B3t52qhQsU5IpZQEXfNY2ilQg6205km36tPiIsCiO9BqiY/oqV83M77FibNfr9j2VgU+Anonci1sQOrwuWu6/HEudHq88JJEYNigfCehDrrLZO1P7jOTe6n1ailnErEBHfHs2iI1i8SabZt6Ia+HMccMCRlNIuNpwY52p+DEbOxM0/5ZfXw0BuLRjUTc7FVkohiohu19uMaFajCLgCqw+938JO54z/EKRZlx8UdZn77s7yM4vgrI4yRi+pPYfLwKlwkkElh0ZDI3oHP5FL4F/st8FoJmmZYRVtseqOMwQ1y/lhFiuyrLEZEV5K+1E2yIWUKyw+j3rJpYvyfCpWBsHI+LXDWtRdLqY8+ipd1Jaoto39b4sW3x6DTfxid5g+XmhN59GmZjXS37Vd7GYhSnSQQXhhw3nfxqRq20qYIpmSveMUolcJz1kTCvuzb/LH3VWDakKtoWpB/nKx6IPniPhTDBG+8PiqzPo8qDSQj1ZRkUURrgzrpL/ClyY5sJCelrEAHqMba8PY4FJUSLuzV5Ziza2McY1484Q3EYgNc7bxLBFaysIbIAnJKbvUmKZHDOLMx7IfNfPBq1M5V5Uos2DjL7fFQlJQyC97hdNimSmfPpwJYnYEZfHG7QBJkIuSmDHGlpIbYGXuspPTr4EqQJfM5ilCnIyMPLJkctspdnTgl+PtIW/0JbzT48EXmfBVmls+brr/B8iL16UMnUMJZki+8dT6nmhnhflSzBBGC+UV1+ll99uaceJ5GPRANq0r2CrvaEv0WOgp/4hPdjCcZz1L20AYzW3yGEBXjsxy7kPEgUSXybKfIU4v6EKHgpvIpR2QQ3pPNQCsmb2DQJDvRYgu7C+TR/4QSifPZzjOE+fG3WWSmjtMNMdC4GaUvjGep5TMWmsBhRYMNBpEqzIQMMXx1bpO2qQXvhYG4nv+HJc7qGSelePoB/0/24Q6tHNI/S+R3wBX1Sw68pLv6jZO41wCRfUvWcvmYmxHu4dWyONgVhnaD0bYCtMGoViMQIfglkt2nrjRjpWiap/eukU2pH20W0udbF2DsPGUD+ZixTVNc6P/9zC8bd8jP4dfzNBqgWGFUOKt085yX9F1w5uFhAOrRY8qFPu6ydmHhuhisJQ+i/IziK8rz2xao7DES5DxSF28Zqu45eXi8eu+zElLrGAvxa7azn4SxlXoyJdV4TN5lvYUhgsHswPGqoKyfmdYB1SAfhpuVY810NdNcPilGzyKDIS/VjRM5jLoumUwXWbOjlsbnszv28rmy2pxdCXo9wfJaCT2hs/fzVwcrzlqxRP+GwtB0oSy3rVY2q629KAEpndyO/G68Nr71DvNAm0F+JqWUPyzxATs8p8ZpBoxfnhoInKP0lK68dBE51sQErlk86b4VOiHhVmzop5JAyFj5EyLMvvwtV4Ynt8wBWGgPFuszlyMGqFMkb7wDzLHBN9JdGY+1QSvNcMFcLm5vmmvuJBJ/ODJLsnsnC7fBbunRvya30Oe33IUfvw0A8XuyMy3DIoMEak3ubR7xYwzq88eyf4jM609rMU2wqcXf9EoiNG2kA2gM9qDa+otlN9s6Ra1dMQ4oZvKGarjjzn4BIb0PeU+ZaHH3bZl16MMmc3vnU9msK2dGYOOdBY0fYqlcKHLDRNy9JjGFTcUSZX2FIw3HbN8kNsD9zbQWxC2ll8EV/rSG61DLjm3WSkRHcGSkCWqdQ305iFNtEWbkRo37rGfWBFFIjoY8rxSgkGtw90RwzU5mU3II5iiXrKxgMwIcDWIhNPW/sqA1hEZGUf/EWB/9IDu1/Zx8d73WY5i5FdnLOf5N7hJaIMYBMGH9ogeFQ5EFbaLv1/2du0LXdxuVoRQ1ilWRNDUcWNlGwIJ4DNtsCbTc3iOZomys5cfLifcH8YgGyzKsFKnv0H+IWKF0n9DMHfffz6qjUE07FCkz9qrzQVpGe5YXQ0PmWmZiYoY8GtDH0vJvBEjOJ9z+VqnsoMcwjA0zsPWaTks64WOGoNISM+31iWh28mqrNuCwIOKUX77ns6mS1q4c+rEJmWB+HKS4oV6m53GTvEiD0yDJttdKFcmL2W52/ZIL1WNYJqgGzbAh1dG2Ja1NyOxvW9BHkptsgUdyw3ItCf919HYB4pziQpHOIs6KBSpLbHgTBjj2tcLGcQnfL9GD+wdDxdivtyNYjGNpesOWD0mkh4e0PFswevKrqgNyHzzF+fE5Rry01y/vdfAerBUw4AMfXNwmZ++MS+r/pwuxzqIiyjZcBlvyRfnl5AOWGxE+s7H3wavG90Ovj3v0yEiy/FBvPHCeJOy0NoqQdaVAsgeTzWF7TqXVkNeBKSPIeIZrqyu+pxeAxgNOFtuAEvpPF6aOjKiZSOcyh9hCmT8TlA6VGGnvf30Y1xFGD6IeK0ZHfkf5QoYd66ZjZSkldRdA8YIQdPBlnxCm22kdbBRaE+vp/LW7JxA1HXHXdvn9VyKHfJeMyyN7bknJRfD+d65uvYapiED/cpM2/x8kulQbz1DfGgefHAP8ScstGz5duVtgAe/cgdPA79mRbS8EOAzQzJZo/VflCNQCnAhoy1SaSQEJuUwDnO+Xku1fl7pOoM4uCqeHTLDjDyKsbIFFX8GA0pPkB6I8k1KtaNQ5GPxZHvmoQzm2ZMQ4v54+4LK5N5LICyf7BOm10+QpRNMmOgOF5ksvoUeeUqDWrGNp2MQiB1hOFomE/1SsdFs4v/V/PSosmaHeMEGgW1Ulp5K7C/eOgn7MEdRP5tkA2PjplyExLT1p7U+jptSBLrYvGJR0LBrgtBdEI6De8xxZtPRu5mxRiXnzTOeKXQxcRIHGk0Jdl4H0Q0zLGsA8yGxokcuZxrPahiTJBAPNJ78Y26yko4lx9dY9egha3/PvrJlZWFvSFhxS9y5mOYIucrQWf/pbH2eBMmwmavmK3fWrgqZ2ebDqVs/ovYWfwQ92pNoJ93TRGns3Xczhob1uYs33TwxCznklnGG5upiF8Ixfgn0Imn8q+nGdAW0UTyIJnDsV8S7KR7Yx1vy+IZhWjWgbuEAv5+zXSudhza1T+LRFfsUssICRG1DIbrocV9UyU8PgNGIBolsHSCiqJcGTJD9JLJKWu3xHk5lGSxqn7a/3/NxqAG8uB2BgPPS1MQLsiq7BEObGR7bhj0LaR6k7jqfyX6j4eB04gMSyqVZfaPko91STaHR9afO9IigW4Y5ctVc9KiHDMrJLgEwza77PsLSjO1aenWKSoK0K8QK/5jwXRxZf4KFIRtgCaErIEgYeJqfsvlk0anCgJyJsUaYrJu8HOftBIAUyKo6Eo+VB0Fz803qLplE2LXtE9IiPbz1oCizshg7MkCTk1Ya8bqvNBMTNyoT2QAm4BnUYmQoK6EBYicfZYOFerQlaWTCkVvAHNZ457B/QckXtQH8c6usuWzdKtTc8x2YwOlUoAWhYoN9ReXBu4+VbGw1uSCYzedU7Q5vxBTbWorsKvI9UAH0HDQ1wVP46svf92/Ne2nlCP08ZOtjb54OaFIWgaNzmy941ZV0ND7Lo74BgPYmakGTKERI8NPJtOybYXmd5rERH8rBczcHWmaKsbqBsgM50R3Rv74qx6UzDHNPXvISgiBZX1ITSL5d2DPuBGYDS4hMfstWbqj+3TC6J9aORzYM2CiqyXcYLdEO5GkY+wkwgkIOTiNSG20agHn0Vp8WCfjxuOr/YSnsOMBWBwJ20LY7uLkocgoeT3skCHO8T2cMyS0mHbInBtny+nRv2r2KLf9Kf0V6xGK85sE4VWXaVMIuJ1wAY+ukOadTK8hcWvPNk1SLr6xJFZE2a0gyRYICLDeh3kFRemDJmvMMnSZonANfP6wcK7V217K4/e/U0/8GQaNzOrYWqVj0dKRjqi1tmSvNtPe0YiQU6GgFkl7to28lGmuPI0Az4Q4yFNtgtW05yFR2KMfcUw53NpC854rZx2JrhdmdR4BvRzbH3bip6fTSi5kXXV5iqkgD847e6b2ZtJ8qYpVjRBL0abfKhFyEnP+nsDkRdvWYAcZF3cW092dRzfSwCR0z+WP4c6dEwS/O1NSMWX6/V9N8d6bixzt33QkbRhHbP0uP3rUZM8KZS++6aNPhHMPa+eD4+JbTLEkg5As+3PQstixkSe2rcGwAH+QW9ypCMHOmUCalFj5TnPc0YVzZcFjf91BiJj/6UX3r74HhG44Dw8RkioSkOwBqKYTzoVrXB6GX5N9jnbmcY15UoP7BbmNCTrQ6efmyjEIxJP1mM4hv9kRg7yp3O0EiaYSXQgPMBCEjInSy9XMXe0Rl5k9dkaK4mIZp2g/OpRYZTPQJ/e2BPNReMPFjjs69P3z9Df3ws/DoH26mC4ueCOtSqAUisRILTG1NKw0ptSrzeuAV887eDyLoa11dlcEN5MdW9vK7U8aLCgCQYhESK8ZJujFC/UYT50lii3noyv2FJmygRFwWYQqgpSnECgpZmL75FlRIHBEelogtuGN0v9eJVqmRsLxXeYJDz2SFYBT33sEwCF94HIlnF4mZmgcUj4uvPf0djSlJ+CnQx4zcqAMEFwpdxy9yotDT7m1sD08JMfmeVhg22wAUTGIOBPfQ1MKm7NU0LRiF4S1N3S4hreLZsKNA6XJbC3cTWleQL2229DJTwQm9/wjdg5A/wr41LN4rkJH3GJrxquMsGjJp6pgGQsMjxY0mGJq4nbABqcUQtyJUQOKSIwqi7Lml+qLjX/TQ4518BJy1cBs0LiwUonpNeuse/pumrIJBR/ri1MCmED2nKRFjaL4jmo2Ys875Z9UbpTUgogMcbL4t+XOq0j3MQzmRN9oFXlGmiYoIis7AOU6AvIUlnpJZBh8DfbPIx01dygzlreyJaM/OseN0jUflaCURzePaxS2oqALvSGUFEgZ04mz8MuF3wpJGvKiQoY2Qk8pN8OY0m5A4DDL17UDsbk5UWceFC4GZt3HJsbqZz4zSSmdqtkmmf7k/CRB1Wlx2gFFfOVbmoYhX8U37oVut4YbffS1THopr7Cezs3cFs58LyEYnG00+p61fhRG84z4f7DnoCfvgmtwt8TRBOcyCEcMdXYKPBG4yT40cQvbMPzoLtfiu35AuN94g/oj0yg3WuQ/5b18lf6KujH9frzPrAhjuBTuEmymxWSOJO5jk+gDuhfvJPPoD9GG2yqBNmnctpIcOnmN7kaVtqUXesM8+zIuIGMATscRGExL/5eYKZY2A6yD5BULBOP/FwWGja+SKNLSiIA9yn+WfNyxSSWNBWx84ro1sJ5nQ1rZbkwqsaNdu2+YAXDlSiW9/aXQ1RuKaauO/XaGBbB/uyUiy+OoNCXz0MGNxsLli3wiQY5bQJtbtAKFo+P0ArWPmH1/yA6h4KH6gVpUj1faVNS8rE/GUHZhduy5Pu6P/DowwzdRnerKz9SmxV8CGzHF7k6KmpwP4M3oc8xNaEUKKVY/hE/SlUjcYuwGiEVqKE0Di1W00jmJVK6C/F2omJKdR0CRoc3xfTx/r8NTMrW1iKK4CAZdw7mSIsf+wIa/Xoc5g5eAF51uX0vFj9cDIwmK7MqH4J0tQ/SMn/OnF6weHrb/+AYXu7kk0EwJ22AN7GUENkEAPYf+UMy1HwX1dY4Bw719cJ9yMknEq1YtJvR7jaY2hwlOH5923XW0ewd8GvmRDBaBMz7xVDj4jMlw+yqhopOayA63eoyv+JaSDwr+JXxHQb7AI8989NB8e0T3EFrutkpM4T8YyLUS1jTzgpF8yxsptkr/AIRVq9dtOtKzM3i303nAv3aT587NJWKnJK4hxlV6TU8f/ipvLipZ8XLeMxhn67Ec/h5qqHC/7UMLJt8Ppz7GIZlUsUPzrRYRe9Ygm4O1nmDUWFVLfyVPxTN4/WkYwNMFRxKwCoKs3RrIKwZwwky+LQqD5TMXGaUq8pRdPinxQOVxz5zsQQGbLx/8mkPu38ra7ykm7+1UBoykySQeHF4WuCf49rdDEWhoakvPCy2CKr31+XDNEt1UoV2J/PZSdT9L5MibE0apLZGcbOnUHbSEdFKXTnn0HFJZdI8NPNzLtxx7oT7AUgX2tQB8GEOu58EGdrC6URXN/ZHoHN2L/s2vGIWLKxxstlIyXQ18Bty+oSfQmvNF8k2nUbYyGnKSH9TmG7lTr2IxpI29KOMozncWOqlDEQ6yxDWZkOxmjAopeOreHIEYlhqHCAUlljP6Xhs9jUxJTs1HEKU2sj7wvkYaY/aKpBb63I6jpkylSCVWUQyE+TQxwyCHWvaIFd7cT29xF94rI1XZcZDkV5wISj74S+st1dX6nkLjKwgKTFA8X1D7CimLMQXoiG/4k1BKq/v+M1QrQqaYMgrXaGOJq4mxdtFD9hlvf7ypOrgR7N1x8M5tiYKZrfM30/Qt968r/hXRse6DNFskbkCecp4q8kvGoGqvDo/+3EaWGcfYC20RRi3K9P6AqZv+I8VoGGe8uxRTXj7mbUvioHCE0ivgv6vaQ19JGtT7GwZVK7mbq326UEQLVJlUB3fDKILJAIw36r8l0vT1+Tn08fCn6NyM+u5H/6oPfm4tOh2SWXRBwgQ9iaPcHS/Hee4znW/anJSLFLi04BhYvnNsPNOZPEToUFDZvyEk32CQmyGzFYYFsUZEw4CPoCvl7bxKmVrXASOGRU4bxniUDTiTJnMyIlbmAnJQ8iILc4r24Vdbydi9fnnzqpL6bItAv2Zx8HbWUJO29NxszQD0xW/P4M1qNS/e2klMPcQb6IBxAPBtBm5A8V/t48RxFfIFaT7++hI9M3sW0a4Z6+OkBuoIT23x47p3zme9G1M27r0PyKJQZP15hPKOrlD/nc40eCSATY/l99KcSo+eZWyhIU8xPH1hab19Yd60+j1ImPqbmepHdmiCj6YfpMGlt/CokIe/tHkkVs16/IdkfUCGIqmd7mDBq8yFQqKvhbIiUtWyhZCMCdNnZH30zoK3Go36AFZOrCxaFAnNhI6t3xPO3qwBtrRzKBnrNptHFeSnBhOb0DbSDhMhkgM7+52/imY1C4zqd293FPtqA0LssdMGJNQYOQmrcV/aZSI/8MfA5aVAVGxQnuOrV6DeRUVwaaKLSLzZXNAnayeHGTMJVFp4BB0NwZS4UucMp05UTDMGiurZCgRyXvPqNqwuC+ZYELPSQQ/8kIjFw2m60t/jCvdRTwMrZg/KRt/jrdqUhb3Pc+SuYL65Aii3r1hyjmHLQZsW+Tvk2WHEgchyy2m3OlxXp0LGbIU/e3oTn0N7X9OCOz3B0GuK75D4ds3UyKYd0Iccg3vJ4TmNtOCAuZ8jVghOeqFJQYlSn8YEdwrj+MxMRgvjX3OrOOQ2ABNZrQHO8FTfaR974tubpCeZls3cJHNQMwsSvPvWhGmfFEawgKJYvjMLxkj+anXzLikSWanR2Dp02HyK7UQYcTFncugSCKQmTUFlpjVZepsPTaVMw9uSREyC7ErFJ5gnqfmPdIjzQsJEQ00/u4jlriLCPCveFqgoT7qflwDCBOBNBn3z51okAhq0tZNc1mRXz8HFRD2vYZ2LQAymZAKAUsLVSJYTPeOhPLQdP518KiaVAA/44BhUYxYjdvmwsL8ox/OG0azi6cLQjSR5XUdfWXzQPHnNTstNC1bJbY1ikfZ7xSr5TKH41BfF5BkZWPpq+x16hxlir8V4QA8xTMCQBEF/dAMp0eQaReW88k5IHhQxqpzzk9ldsieVH49bfo+e/DlcVnyPbgPeZKLirfCbSYKH/iWX9P/NMzpOz6uX4Cn0HDJ/GUpiQ3u2tJwTmK8AxAFPoVuxgFtR+XVdjXA1KBz6uPRhb5EIrmZOBoqDEwF8VG7wKljgG/1QHqGyFPnci76dBew3wu6x0jJKeddB58wxxB2ZR424mIfa5OafJp8YS2t09JlMCkaiiPNZMRyN0uSh488p9UatXZp4h5gVrQKKSUYFWe21O1kSG4cCycX8GX9WLkY0GfbKHWqVU1OOOHCEB0VsSnHrBWXCtxbzzfCVJ91QnvTPawLeA1OQaeZSXLpsG+xMg5pofYEOcO5Ke+24y4MLQTAcFcWn8oIDV0vuMUYvZw1M+T8uhuaYvF6hQSSqR6KomnQAiz3PCdHrIiWEHe/gLuixEp9Tx3kgsvQD0LYZU07IYoeq+vgY90eDdRpFejJKXEG8tIzQVHtAXExF+1C4GY9xDyiF2gufTFDi/Ejsjy5yOSUF+zvJycYiez18QHPMNFtICBd9LhfujsgHmg0n3BSoFm+sgmLn1/ezk13VpILAKirzmYim9SA7Db0qxsGGHXe4mxMYnAKfrg5+dSUwWiiIoE15pGRwzOYUgQ+x4gEeJWg0n0u9dQKHl1z17tUNJwx+rrSSKNr5r6HSLgPugvTxfTPihBvZbm7k5NSi57ayDDLIllLZlcvleZZiI3vUqQG5ToFAnqHqQ9SXvesLGASwbYZU0ZEeEr7yLQfV2nxG4e46MJXfko0q4BkTfOiO8C3OgEF+V+NEkN/RXrDLNJDfURHYUrSmLOdKEuPlMNU+Qlni2276rjwjeXVlMwcA6ZcpA2sZihwq/dZNqtV1E8zsx2wVYr2LlCbAIukknooahX1IXJkGgteOk/JXMStSfkTwKyTsVV5wPRfkna6pxw10tNxnKAxYvIdxS8vIwh8OIOsZX6/Fb+T7GFCKiUcY6rZsU0bAfPC+ohG0OskSJI3EvP2e7+6Qw+T4Kl3mVpDX2EjtfajLBbFFowukY69Dnw2zURPWBt3klr76LqA3qeH9eP0Von1LCYReZFse2Fot+wHJ4eBoaw+jrw9smUSLjvB18lpBf2+7taCdL14Ptj2HKimOFaaxHIUmFVmpVv1Vh8kGAzsYWhRuSBsNMIRzPpfw0lW3Md3Xo8CmndBvUgNHp4nUyd/XQ15+RqhwvbSVcQPB6UNY/ZfzJYrlkYa7hrpIlx9+4s7SsxDUFFZ2Ff9d9twbI4sFr7gXgKHrxY4dlekE+8oJEjKzpxLOH9GXg1ckXQZGGRcDn2XxIVPXghU8E4p4aKdXz6HS5kmJMd3N2Cgy66d9gyfQIyjhQhkr179KRzpzZ0aLQ3PdYcqUE8bu1GPayqRkgRnycjii2ciDePPCfnywtudKR5wuuaYzEpCOXAm9gCdBcsJYHIa8BPfkBPQLzLOEMX014KkFope3tnQBXoUhypvSvH4ELVLkyQJGHdxz2vQZ1jPHloA1R2vOFkH825qIAXMLXykipZZ7av+FjwAUgWStmRaLVEj3wDZcqMSi445PJXirOW5oL5ihsQXoHFbd2b0hA+LsMEwclEZ9MQjii/6gPIzZA4jCesYE8odaUProekkCe4lrsR9+6c0joPcJ9i4kkS67w2Sgb4bm4rVOOJD3+u/U7UTmmZahJM+4TNY4+3m3gH++Lau22Wm6/1QLdf8OnC0tkZ2wlCSh0yBRYvDJhSytySMRjSNyZTMbVKJGro7i2kRupfQwY6jqPP2rKBx6tCQOw9F93t4thpmxDxPGFtEQgVt97+ailvwGMolDyz3XyTqdZre/qzDMSQ+6d534TuxswmhZCTRvWP3p2TaHlDMaARkWRyueGEd4pArIsTRaWqFcwhKM1k+Nk+YThdNX/JghS5hkWE6GVUnzR7i72OgqZv8Fhj5j+ZTLc+49s8qkQp89MxLlEdb8rtnN1VFkEePsQPZisaYTZhuCPkvaQETOkvyGXJFn4LM/HcESyHcQIWFq99NdyZkx04RUmieeDNNbhKTZ9R4OS6r6VXvqrhclD0X+KCWdVAqYS84Kf3j14ck7Pmmvcz5rlFR20fjwJqhphi/7l24Cso7HDIoE8oyerqRtqzVnt+L2UuVK666e3PCsmSogQx4Kl0cvCSkynb9bapBxMy8p5nPHief9cXJUYf7CBGMtPnhQd4SdI9t9HW/aRQ2pFLDPsQCY6DRYBs2qkKO70KNWJ/skTwVYVtZLt5vzYJiWce0Q6I1KBUbEA5jIloikoJbyBt0Zv9Mf7/E0wCRZcExL6OFiedwUcsEDf3nlSdJpDr4xo3Lj5MpxsBBqibb0xfWNYj6gYGR7y71ffT2DbUEiY21JGJOB/jR92rTPSTN+PQ4UBxIILcm2GSpTTwwKmO0THq2A+8GB7qJoT+4RguwEs8tpyaqcbvk3HPiPILIYZrD+i8uxGn4sd4vPo5cYFe/xYxgzL9FieKswMEo1lCrUlFQ1KRZv3vBYYKX+jIy0gx2xryUnx8yPgWZAz1uZEWvKlBpB6sBIQeYWeC6kFNqIlypzMPMdLOPyPCN5haJV3cJFFVfe8dSXQEwvwOv91ZYO3n9TPAArwWCDHLYJYpc0CyN9obeYXG7AyZDDJHOXPbgIDMrpATR4MVSz6lJz4cNO1qG1H6MQkEzoF3crPy05Hi5NYnctFya+myHlX+V4kMhAZfkv0dl/5+2/qnuQEB4etjt7QxcGzw+Kvrr7RkPFd/RBnC+zbyon2+rshuxEsPjJhLOCVJ1PZTLdQ8q/af8L0IYcSlCKwIVDLv3pBjnrOxzTnS+lRHLSgmpVsYUnwLhqMyUFGL2OYRvak68mfo5ojtD+l67a9jzbcKABq07XW3APIwip3j+a7IqoCDFHzeIcdL527SWQX6+1xhqXdrvv7KRAqoEW9MrT7x8F4oF7RcoEr+tP4UMav4EGupwI2kEQe65YZDGm82wVogIjw/AjEO1sIqCbX5lwxiNrnKuhfewhQYdiXrRVkD92wgdU6rfcJ96B2GFYgOJwRjcvrfq1VjjX/jxFTJ1T4qNZEzPGJrXKEvCvHjHNwyz4OMgPFY8XmbI79NESS5qfS0jMLzbA9uQxG4FBEM2p3BDKo9Hk7uWdstZ8PhwCiwtJr3z8V/rupukGUFA1Sb2lTPyaCyfjOvXoWx+eCwvbzBKEnTlLD1btQ6DZzO4XdxRnUswg8o094Zthbm0XswJoTqU9N76bgwl7y8Ad3Hp1hnSTHkfwu8dSD4PDb8xuUBmNIuVFy+BYHdty9lJWEHw6/RgHKVdEmZLw4erSoZ+N+xaFwpalRrXovCKDI9H2ml3GpULbwUKfKFKEbotw64RkXHk0fDrrl5bD7c22TacBCfCSsNeJG5tq6kTkvv6m9GyrVXoxbm8CFW9Rr6QbQb6V9o9mQJ+EZdBmVKu9SKJQojoKb8hy2bwwuFaK8QlYrLCrGrzKtzs32wQ/mkIMgoUSAmRrSARRgAK9ntIaSKufRwDGi+jD0p8TAybKqUDJ7hbKE9r8Gd9jTDulvPtndWIEw0pFYhLuovf5QoxVHVzqB1qW7LhQzki7x+zzJ4fy2+nSjWwFWcYzDFiAX6r47D+Df5DH64iSMCVFKkmh8rwDbqWt6srWwLQKUMicxNIaQeUSlQUtNlrpGMYtVZThg+hTKbUj9nirCza6kbn8F4PrRSV7/jWygqVh9xkcUT5bd/VAiJiCnpHpWyotAIMhc2Cd1mPHrLPkTRfiAS2e9FpUDCm7UtA6yBPnasTqP2YGVP0vzeImadT0Lmv7yYdBh0Mb++Ub2fWYzEl0ooUyOKSB1Ibp3VbxEwYWPXJaua7fVj101I06TDIAZGL+RWT1hLqsat2+H0zLVc0HsxEOZ8dzfqxbHpyhCQZZdPySA4j752mCPgVi29mE5s3aX/JuTH7zeCfKRAdOGmfuLUmkmwl2q0XDb+SP+wE3hgfPJxibE+myWWmQ+WMwEhJ3UvpSue+W/K0Y7QClbYWy7XXJsZpvpPdOdW3nJxHUxsfQ0+DVkecHHoH3EdgvDLHMvlzFfISdhGRWnsfwwEyuqsas2/EyQtJ6r0EVit3ZG2PkKYYxrdCI93pcvY0bijfr79ck1MAivFthy5LGJ6EHZoyEkUa3UYjxNrfItAs6AMCXS6xFHV1BRry5dJbkSVgg+tp65scuga4Mptm8E+IkUxSVsegDJgvReMJb3UHmcRvfjBx6YbJRo67iXNMc3SzHl1EkBFPCl7d58qcvuwAIqIGiDJzxwkVVlcJdSLtTtvOpaUvTeZeGZgnBausLoAfb4vce2NDut0nrqz1lM4z/04nt7jzS12TYFrTlpiawF95e88YydwCmqIpOLA9Q45adthKHCDzXiK53RueUy4nNGVM62woFsH5JfrSyXR9T8YEeZbS0/vynZtYKc4BlaD2XXSb4EVuMazMG8A26emiZRNbbEYZClwnQTz410gIHUl2c6uVgTEb/CbcFQpBGWh8gBn5SoBLqBgCd/hUj30eL5KTrFy+gxwaYaKgcDUqEciUT/CgjHFgBK/0NA28N1tN3y+NoGWqC/5KO0rzyV1wyLXD5oR6b6fU+ryePfd6fdEMudtuffj8SaCgt6rsfpGbeXtz55mEQdMSGZdN8tjltrGyH+2e8XKkWspRIN3atplfZ26TDd42GvSiXrsegQdxoDCGRPx8LUrGCfe6DTN1Rjk4TuTqbm5ycddAIdi0J5uiT+/nOCwPrF47J88/qOgSBfVuTcUKyxDWmElz5O8ziK6nc79dx7ou0AMv32WHLlKOzYFENYQ/xbbMocWtxQQ8W1Ad1XyJyyiAXeRHvRfXuExp9G/cezl+xVMccYHB8uHkSHbtPGSlEqCgRgiGRWtYEOJnqVG8QN371L1+y8VAOdUGIqLeVdU2x6YCefRdfZ6gsx3/BIY+oYOeyL5U/fRJK3ZdO++9h43MWa4DrGGHCfIQb4HWxwshidKZSMlPRXpBGIisbAFiqrB5NdNkWBiSIlpVh9bFATrvogjzIIQjC+6hrXNoSWvqm1yVO5wsTEeDdP5EHicjxDfc03USi4F51f0lAw6NAiWMc6UxcM4qC2V/i/uk4kKfi++boXc20dETylv8PHdXVG0vy9XvzVH/A5st1rWlfYlv07R6i1kl4hdjLf11GXOvMuORXs38d+ZO8SP3n3zhLR3SZFqF9vacXI3mxECRbiREu2cIRzrkq7rqNbcRtOeOiCrVMtvBHqXwnP4GGY1hQGuJ60R24YZtBkkBsIC+UgfMpkmk6tc0wSt4FD/EFBpuBIt2xo4G99LI1HEKTEHnMbSmt+zwOMWU2sOOdF+0Y4+8xVwLVm8rmEBizl+VuSNQlAIZGPxkj7RnKdaemQRghBQ0bkM+pp+Ji0u49d3H3iWKYtsAvUHbZJhZMYIpFkZYFutntWvR20ZLfSbTv4hlDku0MBv0SxItluEKV5NY3MfySz2i6qlfa6mMV4lpTZ+tn0iUn2RgaJns7ixOCwrDMQEepHjNR5e9XDxLlMY3kkGSsCndHSO7vG8zAaWyPkG7gxD8fHr7TGydqyxahPGq3Rwe2w0cjDCI5iBXO1/vxLvHHrdb/+lGEKQxEHOR5bx79qXr4uN02Ta8YHq3bKGrLpcbqdlTCj4UwCmqSYOa8a13SoWEjnkDZQzf9xjfuEWoa2JFaf3jseC4MJ1Qm6uoEFqwGSqGBWc1r9zJ6pl4YH1Zxuz4ZCvKkzaOJWHXmlvw6EAYUEfAGoVkfqHzbOSVwScu+hMSRuyegJl6/uO2wjUWdQ2fNnYocObfqIRskRxx+Z8jHb2wBJl/7B9oaii7QKPVXuEpwFgzHhBee3Jk8dcZ5mrFX3sOo8/TZsnNi7fkDCWdh3RP9+eftiQhZVF9/UzO8j/wAwCVI0gyghMqaEAzESbduktGxd9h/pgTTKfvPZSMcPBdvxAV1MvIscvfedLAsyA+xMb1NH9P24FdlfckS+dyNXDFk2Oznv9l6rNb2oaedRd6/pI7DYerXV1Jwgzbk5MAu90jxHmv1tKEgqxCZ7pItUp9RiqzBUXmnlD7S7As9ZIooCRvI6h0/yA/XO2WE2cJdsEpwMtaW6ToOeSFJIO/xeXG2ob1iONafHqMZpMmw4QqOn1T5UISRyQQkg1SF7RHzoeSiARc1y1WputKRVoqv60K3TIVzAnwbf7hjYvhjUOi3htdgcF7OoJJB8rCpNWU59TnIQ25QwwgsgzooPgtbyjGLU2mTtaUQ3K3HEl+3fcpQcU+W9oN9mX/TiyRJahOjhsFjG2p97xLfwbGgdSyxCH7jb+aVMdyVQ3H0ABNct+1vP1jvjp0Ajtl+7EjaHJCDAv5W10xsQ74cihVoFelnis8QlDKwmz/YGK3MiOFx2A5UcSA4Np9vue/c/JVD+UYCLdArHwcPb9xg9Q5ldi8DPZ4tyS5z+m0ofCe62NBlwp5xMNg+4HumRf3BMwKdaoLXX3VTQzbViDD9338zxH0CmJjca90jdsbYAqc+IN95h0bgeGnstPZP2b7oypoI52nYnvqY10L4aYgdzmRGBX94k+JjoJSIoEX438oDHwZB7cs8UvbzwtTBzRhVTHpvuf856VIGGNJFeqNy5+qOcJ5ZPpNX+MInvIVuE+eu03ZzRAHuYIFxaEQuVnLbO2/PaO3vHSIVa8TX8hk772FDu0Krk5Up+lkvSAFibxV1YRDalR7PiPBUaJCSNib+8QHGVwalG9OghVG2Q/wg9nxk4dE73+3F4wkpm+auhyI4zE6B5SQ/WKMsGTW5uBpSI+svOidxKemCEM5zgG5sT2GvTvSf9eJgnnz0+Msczw+C1rgaVeigMBbSOx5b1gnA2ngjeqdD8CaamUn6FHOrtd5Tv5K/mQT0+PCckrmtHyY+BCFtrKjihChGVnkziKwcd+RfeDzxQucXmSkYN9u3o/hkWJ7TAR5MeajAarvCc+V3e9awBMRZFuk8Y7WbcDaj4fMkg5sB1akgAfcQrq1OHC0gG/JqQ3sij0hjhDL5NoEVFpj4xDv+u6aWVHWXsl5b6PQ0wggoVNorPguR5sgkv1bKMsVLYl9AkspiTMTVGGa43kg1TrjaPqURVkkIFWlJCFJIzeAK5xPTghCiiYhS3WfKc5S08VvQ4WKWQW8sq7Z/QWcl30rQSssk1fwU8ZoX7Xva05lp+H0zWywW0Eby1OP4/3Jva03Py1+uvgiI3IKQm9DEfSC8z3GOMRMpLeihYEyfCUK4NjgF58vZP0x/PQUqxw+jAhHc14LooCLjwhDvo51z2+PDg7L3hEl6WMih6QxJZF3GvNaXHHMbojGbjjMMCp1ur3KpSN/9NVrG3gKpwgeZdD1qGuOrpD7i/ICsgS/+gJpvRRJPumC7JRQYYviZOXwE8BuYUkjjfNgrSGnb9LT3+2wQxF3PdyiOUN9mmUiUogotFwrRxGDJZdeCgqCqdGdXgD/1VEPvmeEq0FZ4bkA3n0Goy9J0T6xl9mSmEzSGAuDTHbx9Y6rKfz6vVnnNjqR3fxeyK0snUmDpH/39RrZvuFv1hZmMVh2V4Ulr8iKBoADNZ0nmgPojUvu2WRLVosCOL0XQOVaSoSauG0kpfUXqx5PxHTmQD9TwJsKEd/dm3q08wQuNmsUfxv4MWXVpI2jLeOWYYTFhH3WWBJ0adbgYWRa/lkUvNPFNwBF5x2qbphLOad1V99Zl9cw9a+11JbK9ZsBdYyCnzFwK2a/uZQQ6M4KEm8xfJjjzKr331feJFDM73In5RfPzP7ZP0dcG3kqL4fSu2cYmg8z8HVI+wUlO9hM8jkqEVcdczDnfa4wxfgg99+htaSM5zaehR330SGXGBSUo+rB6OlRJQ0sz2Hfke/6qZhegM1fEvkrRGh579Hr5d7xWFrlU1KotGjqKAV+n4pqcK2VdjrJhvB1QlWYOKX3sgmgSjRGiooh5gWN2rjOFw8KuTPcJ/SVxd8OyIEgfk6LxEVvtl70LIQA7Y2xelEJy08SNKRZ3IiSBCgfjzAWFYWSUd2/o8YBoGL3m1bvWn4twOjVXILSvb2ayUiQPYpdf9sdCtfPwP2mWTJAx0TJMr4ViDFKtLdqD1dQE/nWYu4zA9lVthUJBttPYW3Hj0j5HJKdsgq0NOi6E98VliVc0X4e1i8WIsBo+uIJpAax7L0rrEFCv5/12zPnCb3+/AhlnMSV3+SPB+vCqLmALODOS72z6tjznkkVOYtGlfbNW+eG9Gh+bITdUVxWU1V/nCaJ2y3VOGWkQrXea0VbFgIrMPN9q5Ww2YCOarkWbbwZdiaIMAm8ONVID2MyYXPKzeScbsUo76DEtXVb4HsWXSb1R1vCNUVBq1LPV2xUyFiwcEYD+yPWss04yFair/fiJYU9x0O1SGI7MzZRp+SKtEXbK17Pr/tCXFScyNouAe2RRM7f0n5JvaDY7KVp26eGlzfWJdLiNDb7xENiFUs/Codrkj+nYLJoSqghsLGDu/bzl2g8rGIe8JrhU3eakCAQyXu7GfD7gYkmp167YLU8f3aJKgMWZlsI2RCbwsKzUQIgY7q77f3/Gq15Gt8ywN+TukgMiguM6n2r/cuAIOr1u1y5HmJeCOGtZbbQO3+eYmuLfvDDBe6G6aFkDEZPvFegM4ZSEyn25rLyIC1QH5jOQoHUNQUEKY2O6D0sfb4KhgqGYftevCEcej4rSkvckx4s2eLM9iXkAzHshNeAJ6DBJgj6v/8oilDJRKtUhUiodX4/lm2DrAkexj+XihVCJDsp68D6UocaDGFvgO3b6QEk9VUEc63lz/2uaO4i0BfG1P2uJ4TL6Ksy0voF0rZsZregl5WzgvSYlN9dhFcv0SiClpb5KsFPnSad5E8s7PSWWH1Grfu7fqvg9kEtbLPw5xSCwX2tDmmcYQ6laoSszPaC4kWZyKSLzY2MT4VsY9dEAi+Geimo+zmp+8LrGazgBhnGvMukm295bJAAcUFEQUoI+mPmLAVuTNB3aOkSPcXA0JkFm97AMSiDf2gWUdsEGaG5Wi5+gjWzK+1IKB/ZTIEiH0JsI3Xcqk+sovHYtnSrsBN3Kh7a+DAKORmD0pT3iv7IhFZldn2vYU6biFwA9ZqizywSw2M25qKIJpVPa9cXrGh8FXk19rWkXHRJNLG751UCh64fVcwcgcjN8DPWeog/zZ/aeC0jZEndZDKYP/5T1Fs7SLHjzC3lyR6S9cnVJvqzxFhfjxe3thpbTz+aWkOJcaqXAkwmDV8bXCITddHuHLt8FH9V9ItxYQQ/7qxdUXSf5QjLi89QYmUz46/3Bv0eryjHho5z00nWWVZhbgoObggSAf7Vy2/1WJuJ/PUtOXBM8T8WOKiUEzxE3cnbNmibWSHi6yiN29IUZTgHYCBf4KxbJnUkiLR36n/dV2AWgoJuQtG1LNYajYSoDyOzDYQiwmIYYM9ZbYtV4rLLZRnzKk1Surb6vN49jOGHuedgxhD0RNLt9v8B1Zumpc2a70GUoVX6c1vITEChMLdD+FPdxKNJw3YnS7LDH4sxa9Wv4MqE5zcR3tWKKN1GzFF5PhFp56AV4FEl/qtRlnT0wABLk25Ju/r0XFAzBZXG2Ubo1GlXmDtmBXfLnkZ0Jfv5SvWxliZ7+IDSQ50Xdk9Tfw37kwZkUiutmTCcnYRg4f6zD3ttxOPO+kQPxIyGiXbtpgsUK2buvLmTOpfZzv+QYwI4wA0zcQ+WAv6kWgbsDwBSHF914IICpcNcP17IRj70UhF8QhS+pkFCfmiKAXLqIBPbS8X5ZBhg8NRJk7DCIgTXNnM2Q2XkxyTIffGVMrj2AuGRB6hY6ZgFuogkGyumJVu8UbTmbL25bM4UvQRXDUy3bYkdx02g9Fewv/hPib+J/yrE+j5+mfzCqpIrRw9KlPkzLVDdrm25THkalNd3clnLrLFY4dnaTUsWeqHC4Ba3rGLh4HYIq8K5TTY8b7JKbvFVijIO8XzW8yZN4Lot+v4khQiDLDk/NdxAlVejCJzOhjcHMLQ3Yl27d7e/1JJ/dljjfi/9Yz0G+9mQU5xn/GVdOw0xcg4ISf3Szk78Z3XjUew4eGS7hds97nRinWuZwuiguTyI/aqhTyXFqJyt+vxWHhBu42wM5PAbjshvlVTjXjdpf5XClPZp+kD+uP/WC6MYXQIIxPQwnBEyZnSM+zyQKYobvNBLygznJytVlJSVrRWWFE2LswZgiqC0ZVTxBxFZaf5/JKpr2up4ctCOJp+9xB+PGUf+ST2QLbn5uNAzlb9jtaE3eDc8EvGPsn/jrwXGB14ApVwdVHQ9HduZKChwYx7wIFW0JpzNkfGAKcmYqhrSDVRYmp2/PJH28SYUxKI2kTtR46rYeBDFS/o4GylEb/drEjz/yS1A4wiFaXCaDwrLEcWaZhYTG0J/Ydha+9M8w7ubtpzBmFqDXukI2ci0/i9qlV/2ybv+TwdqrFwGZJ+MWLtbsB0dd55TUD7RdnfTP6+KzDgF6C/zTdKS2xK+4FFVVH9ao+umF+kzOSqUw6ulJWBve8NkSLwY+6kd+SJZQVixhzgOkG2yn7PDJeucnsyurZjr1S7Wc7UGl4RfDwuhvMTduez4DgUnRrIqYJwbPJ6r1vlhm2c3PbJQZSDDyeWyeKtggfBx3+CV98tIpkl14HaARLd9yYPCFk385fnETqXI4AVkwWNzzsBCFbJEA2ftaDYozidsusLmuXXdjOK+3aqu6CMzmnbnP6w13VHxgA1Gh+jFVZJ23KnvrMmJHnJP+tXSLTh+KoiJBxYocAaBcK7h+NbMXCoSqjNq8fOABszflFnskREkIwr6RqZc50bSHq9G1INN9tOE8O2HNbSagE9tBKF55AHhEaQ2lSZGa6ZWhharo7zXcNFz3Y4xcCAcqmVWRtl2qVYYMPW3HQbXUsod5bS7YTxh0OYJ46YnoC1lEFqWqITbEqDORJ07Hn0yaBH2NugouL0llgEFwDbWpry3q1hCxTVUB4sO0i3tbRJbSjBsGgr7cBeqK4qK4mLGG8Y3Xxb7iuSPlF3Jf5YBHFHOxyj1KqBkZT6VCyOW05r86pbeYK0sE+oGvBsU8706I4x58Poibh26s8Lt/HI9IBKTR9hp9b59VKipqvnqy/3xWBsokfr7n2fL6O8NxV1MYUHDrxLWrsUaZZoR9eq+Tn8szkQySrQ0griUdFmQodCo7T7ZwdgzYOuWBvBYx/tBHPptyuuXwmQ1xBJKVE43fVVhOoy8d95GcrRcnaxFNO/3lPT8yyd2w0xsoxotmN+nBjRsNdRIn5rVvhQGhkjcBwFQNsEaMp1Pau7r6ZELlNmJ0RcobPS5wf6OXWliSdN2kduzFJ7jVXsa1ZAPk6HYNwGRaqVXA9E6MoMevitOgoxnBhbJAkjlN6dtlm6tfFZUDQvw7DPwsKq4g/TGecAPFpzKBNFDlOV5uc1A9jg+yHROxOMo6CX7InuSBzqrMAuuiEMZviNIddxCK5EaLhe6dVg2sJcVcn9/RifkVIvBnn4fNhTACHTI85LFzjtBkWuhDXjG5GIAAt0b+OeErY8Rv1VUsQL9rieSHV7v/R018iUHA37CY98+wrVSEvZKsZBTM73IkBVempQg0DayKwXB61fWzgIU+PJGreOTbcUsChtRhW/WStDlraqhQqp8G2K3maTPWTfbf6R6hECYUoLq/p/+avcISm5Qy5tt1tQAgRcqpBH9Q+LG2gmu4rYpZLlK7BoF6Wnbs6tuez6g65ifGhwGTnkfSIqTbyhq5AscVuPj1Kh7yOgiRPUu5TWwadH9Z99WfDmHK0ojK5EAvWLJQYQLwGV2QTBt2EAbAFbTCS2CAlg7+9J13U4qCTwv8rfva+DMD6rfbZvBVYg4pNqo133NX61yPeAX761twRBPhxdCaKtwMCj9OSVo6z/uwkfBqF73QAMYBzslxwKqQSJGP8QK04ImX66DWVMcYp7urmAej/cmT4b+ygfdYQoAwhCZ0Df4ArySsBAdM3MuKFRTAoe4HxHa4myvaUZzpz54Scm996bEz5y9PrvgjaJJVaYv4nyaC3Td6hP7binOSr0GgbpcaKJGcWnCMbbVCoWClpw0dgA9NeNBs7z4GtGtcNBZQmafx0z7yL/QNIkCz75Eps/RsIY/vfjmUQDnLuihVPz7SkcwiopznkAn7CdnUMBRw1Vhlcn1f79vllQY1fLopoWu9mwvL/1lCZ0ufWz0Bdw7aNarMI7KLNdCRfJ9+mHpNpSD34kO9SFzUMTpPQxDs2v03W+NdJY+ykqzQaS8xMxbaTDljxu618Nxlwt9XLRAloXPJsVlK+P2OrbhfA7KDdruXUXra1TH2YYxRO+C3H7Zt14C+kSDMHm5QDA2pVxd6LyybyGe3i9uon69FgyFZ425m6jRXMjtKqBQHrmgo343x3PPitYjXssh/6D3Whse8upcWUyjksUXrWEu5u1q7sDbAYpKUzIJ5TFni/xoVC1UkW6Py/wxYcvFA7hCZi3s5HLH/42W1IGUv1F+Q9bSUykeOrmH3mu21Jfp/UxeOpo0VQyWDtrRx+wB4RqJI+CO6NLk5xXZpXVdUi1Cca1JZzVKccpIreFsx4v00a3qiNO00p1HDZ7WZG5HgiYEwO8FpaDzhrWO/n8u/3w4lzGvcKPLuWMHaaptLjdkbn1MqI9vt0mbEgAFkgZ07S2ENZPbDCyjsoVj29rXd0btLRqclF6K7nieEkHYIiC2y9mR2DNw6V1jZ1veznQZiUT5E7mNPpdQxI42hVZdn9tIkUFULL8E/onz7kGVA5q826qL2l91JNl/Ojaqg599FXJHA9c5oasLIlfl/8zOBN3aHu2wSzWWP+dZf8BVqC8AEOCB0toSHXTksWBP3q6w69plv2s62flYyfllHNPDu5pE8SRFySgOeQzIYU4Drl3TW5grUwGvPMzXkU+39xz0LXXmnkhC7S/GHCjMDcEurVGtzMs/FRYAHOyl1jRHRAfI+OWaPOFeTmQydSgWhz8bY4E8+PCkJGpPmK0/chhku5pq0BdLjncAng2bBkQ8LBqXmkPx2ZqMJBRMCvH5C7ZoOfew5oqpMRPkZZFqlEZdBdB0Qz59hzIAfU1ZP+Wfh56wOCuncb/XvL70WVURfNom0wf4/xrnBALaIeNnG3+T9QJBeyz9kPFbtd8+CNO5drhkJGT1iUqvRMeYGPqHKM+RA3myAhkyR5+7HMYbfZPmItoZuCW6pNv3tlifukhxP9difUGYmB53xJz8XqAogjL3QQRxMd4mTWlYNhxCk9DmAyDxxIGqU/nVBPUnr5NOdnxL3SjO5OSi+x5+pOTjiX4/IyeVastuFC8ouFzIkRuvzqQWBPrvtjlzLsqATdu8/d/p9uZabL85DejdAS486VFGi+UL6ekrpT5q2ERa4XMStzJEfcYiBxw8hAOmREUqITcHq7H0sfFlAgH1DdAHEXim3YJ07qVI8Km34df5HMG5oSXXjUyQRBF9jftQE9TlK0Axuc3PL/H7wfy3IQqrxUzJFGVMWqJvkH/NzkCb96OFfHlkzSkv3VYHPh+Sd5Dczp0TPp0tnWcz5L8sxpGVPiuw4KCKTm56JqFdbd3FXxhPyej+hkYIrivEeQmYUhXj4UAo2XmNuNFstigeOyVKEvimsKtDr/ZoZqyARa2d6Ht0dHsx2alrZMXx/x0uSdwmnEkcYCwZucTAZ94ZBnwf43rQF4H3LuZQkiJyzDMucy3RP9HWevBrYTEWTXxt7/ShDnSR1V165AfHzXX/LuVLeTlJAmoSmXARr3+ebUJtw0Pbs6g/4L0Bb9OgtEN8DkqeqYewiONXxIUctKXerzFVkEgGk4Zn1xrNq4heHMRHtUfK4CFxJ2VgQgl9DDH2a75MqvMRgvgoh7V1chG3vp4issRbaI7Z2tb4QqSfu94p8489ueXPsaJBCQjwmRrn2whYxiPSIwVuG/gxe/RsRrKmLdlJjXvHsirUV4upx1Sgq9CniKwnLWUROzjeyMH8obOA04HnsQA30H/jcZ8mdyUhtIHbPKWAxLtVIOLVsKxKSrGgKdteyvlzf/SAohaoH7fYfEWzCj6KRbUcJ/LbcmwRsbIT38rsnN9NwLPkXBqwf2aiDMXduS5Y3Z4sB3izR4PWxnr2QjKlnLhehOnAD7tkOm4Co2tUoSZihwdL5RcbnfJd3M/ux6O58DcQXBS2DOZSkWqeUPgWnj6ayRlosTta6MM9inGAwyv6rMrPNXcEE79oPuxPq/IrEgekCkasnqxeJO699o2BDsexy27ack1g7/6t/qxyMWPh9ya7KShIS2+fflPexb6sM2QB6mUXBOS58nCK3rNwDf7ZJNn8CrfdDlF0IVHYmy/DoW0ZvJdYwMx1BXeeJBaCiuS7x+RRdf8yIRuuT9TEq4NIseK1/uTZT8pkcn2T7Hmsov5uaDtgcDcjCmBum689kdwxMD9FMr7YUTgttF+Ze3LcEZNDs5o7CA8fygCXhOOgpBU7qeIKLXxTQKmC++ZXvPLQWH5qc79V+p7NWH4BWZSo2MvaLSxL77Ee4PN5w8dwDEhczUntfiBNwVxb37gnSaF0XhqK8Z3LeEFn1pdmvMneEMIeF7e1HXGtBO7cGgGNPZjdpKG+JA1Rdnj0Ij2j89Dyc+K7dzLHlrl9L6ysmLkQRWGi700NaHX8uQfbli2eNpQyApmaMmwIvG+rmndhjjWSFtQP1Ataxmko+g7tRCVJuq1FDbZbnE9L1h4Wd+S5aBGYkO/os1HsCxXLyuTUlV8rsY1IMB4X1TtjvKZzMbBHf/YwC9Qj5Rh+P2d8Swc0Ma8WlsRCBme42HdoSLQ/OBta/yf89qPtHi8BmwW4qijggtj4QYESmM2w9qziZzhGgwOR4rPXSEXIE27gZDRnnBeYydC9n9TG2vThgUzg2LHfEqucmDRe6H9kfK5iIWrpMNAnA8ryOfAyR+i53Ui+J4iJDlngMoifvEUe+wOxrDpagPUIm11NhEsue1og36jRQtlbYHCCdD5uOC+CZcEclnup2ifORrojROfMcqNWr+pPuSRgUhajeYIFXpB9ifJGU+4ilwsSWU9sQEgqD8GBOD66Jddurh3gNtoe4v5qt84Yt+SYBwPRXTHS8B2K2pqmtfmI0MdWt1m1hPntRf8eE0ZKyN4qLHNw7AU0lgvSoO4WPlXIHABC4rcfSQSXz7pxg5ZDZF76SVRzH/5QIgCp7BP5DRYLXT7wvaL0oVoMXK+uGp6rJWpy9vNC0E4XjcHPt6pKy5KZcTS2xiayQnwPxLp0zUcaFliTx0A42Q29STqRLNRZKubX55qrlrC60U0jQhneGkyGiY0rveNTu6ndUq1sb7odND+rCBptzdKE/5UZVicXNWp9mN0vO/EZwv/wwDWQhvqvqv1kVjkYB/oI2zzFSCOH0n1C4oxLVxEl7gMKGNXAwdMz7IbjBotWbgLU9Wmwes18oBbwpUzW144iaCZMryL+R9wqf+tzr4ay1TzfuvKSaN3GOP7u3bo0yOFN123fOfn4HjyMZ13iiMDqLaywYbxwnqI7NQxby6XuljWSgVzp5+ncVK7t0PH60C6vRbroRMYQphrw6nZYUVXiLnmVPW0Hh9LKEfoE1ynMDs91CygJ2b7mrO2BrHJYHHWT8OVpDe5eZejAHNgJjYZh2iKIUhVzI1w3JdUvrsJ+oz2inONY1Xhw/pLgrPPs5qRXkX24vEkv8Y0I9XkahwvJzikMQGGhCtPPI44ubNTY71fiNZSQLOghzwdaamfOG1LOlxMW61b/nk+gAAmssvFGtFK1E1/aywq+WfHrmiszf92offSrXWYNuXj4RbgMuiwLilzz98/4B++xsBk5uPiOXbkYiK6I2eG2+jl3kdh3kUqsaLYXYbdRx472p2/VAsnHLuM0Nd+nnCHsCe/zCsShiHE42HKLTkxYoCvkkqK1Gbjhb6yAGC9gPpFMcGSfbaxn4wcCeZMpaDM2knX0hlf7liaufMlad+EJfIH2U1aQ91vY5vSfZAfX2O9Z4eetltUhI5m1Vws+fNNHync65F//En/9FHqfjI1WMh3wxCtOssNZjIjpbkKc5RuUpnurMm3bJjBsJWp42ss5pYNLYvj3p4+eVEgsXUSo/UuDf31dp505FzWqnsasHaxpTXsXUtbObLnjR4368lDpVE1Rdu8+dVX5bzERO8xhd4m2RBcuQ6sXnMelTCt6sl6HAHZxxS+MZjHi0zPY8lABtRXfby0cxU3EFBfcRT7Ejv5j031ztQPAXwBBpUHLNm/vPnQm+4oZQ3Ta9mxpcw58+7hS4Xu04hQjgcNRqwmV7qlSzx93HaFOC1A1Y+/b0BPQK32Shvf+BZCPPWpSSvKsPwqCMYqpdRBVXlQcGU0gr8s4C12VBhC2SGBsPJiPbyul5ipFb/gjKjPIDSu2PnuEybbifb52SDggm6An5aU4GoOvZtNhJC8zGc/EsmAYZLzkQpVwP875bBKmDdwydYdxOvkPZbvGpevFMRnm765hdZCMU0aTEzAsAeONXxErPWhs9tii4nYzAzlWKFk8c6cCh+i3OA579xDJR1+VosLXkmfLk0aLZRzRoQE9PTRUHsXpCwOb88CB4CT+xkj3BfuFrro7X35ViWOVNNa69fh6IxELpfQ/8dNegM8ns6nm/sbUG8zwEpj8bkSu3/5fe6iSH1OaLV/MsPPYbXDtQBuH7lj0LNDNVTh5XfrJKWOr9kG2Jg1/XwXBZjPIIGQ3YUSncW1/IdCFgya64dMrYQ9PFk9wMnkkTJIrhtL9OGEG3Ku5VQT3e3R8XHrVZdQf2NApMQx+4s8+UoQtRIzW4wJ3X3A6k53Pu4aY80hApE43dTA+c382cAg7/JztoO5Unkatjn0N/8hAwvdNlmHDXc1asI2kU+vgsfFHC2H7r+NLGONKv4Ub/oN3mksfuzRUVTSpBLBqPfGPDhkyDG8GZQ4zhoQD8vYPfapGN+PURJyxhABNcnKnXLfJG9CL+sH+NVZGAKksEeuiAB45HecH/EqhuXqRe3ddahHeFwprMQO0nz63ttweVnKWYmPKbuWNKyYu+n91Tl2o3voguzqBCdmYFAWRb8v8HS/fvnqNsOQVXxmT2VSj3mKcyOBok8gKc8nBowiCVNyeSAGQ9K/0Qa5ZJFuinOQGybb271TCf838o0hn+gEaTeyCZOvtTBg0YFrXvBvpZNykM1GqtMWnfrydY2viD4EhtIF8KGrFw0vavbh7stqLxVzmdVLLACZRU451MCpzWgyv6Bll0uPjCt+U2QyhhlfWqbkLIxboshblxLPNGovtrMmPAEHI7PdpV7CwXCwqxEPRX0OObOp30UsU4YAG34sfYhrw/JU4m3hP6rGdJic+nVr7OH0/7QCJki+3nY8Bxb91s0LfH+SkhnNtcOor3YznKlyMVCZ/6GuvFBeRa4z+eGzdgsr9aPICVmsL7Es/Me1Hxp1kdHPuuZkBNb5b4I7a482Cw2OEqgMpc/fgJLcMkG594ff0CoXHFTbYI1r/OoKQq7SXAN/IfL7DaSZZRJll6S5uLhK3BVg3EBayZMP7+FQPO14FVAg90TtZ4ytSufMkOuhF9gWwvvcperAdymZSoqA8fyfZAk69fuhE6h+RP4eF4GdhaCMNt8wj1SLQusH2Pg62zgYNcS9PGkv4RnbGm/kaS9CYmS6XHVHBrz0rgzjsVvYVJAYlD9AZCyYoH/7RBcX1zmBzUXfz4Qp6eU1OAv3BwX87ER0taXUGMpYsrKkrgMKjedBvp3zbR4jY0JQgMXhalKIaHKYmtbxStxMCJY9BhdCULQCWr+lcevBLJxNheBKyxIH6L0Bw1JPwuQSJNbambCYEr9R20SqUNTwI/m/jjz7s8kDMog3sGKP6IeBnhw9s63VPcDxFtRHS9tkLaYT3xt2jfTdT14tJrNlu8C4t30pIKxT2LmbwaGpMXO6ZMNaS1rh4Jrm6VIOv+577KHDudn6D84LVXU2gsq9z2oRpNFx0IqryzV0QN2UvCQ6AApFooHhbohLVIfsbtU2nkxG/P6AzcXnupsMZmcgDjPCCCnIwRSkFI826dFvY9icemSrvD6NpbdTgbbbpHzvKp85ECO6lE2SnjItn/LkqSB+63n7vHTe3ReeYqRdoPbz+LVv1hKNwvEFMtaLbcugdpxCNOaqpU9CoQuKtF2RZCKY35Ma0ZJRy8Ec5auzwxRaVb29ymMuZKKJX/75IhpZlAqi2eQg6ZePwQY9xedK6QlfHWdveE65Engu21Lq9PjGOEArxuq2ASz5aXGYlOFyT45pClguSWDsAKxbjWFDVp02nFyV1MLVYvUHWWJ4NaE1K1wIvPBopOzLLa17/xbzA/BPu40g/HY4LcpbRm5O77nfgd4FlJv4NnhwrWPecYTfUKvykyYrEUxQmtnI7ZN5PsOsuTMdVIc0RqLKc2LyUiD85F3A+CHWr14viGb38NEJEszhx8IBKQT/06wSJGiat1ebkg8o10i+HkUrd5GHIe//tGIHMTQecxWr0hEy938iDo3Ad4jOQ7A7EhX88iZDYVUQxsMKNC5y9bPQsFYWCOg0r5KxOxgSXitClSy7Sd2IK6wh/UCc7r/+lqT4y3jlkrL/uscDPVOlMKbDbp5alUgXowmztPQ2QtJQO/Rgr8omjDvxC7LMFf68+2eNpPz9PQ1BdY/Cox0S6///ZUffOZxYxnq5hItNrXcY6M31zzpxcK1lXf3batBPaVOADPPcvo/JrxflhCfXGDEzoKcjz6zzW6tqPRoCTibYHk9t/WMibQvzvuvNRGqyOKryLWDE6WOdzBQrAQfQAJK4DSsNTbQS2SUAOAzYy4qLj6T5l5GDog7NKgJlSGG4EaSI1czgXDzWcdoFMIjGrDMZdcduIQ7OaJCWw5Zw+jrXGzGzHoXTGS8qk+Hdv0UhRdYvjRImy5eKbsCG5TDFw7WuruRioCkXwPnWORVxy+SrMeH4cQ/U0yQBh2yMy2FbmEO74KYYZhCgo/BEJSTnZZKsC5YmbCKepmE8JqPkyk7TrDBG/SY9+MZEj/Sxj0xmmhh3f0MLlb4fBtr0epTfG9YCw9hra5ZJNcaC8QySQwfohzU0FSMM/NWE7VOxSAqATZWCxyc7M+GWXgIZoLwln9eQRZGj/zICgxGzMscKYFqhkqR4UhywdqvF9feD2ohdC9zG7gyM6RsDRag5PWuqM4/sNAR9oABKXQKv+3h+pXu7prQomM65arkHX27U7nbvqRyzNsl9pSarg83Wkn5Y58TlXO+wTxjz4RamhQmQRsoDgNO+Wfc1P56icUy1FAKrD1G42jQwB38VGrB1dSNK+oQtCouWArwTLvty26zgL2I4y/NjAeu+cv4O0aCkBTcshB+QKRXIECnMv8g/43Combl1FQt0sIEfK6Zspz1elbSrXc7H5xKsfCruwkuwQNsiRQIF4fMfadHfuvD6OFgMhZ2G9WHAj5UUqdpbaB8r86mQVWKdnTymRS6bG9rWZGorvfBzfk/azdt7P1xYsA6zKnXrhP4b5OeRdRktMU/TJRCiUPmXF2PpiMSuCPtyBHK8hdzZRF4eTFc4hlTpluhCnGVqWbAVifJ03V+qhgpWBDzUykH3VEASWDxBpHGvd+2x8ipdlgPqAy2xw45XT7ZakYCF13A2bBRg492TiOMtr7bpH2tV/OYJXAqwleuYiln5Tdi/h3sufg0b7EIxmeX4m8ocLWgvoh1iMhHVogxKgh0209o/Fr6T2v6ML+YZ21M1J+HJzWBj/smGHWT0BBEXbGdH8yrMIxnSN0rWXZ8AY5VwAq8Bkc4hWYFWDcI8ZsS074pkrYX6zTaXRUAFJYiBh07HDdFrmCikEwpd6snsmX1pJ90/b+8/2sM4tbbzhG+uzb7NhfYv/3lP29DITXp5lmbDU66TEjQUSJ0a36tv8pLYm+pw3gKJ2rzT5Se/zQjrLw74EGTq/kF9e8bzMQviBlIfQE5x/ul+FoqZFeis9VUItiEu8xMjpseWJUwoaHyF6hsc2niTJkdf/6Ye4zzQA9iNT8NngxwmjBzxSXQi5cIeC1vIHag1VzHqo1qrx5MS1Cwe3UJwxXCBrepFzQhkUeu/Nk6OlGxvOUo0rG1S4n5RmXmkNPde3Cs40Q6r1lWhLZziE5KOpTD1lL7ljxF2GoNs2cZqaM+sRYZMTdzbHom8M7xEvwtvXB3bSJYR5UwnfSzfb/CU5z8mXwGgPsJS3j8lPoiZovFOBr6BRBLviQikVcwk/Jf8Il2ZsGOqIlQF2n6BG7mYi+fP0UvYQiVGDFTmtQIipzIs+cAVJBuhuSw6JOvRS0nyQLmhtoWwQZmSOpDi34Tv7t5een9MTrfDYUD9rA00eeB6oLsyXNOFXbn5VuBuk5p10b75lSGLDtlnJidI+rHHCZu4NxjHvsR+XIVBy9l/wtapv+EqUz7pF870iZZ6Q7In3jxnCQOtv1/6WLbCKPS76jDR6r3L2C5maVwECtqdrgPdq9u6JyR9S5PpM/tLdfWZiQSyfwzpAb/J8zbVok4KYk2mcCynkWGv45n4MvcYJ7ZNv05WnNSjaKzSeBm46dL1ny1d17gbRMM2leI2OWkOuXMRBoHEPv6oitr2F0drt3l22btLNLUBpiIhSgEXPdvNjyBJ1hhEu9UXlYP3XaJLnWtklNp8SbEayfqieVTkK078rl3VD+txrjH7TTpF0YQJggU6jnAHPmSNJXiawatg5tO29VVT7+vyccv60sQ8iOjSyTjx3T8EZDq028CAF4bhzpqOPz4YwLiSpFXRjB46VuDCzu6hB+qZr6wQQ1g3QSQ6GCPVu739tn3zNkkQkAp7OSTYDf5S+0QT1MhCVTrjo2WbsS7z4yW5ZaWclIzqRRpDSu7MFT0Pn3MywwsyuJuMrgTsz+IxtNId+qcyBWNEEO7ohG6JV0ntKHnpHyQ20XS9uWBGvuZ1SkFVb7EdmzGLhNxrWfR0PELfNS7/fwdajB8E4xJPZyI3vp1YkYUQC6Rnl0VZsqVMAGYBQTJtAeHB67SiFxiogAxJ7K0W/bez5AUKIm19Pubni04f/F4uqqnva4EUMLFH8g5krHyWHf7vS7X3hJY42AeUKaWXmUL8suxmKugd5X6WkejTkHthPsTWBd3fr0iJZPB9QO2ZHiipfZvJ0XqWY272M9ZWkRSWsWmtkfB2+SR8EDRWBE1oAFayu1tlvNHo2gm9YPzcdIZzq5Dpy8Hmhmt8zfBpjV/Ix3lb9alcByLmNPm9PeoWYR1OALih+BEEtFpIjIRNKbxHatL9AZFcFDEXM8cDL6gWocv8BSQyu07eETBH0iQ44ssiHESHgNCRguh0IKTvu20LWIuHIGgJJSq9ObWZFYTGZS6gqG+3cyOltdG41aVwqjHvd2G5nxxASjf4LxtCOYqhQipY/b9vfGsvHw3UvmsXRUyCSKgbL3l61rRR/eGgdxCz1h5bs01f4vN5ThXN2WFuniKNPgYQggGFEzZ/ZI0F96iNClrVCVWq2Lg+UjtD2r0HfK1TT+2E6DUoARLKEEWjPi9oN9P62ArN/Z8CQxJVQlq25xk6654/fxDimJLJhUqjkzzJWP3worSKDCmhPOVW8LIXRW9NqC9BU/Qr9hZgGyxnGa3vzzL3Ok/JQLR2ASBpEwIPDqHDAjtmN2bm3X7sVIddS0ax5JVrNl7DSQZ0rrZsDgfnLuxZnaxzVUg3aSQHcn1B5DQKJDf688QY932brmnxybYmbzipezvIyw4o4UQk8Vy7KPxxtXJuZjp1asbT2lVCjLa3YZyI9GJBD1pDkJ2O0HEtxCqhV94gVWPcWDCfvEbG0u/W9I/3Ovy4jtVmukl9cx6L5o7WjQlVjqeuLxoBUBf01mM2z5wMV33Gxb3JsiDH4d1FpnTdXr3MN8j4wvVTnVw5f2xmAjU4A9+LEGv0ZaDMYG1fTN7nRBq83j6QCSMYuxP4LfH6ld2TusI+JYUoGM4WtpKTdm49WdjrksbpmXrGf7u/58lzkjfdfUhWWMeFzWbFc3F8+ssAv5pkQ7Fv6xQf4zegJRvSRW8Gw4C1PAsq91n8xGguNcouYMZozY2xPEzFMOL+HTFWxFZadgxYpqds7u/6iSnat1DwXp6y8qFQ08NA5AYTWamlmJ5/GlBlY7F3/J+CSSekiKm321jWiOc82rFP1J0UJeTz/gVX3dwpVivwEGZejclPYjJxXagmp4Jz9oMIOspFf1DxKJrMb1HN8pGPJ4pB8ZxGsC1H1LCaKlRREPnMCrVehawd6/qe+99Q+Z81FjUbIlqTNsV6WeR9rQyncExFsIX2qcdYgwTvf2REoRNH+/A2i4VE5e6DQX9xG2R/Isk1sRKNk7bLP67ROONvPGkapWJZXi4bP/fPBCAXN4xVpHy4Iq8260WRrqSVaiaAAn3S5SkTnW5PkDAD6ANGVPqDswWT4LcT1+UNYbGvvKwvpRcy2b3bGhdQLXLkCYYCMCFkWZSDg7ZojsLyf/oRfK62wd4/rN2bcXjmk7WuGHwnQwhxM5cm+JQtEfFVYg49abxjoRm6W9rwHPNhauxdZ4Z44X8igGu4RBx4bft8KcdPbJqVPVphbAlOM4Bmq4qAP1ym8ruGTSrur4rDCNKIG+IAGOoWgVHrQjjrFXWUgckgvaCuN8oiXCongWYe5E6wIHTGkDm9MQ2IwIdJM9ZxV1jYpjtwZuDd7tWvTzTF5P2JtyQWjrDS/amIFfPuT34tQV3HORzmWt6OiU2hlOkU84o+9uEAvLQKKqv9tnF271hwLxN9PIx5ENPHWestcOuXE45DoGG1ULQ2W0XdZjI79LtfJaKh/qeoq59t4dtlficnMO39CD+lhDyZPIG+j1GdjM0iGyDLTIRKTPoXDdp1x4X1NjgUltBpDJUNn8JZSu0DdDdxM+BmoS1v1QhbJLPEDuBWGsr7wul9YhK76jBtl/VOIN/q4TWX2/ioTyxe7PWLUM41hVZVQ1xVNDyufhPOavzLLS4oCZAnyrkz9Ffw9HD2QnqcypbQvN1btiGxmNl1CoVBKtJMMBdE5YnCYxu1UKjLaSIlAY0OQ/wfPP/LDIzkVXsG1n1Hmi3y8j6sGGdX+8V+tCIHFPZMfpCDvXOAgeiLZImB4w4++pXc0xLZCA0mp/AJKw/tiI1pN6OL66xGh+kc69jOu9d6w+z/lSSTyfNCZtSxsU1BQISiZOTgSTsy8LbD3TWa1BrA0J5hmgG3UhWbn5BYsWcB46p0eVpY5MNgkjNiE86Il+/ZX2V2wvgud3yZn9rfYdI7/y/Qwek+QUnB5oyqlWhVcQBpIAKaIXWUmgqu0aHz1wXlGmNl4jl7Ht70RzyknY2NNNcbWRMVzz28ILZ8qqfiT3Xtq2KraG5jdU71Ti3UtcOfWImHwgUsEfw8e+mOm4eHbv8rwpCAjrDsViX1MqabfJ7rvFKW4z38ZTixKNsAsFKy7QPUxmwfrFEQD7eGGARJFtcCs+/WpqwEw44Ld8Jhr8WsdaCIL3CgdMgHiQuxb4lP3rdEtMEn5nfj0WoiJ09d1ghqOYth12hOeEE7ulmtVjbTaBZUKbApK4Fh7Vm2Bf5BwgJyY1Fobn57ha1v5fZ8Aj5C4MjyKJGZoBhWf+XlRimTW/4JZdB5cwxWuyhvvqRmmhp7fOzOwotoqNB3KjVKfB3UzA7TeNPiDXjg6qtss2Sg5cWgXO0LETE9iQ4lT9yc3r9ccmX4WoIACuyd8K8+MTiac1M5xKIwvOcNflU/xlGmtB/ZkPre0SUAfHteXaMfyBC360nv3rMo2tXdQqiq9UpKfSzkjCXfqm20e1G9gZlAYSxvv6uRHRwWqz9yf265jmhowNdbEizIuglze7tfCRLdmNUDzSKLMYNfJWSy4EyVXvfSz0BaszcWL2n+NrgGJFlkQVSOSCvM3q0TWVH9vDkgmJvevgJV3pbjfMU1W9xRWvy53epzgWMfbdr7oK8JDZsqV6GAoF26KOK7G7KEwqOo7yDlKz0w0adRLS+evFvHH5FdXep/zFxeC/MPU3zhHM5sV5Lmt0PE0mg6UsMw8g14ZB6fseJm86oPKIaEZxkcQ9PH4kuiSaOPGGZorDeVdsVQiAmo4HkxcDQeOxdgi4tH7tyy4kq6hq6oIbvF0g+juEV9aSKsAajSoS/S4bby8mqCfyHNZUuYuw3buuETToWTkAxT9io4b9l5e1b70gpNtgaqFfJ6u81MI2LUwQYGFznA64F/lznAQbjE4pKszIJOh9NT5LYZYhkfCh0lLB4YVWaccNpfOLBpHvaUbywt5796fx4Y+46ZKE+G7nJFjn4YgoGVjU2Pcf9pduOR1WZ25lED3xMREK6mDo5qUxLzKhdMWvYob+lhAv8oYu5oDqvM7399xVJ+EW0avbNoLglhTRMBhLZQRgr6ulbPRwIwoP47BWifBjINnaHJmOXm2eXtvSBLY4XwgFT887ocXCFlT3Df3yVWlXm6ezBfFyh9VhBewG++7AZ/w3S4jic64b/7pCc36mod5LMlOc477szEI3xsg1/egqy5il3yJoewS3TMcJ96QrhMc/K5/cevWzm214oMgR4NVyGQsWtmO09rPpc8BTXyMU9RNAwxUKgGvFzIEsXR/l14KofYfbLZXYVz5xIadD7NSeuQJAVWlZsRqLYRUkZo6YT1UClEGfZe3k6zUO6hWm85k5PDRXUuf7QOepYXxVA7yPAu9agzk4yF9CLJ6iW56t3MqyhJTAVyRvMTy6QzWKu6/K3z8qBVWzPY2ckJ/vhGvm+eMJzLa2qxp5obPqXQdV/JsqmvkGUX9hS17vXPDZFnZVFfoH2sKj09hl+D4A15m/6vdpf2cCAMQLuEV+nl5ASnzArucoAvaTQSORGLkDdfCapZ4icSww2Szn+w7UWygNUfijxhETJaFb5lt00KHNtCAhknd+EYvzxZbZ563QOs3PiXUfFmUPCQdffPybHWQjJSGLIWCU9IQ+VQWQ+pk6Y8aYFKW2KM5wkipZiMiMvuHdQxiuDpWRqWZR5TOPOaeU2b4Kid7BAud69G+Vu8+LxTs/4HZ/H9dNz1ON6aHQ344O1f7qEvPNhQxqLNbO7H1lAeQCEdsgHctcTxhQ9zpjv6QvYeD7LRbVBg1iDFhH6C4LzBgKUCRbGbpb2BIjwn3+G51GJpDxQ1+TYe5YnG3mr1GbgkkB0/j+y/46xYlPiRRwp/Cos2vLs7ovWvNR0+2It29pJ9ft0kktX/+E2tIO+kyGDDm6vNFJeiegv44Y+3XfAT6BMG6GIkYOJ6gmepYnmG49ntCkGuHERS25cvuunk5jcA2X/8BJ30x7ZnIWN31a+pXICiUbdTtUT5EeMHbii5KEL0HQ7/IqIPIyqo4SWhZNw1x9q5P290efZd2MD1x1xkARpk9krAnNDOnnS5QUikYSRiPQbwpbTdwLIVJfzaCpduIzYtLPcSsmwiaU8KxIzI6ekz0Oyqj6hzH1EVxXX1a3s7/4h9O+LZ0q7VgA2d7mAEykv3FWO1FTEsRukqUSiE1RhdXB6MVRM5b943rteB46lMHvuBeoeWf6hEUCHRA5sHqYeL3B4SBjgzk4tAtcCN5WkNno2b9VFB76J2joCYjx3ZcD6G3RzF1B6tr8bz+N2D7HuhHMQ2D/jjTqNPEsodxLM03NOWVpYWJXQ9PeJTbPqOkQi3HCVWSDmBH8W1nJOyP8Hq6VqCmF9gcXcSRiaIi8mutL2hByubzMrcNy5kLRwWbZE2YFSqFe7xqOSSH8gYkmyStmv/aQf0S1nrzQliKqhZCehgKaXNFQaqZOPQvCYVhvRIHf1zEECphJBZcNTn59YN3gVosMGzwVBgjpwRkTyxoHE/O/UTdsi86PVEeKIply3R+cdvrJBUOG768z61vsjAuOt3aunNoTDVRe7isuzZ2KCFWGe8vOCuOH4O7hzBuGLA2bX8FWGgum6FJoyYDgQKpYfQNEjSI52ggaLY4PZoBEXIhq393dG/wog4vo6YhoZcenRiXIi5573zScW2iCZW+fmKvyablOui4iwAe2gaUg8CafT08j1SBvPHuUPikt5g/028XPLn+S7xYAW5UOFKm59Gz4QYYH4QzL9J2yeCUPDfGLA2ItxxQ7fP99X0ZGonK/VM96HkQ9ri+G8e/i6b9Gq+fIiBsXqI+2Vn+tqf0yNO8Y5ak506jUzSEseEudMINe82GxqjQN9yvIpEA/LD293AprcClHqtySQV5FTuXv5oTd+KmjkEGr1W4/VgLlTSym1FekIuSc2hclMXmgX1Vo9WLc9V9g8j8ZC63I+im9LKuk1Li5sFvLeBvPa2NbGwUwoeatYDU94SOi4tgczsBYBubTWQp90pi6RF6DeYcoo5oXryVuH5U0pW4WmtAVhKldypcRLAeybyFbUQgsieU6tEafZ9Kgg4aCD9ohAtpBPz7Wvgdea9XonechX6aAZi1h1BXLG2xl+z20z4YD4fAZcgxgsQoiqnlifcVDzY9GK144sAk4JdoSa1y9rBgo1dsB6fhfZeqniLdG5XDIQkizbt0uFDnUlbd8CKQBfzmhU+R+B2XfEwIfRDxqnhoKfopHROTXuFjk9KoChKBmPvauen+wCDx9/FBr6Exv3W2rDxeePbxiUXWHt0Kfy3kmomqB18rGlMHFgTaGwKWxWazqBAqUeeZnhYZjHFzWysC5JcHUC/0otC1sod+pCaj6BOFaCNmXB8UwSMN969UE3O9OmJcij75bmbf0AJm76MjaLNxc/VXB8F6rEcmxAVYl1dCsul2avxpQmFiEDCkcDwS7nZdTEkU5PhyWDqDKGmubAe36sAUwf0NgZFF+CUOl2sbsqLSOEHoVV9yBOJ6OhsVSiqStcIP/+MOW8MQty9G4ZeELLM2Fo+4t0hYCkiKL3pPyLmYaWOlq8KSh81MYgnn6CxQPic3p6fibe1i6bYaspe1qRGN052rS1MlXom9LdjMRkUICrbLIW9oHs7x/Q2QCWQ3VkaLYdFbGxcP8YnIQ5z1GFj/4RjzvEpLFl5B/08fJ0czNowpQ4lJ8eaH0q/XbK12JjVOK88qHk8evSeuwv2/ohAVHX2/U+Z+1pBwtvcYWUolrPHaHV8KsHaVv3T4NK+qBzKAH75KYWqlU/3OZM+E32AS+a+am9SsxS8RfNch6+8UTMGk2q7qcE4Fk3ASAtxVSSiObPJuVqsJbBSr+jfHhB27HAPMm/vNBkGPwCveVoAVBBymIE2UFLOfZdA1J1hFJZaEEQsWt51Ec96XeVdYUfIEKYEz13Bga7DymSInImL5nVe4ol5UL3D+X2VrSWVLpdtH1tOqDVSWbm7CNBcq3TJ8f9UPTDWC29G50/ymMTuIYDxIKdWJ0giDdd4GQkPruCwY7GCyXDTlcuYQrh3r7q38G4aM8aUdIqQ5TvJh67ZKOldGc4K9HaEptMYDhVmTTobXsKTCa6B4WgiCbZhDL/VChOEPIMX4NMCwz53nJWCWNfV8nOO856RlM1gOVcCFz0Ehxt5aeld4VNnypbOvdl6J8vao3ue2ooh1fN2P3SriQEplBYkHhrpv6rRmbjAej7yUclYmyahBsFCvh7t5xwO6Wm/L9A0amAqiRJzj9IPodFEmcbqaDxFyUX1/fH8oWJT2cZEjvgrcFt+Eej2BEyn8bPvud4vYOrH5zsGJ9qg4a4UhQs3S0ReiS3lV3e+PgrF0sbZu3XwxgUeJEz7UI9rrb5cH6KWsC/4p6DgfLXEk04lKc67++WX/lmglQkc/CiXfM9KnGT47JkRsb7ai7Os2QsMhhEbxEH5US9EurqxH53JJuB1uOSWlDXMz5sqa3avVhLV5LvXOmaYOJAcBy7WQ0radV3allHlojw25FyZXuAZ46dei3nU7agY9slhujH2M+YEtJFd/O0TjFbQi+a7XmlYmMXHw9IbWuQ4NGuZYOmUc2kppBfxOCXKzgLUKjktpVTMMc3JKSYnnKV5wTY8bfU5nrk/qFdLEipYvDjz55e4+hQ+2JTq6MFcHkHafztcxtK3RY8steeHTR71Mt5brppBPmKMHs4Ou27YakycltAssiSgxKsRPKXbwqiw5pnaohOapMdtjR3AR4yBzALQf4j6e3PpGhw7Vx9QVMKwZnO7vLe6qJFDyttS3mH3cGJWmQrPfnMfWb4zf/mKwzxnhuKRRPpzShmhrWSBmf5RbI0W7eJnyWGhwT7asQB2UwZfrH812XEx5boMao65B9SFwjA587q8/ph39C/xSFmuxrvSixmfppvLlF8Tg0oaGTqKKtKesmmfnpophfQLp9dWpos2kD6mYy1xK3Wgyxmb2Li7o4Wd1UQBuEeuRokg4gSwYOuIQn0YC/fjsnnXMj6dyaIroxwM1KQA3iK6cJLtPQUQp75YhSs+bc+jzebf8fZHVNbHVXsLHiRd7ZjlbCEOBsYYjnPFcJvY8jku45U/pCTysrOLrsoi11UIXsu2RJrUs3rUs+e7HaBOth51+qfFGRbzxdD66b4AdmcVGFB6zhhwGLYKeLMwRViR1hXyG//yyArtMDPhj/IlokAS7uScEzH4OJfMs3unSDMOwlxOyzRTjP3KQ9tQXybpTjuxuWnxlNFOY4AXb/e+umltteJq8DJZJXtRp1lMEH02MW/UKsmIcEqdfi25vn+yNAhbmG7HnV7167W4ld6KWyWrA8ROdKT9nHqc2D21Se6fGN6TNji8qD9kTaCBLWIFWQDwcXj9FX/LCMj1jc38kktPPPcXgcbLJGN+C076DSlH1F8IVd/9uhzBg6zaBQcKkxjAL+XpZTTxLxOXKAPyOUSyiQwvCfSugddG8bdBzCjvr8kEGN8+Y0ndWxo+S1r5DTsXwEV63HkFGdlTb/XErGnNuy13IvBeLuCs/WWwBjBpZH2h4cZA81zDkIGhlZrO4aewkYqguBGkc3TjJJm/AmfJ83fhkG8dRnW2IISBYzuP5Jg03YnWeAicetKp2SoKMjR9kKsHI+bb7tmPft0kMQ5ix9EOQF6WC7xzrNk+Xye8yev+/uIl6jeyA72IgAAyUbvXrbKpPs+9nFX63S03YRGbwff1U7EB7hmh+BE0xrarFP0BAB7uvfabv4xFdTB1wBGWB82TIxUAV4SZtdtbVAPCHOQwBYduVZYXZZWVR9itN7xDOLbvuA/d9VdCZn7CB6rf1MUosXNQClUfFdM5VnWk53eyaGsN7k4dJJC5lwbXeoLE8H857M3UamdESINyxuwodi+/edWCBXjunfQvJ8f6fRj0czVAPVqgdRQTvKhlCMLEdZFutd0iKpkhnM6ZUsyzY+r4BgmH7Xfaj6ybqyWE9GHG8I4sEMI9nJ31PWL8GMsiGQMNaJahiAiG7V2GEyiIImYN11R4KEGdxyHNAlwrkz1aAiTA3+9EfizXESJfIvg3Mrlhu9Y58x418GNnJKHuwxeqJASUOFvFnUxh2yMNIsNiHz5dIMUUUfKPhIPZH4w7jvadDLnrhdgIuvN4WPdPnay2huhEbckxhEnmAMpTQha2IX8VKeet0e5kTXh7tCSPk/8OEe+ZXnhf4H6RE5zeP6/yaU/k14PVDKSdJO6rkyH90PLEvzihZzQbCcdNUjOd0LGPuNd5nwteLrhtQKNA9tHCTL1CTBtzJWLeU0TDhzRJUFcGz3Fi2U4eknvfvbFpE1MbnJ8bkKdChV/F7hocznarjNNPg/+k+jpPMMuTYHOBwt/jKNpgAfSQbREhzOuawVtGVrK4YiSze2OYWEJdKAR+ihU/1dole++aVahbwi8/m93uv3IUtI5R4wQTEEE8TySe5TsD51ePaz3pkibazLhdYXgIW5SCjHTU69uYAigK9T30GC3DofYsKyFv9b+Zs16+uKI6FtfV8/rZ+fsYFXvvJzUFLZl64c5K5LsSXG4B46rS5t0mO0s9cwZfEm+3bjtZOaBwnsXOKgjHExFdxfc9cnq7VfN+oHnH/J/aqv38YS/jssNBh1geyyKiHRM8WbOlSzOxi3juJKF62BEH/bFauluRFOGXLFdYmM7tcTm7MUAbTRUthd+zCdPD8ck90TLMXWhHIFxJedXUR13v4DsES5Q82vdZ1YEgx7AxsOsY0eTyeT7Wa8OuS32CLjmby8Y4AhOp7kigmOi2H00ZNWOKlb1vDj8NuumL7vpkJXuNZaj43yR16pXndqEjrqUXnQjEqZCcVzJc/pWrFUPqW5Wx7y3M0tE69DCXWiTOLG2qjTQNM+fHknxXeQXQMFUHXaDqk6p5IywyEc/ecqjfzISK760QWs6pLOUUyEW9PzVnqKqiD9sHBZidEAuEDWArtvDIAI2yZviCcqPZkDUT2eS2dPF260jkF2dqTfXLwjvXu5ep37Kjnjz+TqufjAun2DYcmAkz/pFMSBpYFQLEqTR9CLqHs0Payj0lQbv28w/joRfAZn0e8lYaM4rMIyU/0PBZ+zih6Z9ViDXA12X4+cmGGfxDQ9lL1ek8l8mn0zHpVVWKyLwugMirEyjl2y2yrVx1pihow4E/ozwWSxMmkBHgJPf/eqiR0/6TSfgstk/TAsKEWmrWHca//6g6zy21TousW0jrwqk6dR/YyDSJ6uMo/tRhWEDyFBpi5RnEfLBtIsUg/s//O+bqfO4CBiHlcwJYYdVaDCo8Xds+1NWcRqpIwKgz82yPJ+pm3opkWThSN4ny0ssIQQmOHUm3VUiIuEj47/oEyqYefyFMIHKsQyQMaUxZ5QdCJYTA0lVEvK4iJNZ6rT/WCmyOc8cmDRGCYt5UMk3DX7RW6WW20pUpjWwe/vRjx1F2BVhTQCVn9snszUi3YfeV+XMPG2uLsEnVFu08L1GcAYiFzJm4aat+RykQpV//VHwD/QEMBDDZY8cvK4OAxC2s+0+kap4/PN0clTg5zRmyza9P4vWTo2pMoP4JRQBo6Zq0gU1CwSxoewJZSyBQtS4BR9CryhMVfOp8axGY++kfBjsIX7Pkn1E5oNSjiwp8aCDzUe/WRp/bJBMWlIY9KawzGguC689wgzkf021knE986os8LsanEM0icI5kvYgM+oPRrs6g/zrTfFSIE8dXdzhTNpfhXbMU7x9VPpdIvZZviCsw5UdugKI5d5Vt7PGMbuW15aranWs53TuEb3NCcIw8pke+EN3N13kq3qXSOpcKphsjJ44K7cAXJuCJTTMmn/fpDmg9F0oPZMJsxrLKKZFBSPgSGg0sj7kbDgaNL4nizyy4FxIcBuDAy4Tor17eA6emHg5XzDY7vYqwQ3oElwbNM/Xqea87FBFWOA03+TjZxbC+LrIlboklQyMj8rwOqOf6YexqIVsQ5mxhXzbeGqKr30LUDMl2RQh56YqxRF/yRnn/MDN6G348RlVmbF/arxfIVfVRZroCQJNovrtwDIcHsu0i4zoMdvZYdLKM6MOnn5Iu1E8XYADfeB24VJxaO/rZAiBhHcCzH0N2oPPda8CvwhuUdnRxX2ZVjkFSEHiAQjdrFy3B5r1i2DZaQ5bKZrEFfVbdJoAANStwY96LPqjuPdHom1aWciqp50OgLAHY/+GPcPhOsI3dQSN2ZDOBeAVsVPLyVthg8JYqGVHT++Jjd+ttZQx+uKJ5415+4mjGGTcIyydoV5EThJjYj7BT288l0uKqSMlhStPUsTOATemkK493ln+UFuUNyQrBO7aMJHBteYrfuM20Mc1GWKgaH0ouY2JB/PUpVbXLaCbOKj6GnOrznR02MmIzLu3GWeD7h+5EIcR5xECZC2Tb1711KDLMqIwgyeXrExiohmIE4p+yFzvnMFf7S6EBh05jD6YkgDA+TrZNuX38qcJhCgBEmLnZJoSRvk92ZLM4vij8qP2C6uZMdnBznkdE90G47GXyI5QdCUKgQM4YHfV2thIT81dDn3CdFuiBjkVgNagibJli0Oxv+StAGfwE6YMgg0RY9DxC0SPM01SwIUse9kbNOEATNTHGfkg/eylHxFKn7ooOtKyIBLwRqXyjsMDfmfxCs+U73SELn3FullS1HkCISBuT2DtRSnGF2yTbevHyMFvEN6XOuSDST5QeFnALH9Pisu0rvPX547puJzvQm1gtjElYwaqpIhsRnUmvSwPZTq8Lkks9XYcPQ+io4eq95lL5aM1a3PlohwbZ1vi0199kuRVwobCF5YZaxFen476nHhmaOXSrezA6opRkBtFHDubaVxycJaNZpIBXqd/vPm9GMTGqMPqmve3SDtkYEN56XtgwY+xDPVcBNDECxkH0bLelqzXGlC8pvmMzAXFBJ8Kbd86T5uwM+nIHk+mmAfoqSk5W5p3Fya+gyWNHAUhCr9wNPcAQbj+5C06M8aD6MhL8kfCJ5JTEJwNvH1Sd8A8fvSwTD167O7Jl0rlw8NYV6P9LTtm+ckkJHWGBReF92xPko5qNzfTmYF1hqU18Cm07n5mdR9sLNmSUFdEdjSqZ6aGMl3AkxoAROLcRxj6VDTdkf4iWpxrmynfHkr1uyFlnHrxA4q/PDU2ocZGGchH+e9UwMMHz9jhmMQcgRKQj7EVjMf2ORoMEO5Bmhn+3Jvg5qCUIWCRgWdm4zmsqa9Q4CfSkYM5e+tVH0Tf8pS1YrNWBE1rv/zzQZfQyZbA8Td/lfyzgaOmhG3Kkc3VURUwGtvmfi37X9eIOyprDIScDetYKGr8MTk6srCn3HJv2ZhRXDUxHQ1ML+rSwhsrvLWdrh9yfinvr8ERwGPitJxv1zJA9NxDULK2RE+3dWZpAEOGnXF6MMF6Lfkh4RKAoHUeSxHWeTrTPbsAUvy0bZ+TWnHS345lgQHZ51WAa+kodWbjvOufyQKUKSUgqKYuTCGlxo6W9sq3omQsH7OE6PBBGXAVrbpAqTpwwQsVhjKMO+7blo9EzooUyu54xWfAqPBf5f6yANz8v5lyL4z+2lY260yWSDyPg7Sr98tsgGYp1kgKSCkVElxqxPWRiYQXOqRq4EyAvVsHSO8FQllWEBekusZbG9Ifp/j2307DSLrBeM4bFrWcaRZPT0c52QQ2cmJWpu2CcNZFWVG7/2/HKEVzyyqwk0k81W11FxbVmj1GVxdCwTQdFXej+04IO9TZbJphsvt8J7xtqYwg90wn/YNOrT7bwZ6ibdGnW7YbhWKOKz34HJlilvokdPigclGUpYWNKLui9yDwEtapI28A8c8/bXEBy8wQ3eqb/u5QMN1QMhLIZmjpuh0Fev6LynAsASc87avWMCW7sFKmJlvbumkiydpA/6sbcJpG0MkGITkuxMfivbg+iW32JuCQGTQXmgaH0DjV+oSpuYM1RmNpw5QO0/iLkA+MG6XLYUbexgkvOZBWsMU3q25VDZOLybyF+qVZVZjw62ON21Clg5EAYAmuKLg9AJJHvmFxrJS6cN2RiYTRda2mMSzT1liSwdB7O1mPf9GAy3Vi48eEQXecaX+pO1Kqanf/8ivJV5kLvoeSA0lZkKxZrzK+uGbwonHstL3jNZmneH0IMffKnSMAgubuFKvJWbMrL/Zx3JJGrCfIOcECxnJiJfjIbrperCkXPIQnuEQAwXAmWhs8jELkrlMulimY8wXD1l7iYhAdqVqwtkxebutYE/JO61obDgUTiqBq0pjS5I8X2Sn0bGTfe6te5AXCptsy+Z2ZTKo7nUqU0igc4clnHCPkRQrEI9bcPfI/s14l3NRjkUFn3UYMu2lXXE2ElHzin2+oz6STRFreCRVD71AoI806R9YYO6HbhjPNUddbkje2MHgwef/k6z/+0HxIqYA+2LzB3GAuWvbM6I+fI+G6FUrVRTnGt/aKfAdB2mqLEYi8AbjWX91d+BnDq+QXmTcx18v7UBG/u5zpIWQAlnzVyryVcPd5dlx946Or7kx4ZBFSeZOMZxBKIDM/RKet7xXOO8TYSsEK+fEaPogfFXx38TRH4V7lqEqRqbzxndRSvZ+fvsB2LXjuWL32dQZNx9oi1vqK0dvM60xG4QES3Ksrlh2EN2b6YvLVCV64wzczcdO6Ow4nX5LUSjcC3DOJywDzfYXw+RtIGWn21viaRZenOHvuMH7X52FZB6j0qU6+rU9h3tTBF0svUtFe3DGKJApk4PIl/pHkJ1XXzz44r2VHKYvy4zFUsd+nr0+1w3I5A+SnW53um7GpI2vZr+ljKpumiuLapXsW9J+WAILqOgC9t8iNk30daO0w/eEc0KIxzLAtL1K7UDyRIFE4CPJHxya6zgHwkCUZoYDuMrpSkcjEDl0gBqNWbaumdpx0GbBQXhFC/BF0q9jCGgC4arLcBusqxzGL4JoCD76ysi1MOAhqbrxNTqLIjDBG/0fMG1LyfnP9dr8yxxvhRjqapuXvj6RxQhctiikvajv/twoR+5HioEtXC+R5CcU+8yNfLcZfOx+U9vcvs7WopQTMOb8hFMeroKXKB61LKKM25aaBlEgXwwBl/Mx0kZBOBdSXMHukSZxANUPwqjOACK4o8muhhvbZhCZ6CD1rYP1fohwD6SMzHuvOvxAgO+ek3/Wq/VS8H3DVwnHOmmVd+8x3oI1bt4HeHHRMZSZ2KA8DIg+hHjVgLd7V2VSz+i/cy5lqn99pF3YYW7RTcFMhVbDe3a1aZQmj2CPz8IqJy4CU2BAXSOjhbpkq612uQgB50jaFNmadDWtoU91KU6md4Nh08NjxG10zWmunfgIv7S+HhzQH76zBAPQ+f5dTNDFMdw3k26+e1hEE4IhZxL+lm84sNHDDoPIzxCJL0FM7RvuBhDR5CDsTlYmcfcBgKLkg8J/CBjmz9+jJAFxPpqFQROLCEDCt+6Y+Fmh2CSLJV9OS1gvOXLfnWjQl0nlHUx2EY9d9pfKUhh4px3zhg3v8dverrKbcReXHY/Joe/K5E448grGugCu8gP9A3xaCuC2AaE11Mm4IPe9nAU8rwUNFd0nOS4DUYEfxqWsoiKft8Sv/QkLhanLCzCYzIG+kwR0zlBS4iIIGcZxy5R2/fmqiBmoReOEt/m+ulmUyVPwdpTvE4GJUQgqPfISyj6AzzM11t7BxZmjyIV6WQvhPM2T20B+f8lQfkn4Tq0Foy3nbN69T/BU9y6vb7x3JpudE/hxwozLtNrpB7ltS1QBGDtkNRWhNoAEt5wdO/OUfKjhSz/+67Yo3J2/zbcPPke0IrHShhz6K6Veh37zHw5N0sXByYQYvdooETXZaeMOqN/HZ+zwVLMSe5Ul2QqMGH36bm7UA1HaQuUIP8Dqhsy2+6jTQJzV9kgfzAX/zCV6/d/g6Ni1Rm8I7h5Nx/Bh0KysPydlbiXG2SpsqxBABdETql5hzaYVF1ut4A1frMtSGcWqXhYsCUEktsFXXmAq6MbRpOpJaaGVW4iKnDuwa4w7GwX8jkzXNq+n2vJkFhzMMA6WrhgETkPECrAptWldrJXUHaLR/E007PyowKUvShbRe7mVKmJs71/rjGgJR4ufnsAxJDYUgGbptIb+tIV2W0EQ0h0/DebbyTdbqvvqqcAqoOaD6wogHgEEXlpG+2AgyxnhEv/lwzlFeYrEmbpWWE8lHfD/s8WkQrtZiG6m8lTYMc7tiCeAK8NMdpUBdUO4NODlYQ4blTFeOHJoMqBjGJ0XgIMnaFGLgo6Df0qT6TBnL4DRD5FWmv8bePv8Te1iCAcleWGbbNZzYDCCm/Mw4XfSPwqY2uxsf3EO2aia6zNJNbRUGKi1mqWiSwme3KAhP9mQNOT1J0zF/y/HXiXsNmhiou4m+SWHvfExTWeZtgPCJ2IaFMAaFb8QDyiNlKzLWgglaXQrvytDZ62b1G9vOJml4YxeoHaxkf473CXMlpKVhTWZFDysqKhytQE05zEofCdBRS57/XTRhCzYoiNrtY3aXsbBjh6BLo2LyIvashMZL2wpLANNiDGRzVyp0mQ0mEhFtEAu5to8MR6PtC7Nv4eCwaNC9N0tD8iu5X2afMUWFhqqx8UskgBaOu2TNVqy0oS9xDD2RbvnQ80W7rEFhedfQsaP6Lxr91Xgr31t7upjpIt49NFrx3CeFhx936m0nAJXPqG4isX/nbw/fyFfGYO+nULsb2aDi+WRU2xB7hyYtUscc1EfKHqlIyCw+TN+xn6y/c6+t4XJAWe3/YSmOrOShBisZg6Mal81ym5x8kzz2W9BRaPa5WHF4X1727zP1BuNJ09wZIldr3Xf7F7feNb04VlPd4no6PG3X6SkE0NZUFELuFXFHLJSYY7/akdKulFJxV7qiNu46OA1LVW2SiqXzX4IXnhwf29j2eW0ZWepVrFQbwkeDDzzGyj59DdiDajy6YuK7lQZopX1WodzuCBnFDpLscIFy9AWKcUd4MSi4K/pP4F0qPmC+og4mhZRlBH0ACphTcdrfKfWiGVutEsHHUHvmbt8766EQqrBdl6oP79p85oTCgpnQ3OyZqQjpK7MXRozja/8fcENNYIdDVhQeH/8M8mvOlEmUEjEAOV/IrItMI2u8xQEGf84LmLjY7ngKxz0eCaUDoVQz4ZHV6gsQaoQMq1Njo4f0NiAgPk6u8W+cZJ2UsP0O2D6S7X3Y+TJ8MPQl2IbMl6Qf7VXcrYDbQSgiJUMdpU8vaYNk1c6qOGx97AWPhWfcQroxBGr/TyinSnJNPOtZYzgAI1CKPh6lTHpTve9eoOoQdSOHK30vc/nY4VTy/KhTaYotUan6O6MVCH2GNmbjWcMdhGA3DfeoFzij5FvPSJ6b1w6Zy7N3VadlBm1LEBy3kizdsvPZvwQUr3YT18/gWZD3S1znG+n90UmlsNqzLu+6V49AQtyboqLSxSNWZu4OeHRaYSijYb+p/jorOt9HrYVSEPMPrFIWKAXBlmFETO4EP0HSgv898uA7XbavrNgwPmJn6kuCpneYlL38ltyYp+GRn/EXZUfKRQSb+pFBnvUwx4H+gSibCpgCL+OP6buLabuf3VgpXkzuMsU8Hcn+B94GyqdZr17+Rx9xW21LGLfktAx7tzw24CMRaTgnDZQPzj6LTAyHKiItpG+x5T/0UxtT3AnScB65hwxQChuHYcebUXVi41NwyMxPbbwU8H9yCbGXVB4ULg+bHnFSI0VI/mARePJum6d/Xk+9H9hHTjAMc9IoXezeGpWuB4+HADpH1HVI2bvgUWrkPE699VdSC983EA6OdwRXUmixWp5DP2eukHuisP9McKwLs8omoJuZGHhHIkXRWeq/GQO7ksJkNplX3F78Z+XcJsIYau8+mzCi/iHHCJqCOM4bCdR6nhIOqmmWQMpWQEJbQdcF4fq7QXqsom70IJD45IGvt47y/JVSzuyGkgZFrfRoMfJbVdnGY4S454LuB8lKwtAes7LKUhzbw8z6hLXy3SeSZp3OGdRgCizCuYIeA43/RfHX/k2uiyybhKPco9MbUaUS81vUAQYLLfY7EzcHT75bKkMdJ/euPQklEr5J9moosx8BG+xrlO8q+zssHINJNLBaBsM0STq/ht3FhLJtf3OQMpgqH8mou/RWiB2LO41eTWGvNBU2c9FNywO4dMni2PXsZoWR1UEfCYnGRBxQxvTEpqImKO3kZ4FjUqqSrV+QFSp5MUeKg9175NjpuHy7ydNzKT018y/RCRI7cJiO7DFC0M7YwBKqyhpWSssK0ZrR5vN9hSM+K/CV9fjTCgOCG3rAV+2EwP3/dIXbTjqm0fk4rukFgTrz9xxCmY/al6JhWWvI98dHdPiePXahok8qQW6EZnOpFvaz8C+o2R9cOkjl6iy37VlWPPoifnxWeN6kRAG+VQb/sa2AxwyygEpJICEzZABzGIBL8NvYbeWJMphB0Us6HUfOZW79cVql01hbmAXw5bc1iuERcI0tHe9s355/ggHi+f8BocLZkcxa6LW99bdmhqikEr/tJEJsagIYwXz0ld0ligK/Kt2XemEuAECgWOhXb8Jul6WYLODREUkUlFCSw9tg1pTDWsQiUq1JvR0i+x3rm4hz3tybs/esWLnWs26XXV3ruMOUXGZsT9MTlJgdPgXWhFHcgAVuDVvo7vVn2HzLtb1ryhym8QAQ8jnjOWBrXDaDM7yt+MhG7AKfJxga2opnAMjRyNp6Uvjsq59yY8mxkh92VpoqvIYaxQDWNp90BjzBXSLgaU4brVbfOdiziaikrXXoHYtOTzPoXk9NVPuv6kfgUOKQfrbT843qYoi85IUVKlYyb94uHVK5AED1GfvdXdVXIskQVHluA146L8A9NljV+GzDXzb7LH6SAgY6wx9e9lhkrnBci0VQbl//XK3qiCIk+Cycpj3L/4BSJmSkNj9DFTjEVOBjDKaSlACV1TsC6QnrJxAjD9v93Rspy6X3p4uRgsNMfBYAFvlHeOIrhd1Pns1lo6KuWItsYpBpIWtGLh0P30i/lOySNljy6sKPV55oPJl7w/iDiw6D7hW75gYKf/uVpuSLLVdS1JxaJygfVh862gLUmJ3CII0zvKQ0DatzOg9ADdsozvINggnARguXtQMpA20YTEvZ1TRfb1V3iI0GimQbhaUQgx0+7HtwCLqWqgZ+6of5ggtdCbemTgRc4pTMAjiFcf//8bbrS1SphqzYs/CDwVIshxLUE4hJMhoCWJtokj7dYjMUWb9/riP6Pzl9Zn25ha0wQ6Zmf5EONjds0qAUvK7pezZ90B/fbpna/yOe56T5xs8BbA/GA2oHGu4qtlvKK4yo1N14cln+yDbrLIDb8o9GH1K9tJtgJlI2i2FgLfFyOSYzdqwAO9OQAC2U/zJuu3Wz/O5pF3kEvvZOAbVY8ywzKNyqJ+UojaOqBdtIgW39ENt9SE8O3+HdcURXUswjyA+qJhj5Dk2WceoK2dxxmqbxK9FzzsfNP3KYD17ihrxIWqtsJsCIlPNznGBV/O7wrm3I4C0w4PbVKftH7mDKleRiC+uwQNA3H/KKzx0PefVLNllHqExg8ySrzu1Yd/pWbmcWhx7i8N2nlcK5rpzNYIc2vqo4zafq9aWnefdQNtUCS/YosYLHw3udFNTZeY9k9spOrMXBc2QpoeXGLcAO7RoO6RA1yx1J7iAMb0NswyOkLZDsGDEvMY+1hc1JoD5GxnAOKGiVBzAQG/XV/q6vkAOmL2ve+a9K3kd6dUV4O6vDsesRTbgJFN+0v4MshWOHiLbzY4UXox43Hr/Svlw5a2pC1NQGZOlC6QaMJc7bFzsKdWHMBsj09HDka7D/qyEDX4FQdAwMfBYZQ5ZLIWCGH+5GmkeU2FVhuk5uKcm+IcWpeafNbDJb5yJLE95RMkpzLKR3Zb73wav42fNoDG4CPlLGyDo2QA8QIBJLO0K4GA23vSrbffEbSA/o3TV8X6+dS0tuwz/8iKh/NWj1la2IXW1IkdTGBlux9ROdNfmZjrM9+g/NQBoMCILoFuFqF+ZQKllRXyVEjXyPu1lzS3QYS/ezNCnVJqsLSktCRwfvoQ7K125z4nbsugBqR0rPIiADhRJI5anMRWei7C0r1Q+GKTGjJTktz62r5Zx1Vkf4Q4Ayc+/aDt4b6LoRm1n3J6CJlfstjL24A56MRSbQl4URM/5q40Fa1HX0b4YqURnfQuRwkepIATbh2QH+bzu77V1xp9SogpCOMGVa/3NLmPnh6LBnktEmEG2b3qJUEbT4OIfXYELDH2LHMeZrfrqk3KdsozCGO2LAalNbtjUcjtUmTqdUllXiUNMbCE0Mv+1d5kSfqSMTlh34rh69Tci4Wuq6tjRcg1f8bYgxv3YsBoQalv6Xp0KTkT3z1hyHXvkypy5R4hV4pMZe4BJs0RFNkF+xwhb/JsUiwO3EHw9WyQKCjA+rp7AwKIXUsnOJs89Ui+8hK9HsRyztjSYm3ozBATScAqTSX5Z5Dap9lgt0J2e78Ze/u584SrA6i9smQywlE7Ed0JTrGuqqJHouL+P2jyLxFcmeou490CQZpk9gkd69bZXmjlnHKzfnkWAkTtGYRv9DA8UgSw2sHZQbdoiLw03veKBdgKY3+blvgVtg81AkKFgvfOkYKISleMsWfVubEB35crEBfKg4xYeudLvsR3gO+bcHyoJz/4pEX4JtN4mKBv6Jn0ndM1SBqtgmJEs5BcFC/21kTBP3h+Ga9+ngUdGXkrz2s/wWam3CMempKu1n2gJkqN79LbjorkOo7z1scYHdLR254q4UUj50VdiheUspkci8x2Ujey31MC3UUf9aAW06wwZdfkqs8nyWTTlalOUp5xuHY5ZaQXQt80YCnpv3hmBXsQ9zcSQR9s48g7q2G2XilMmGuMFYgmNly4Bw858RgBkDQzCg0vhj7+hGHq27rOwx9zrq1I+4UenYM1eOBkssBnLUgGhXOm5DoTHOpbJP0k54LUX27zIzKItoCLFtWf2hu1Dr2jWsV0CDlYC+EEWH0Obhh8IMfmSsky7rALEBm2W5hl0GVA4B6tyWQ3wnXoTzeCXh0ovhvzc0T0hd/ohiOgnJtMBU3cWEAhYhqD5EmwhuT1aL3rGzksJaRxx4/iSJBe14necgVFVr0kad6bChSsPDTO51rKAoQo92+5lK8dJmhlZbl2i26GrzPaFIz5up277j7evjdeAeCit4FDVbCGMziT/7y8ghXNujJGjM3aW57r2fAp46SdraHnIrK6M2/h2xYxxYsJqWnhQ7z6KCIvv6T+/m/zA/HlBDjuAk1VctzHzMMdXYWr8yqfGyMJ4dx9aeerlk5+cWASjsOhJQUZ8BDq9lC2g3yBZmWJnjjcgNOOCdifVmE8ViIrdeSlRNW0xFZgIn8Xr5GzODu9Dj4BM48FGQvkbMPx1/YLFV+oAtOmI0OA3o7vfsXmA2wN0jAURXsU9MEOr4rs4ME1BqGr1TtUJzLoAIccDa9g5wFX8Qs3Zz/q5CcEfAdcofLl5CHXxxQ0oJ4Afx7h81h6l8DGvYStH4V05HJJzvOTQjMEdnmiPOZJAtTZdRKGTHBz5XiArWYySpOB1L945MctPVfx5UQfr7yuaRzMYmZ3N6lO4i1e6bXzl39twxVbGbvcCd2HNxOd6I5F4Nw+3fd6MbAe/MDN3Epf54IjFYdN2eLoJGtQxLKLktQItW0LPjfF8O70MPUo03dX+UoMCxeIDbDC3vX6UenLuNvbobQRwtbAPNb+qn+XrIAoYIhdk2OZPbrqRyr7E9UK3JVPbVVlQQwcKhR6WjBmDppInVvgGeYmWsw9Oou1c2VptbbejbiDrAtepvv0W9Puc8THbxPuJ9LyzVTnqbX9Nu6ChnEpzntSgubqrqRXWU/nD9ZRzyw2Gu0hKPnH88F7OUip1yeTCKWqz9G/QZ5xMW3PMtFvVLDAB/a8IAziK33Vacfoqq4VDlaW+hlKy791tvuBFX7SasWgsv17pDfxYsGRRQEZuGpK5RGJTlSSyclJwMhnI7M4wkaRAfRkIwyOn8axhxcDNc+JIdg4M6Z8t5uVd8BbJQX+dan5I0M3qGQ6r0lx+fD+PI+AQoOOixCwVuhuMSziuV3jfWpe8MbLlLWHu/QcPT1/jR9vWYrY8aKiFSE3mB3Rzg3jt8UIYTvbq68UqUsQDQui4z2T0UiycnCjioxt3EUBSO7xVdE+AANGpPn347ZM7LoYXv/EKearGNkkL/nJ1BHndhdvfV+wD5AdIB7kahBvhaIyLvR93Mt75GibuqRxJmBuEVIOvAstJqxr79gw76Bdld3ehk9ks83jqpNOpvDrtrKAEMPrsr45JcDx5AAopfNwxgTQ+XUV2vA/mSlAT9nnTnK6S/Yna2cGK3FJSVIFS9rewLiIo0zUqtlLZNJG33517OMLVZrU1O8cQ0+p+5Mv/sjBAsWcT83+Ac1HGOlaPUOM0C1h12TXboccNaZxrW2dBrgMi/svhWu8MIqhjKIjRKXAsObVDVpSLSLEsu/hBK3ji3qME/3g9mc6bYogczuy9eIx9R1duEwq8uYMg1LMUf5gjBi2JIhm+9SoUqpZ/Lyd8dVtdmYhO1bjb9ae+3kVmBn1O95nX+xHI2WMh8GX7+gcy8XgY+VNXUGuf/l78px2Ivi61cI7G9Cz13R7/SPZAyRDKXlwTVuh2RVBi+bZTGCeYaJ1aNOa4lZZZFH6G11IjXTd/dgIi/g6O3R5h0XdPlC6n9ghKGlGGeQbEUP5ku/6bYipRPrRc8dP9b9kIaE/ZINoXKSxSXLjk8mkvm5+Lw1+6dKyQauiZsk+K8mSBnAMZjJgIt4sanAcWGP7+d3s5vT4HRWiiM7hYoBOF2nRDYaiC09uJ/fPxlIAIELOYKGLF9LcojOYNgX9kUO3zmyqAI3Dak2lzA5sl1Pzp2GG8gQ+PzxcCgSrrWc296rHEuw+VPE06dOt4ZG9XGnyHrdd3egnenBJ89Vl4BRnuxAu+akrz+xPNajwyFdjGUXTvB5AnX3yRlWpzvwTLHqUR6gzw79X9SZA1kGm3yrQMVZmV/KLBHyFWNNbFxjT6c9R6If0QA4F+1ZjzEH3gghLNwcyNi6ezvM6fUU6Vj82t39anopluaGFgXf8mcqouDfeP/7hRpJtrXcOy9q0UjGcBLoawV6jH3REHt6cTGTc+rz6F7auHwSrojqHh69EOgp25//5f8ZHU0ocizG/CB7cuUavTSiUOBoIWrGws/4Gfs7CzHxZskL7BV2MLj+pzOrL0+GENVoEj/8PoF93aSNK2iiYc63zM7yCdp/Q50xYBhgjTECKVht3K2AIxG/Lm8vlg2zq5utvsSrI1YvT7TVb+CS6gUgVJ7b4GR1kGs4qPdd513BkpU5ViOPp+PeOuHWZ3v9PJJGZFrHRqoWAMg65m+FiFEb2TejPEMyMeYZ4lJ8R7/CEAqD5m+tnFrxCCZOe6p1EUAcQqKueFrlIS+vooZJawLEi7+MCfD12ErleusfI9GnWRTMtbkiZdoO+WkJMpYJaW+cZXGzr42LkPVkpsxqk6KACwdKhZf8Y2/s+T+axcVqnADjy4zdqVlXsC8LOJ+1JkyyrQpGkxsFnxwgbYgD+BRUwr5ba7xVrlRNz0cFeL46cIfEwosn4OHyRmBzzpPejrG4Mz8x4jOp+/Lmp/fiegn0xfMQ4dXeT0qAMaanxp6v68kycB5DNdt7173wze3Rf4HFbp8glenpZ36uQ1J91Twr7PofHqqt+9IyzZXpzr+zIKRTv+wKYZALmBUDa4b855hFQY0+wDH+mB1WO5GIvzLBF/ysFqzBfjwU0KTjur3ihfTJPTYccgwCP0fitqrci87DRi2NiOeiCLWQPlz2wdqFQJONDi9uqQsvBqczQxjeLjW6fgf+QOOgB7a2ZLWQM3yj91/ic7o9ALRnw9VDxfyhoh5gF1JiXHj8nA9YFMhCH83rlQpSBfnhFAX59ljRbFDFca2hLKDAeYBbSmaAnohftcjo0JPnA8CGu+9I2vTMA5Jz53kRqo/0iyegyg3x+SmMQhuGJlt3b7UUrElwUWCUIfmLFFnksYHFUKyoyXuQ4Dnuxk9CNMLpkdAlw4mFAA919jS7Mf3q/+dLKmZg1zXiDS8LS5DjLkvbGlTEc760XPkl+3ksMDqf/TPZF+QR1rpVKLip/jO5isSh+ieLtd7eB6CWEDCwiPv1XZJLqYXxkWy2RgTSz7t5vZWJWTrv3kpObwwtiImNxx/hVNg4Z1EmYy98AorO2/oaME97gIP6Cj++GvB8UKc3WVdoMFbc5lZXW4F4axZf/IsNpZjD8dgHKHVcyaRrTpJR+eypzZ2CzPMX4euVMz/0nFw6uAsHZxvpaUbNrRupq98wbRSjuBryAU10ZT+I0RJrvf1RQtLPwI63PwfIZsuM7Z9osi/0CcfEhLIWEyIeHz1JH8B7jsc/cTRuL6JTTmXhDurDYKwA0cJz0oOZRELsl8BbkaZpyzJ7pqWfDHLluibOMXrcrFfKfHByKOPVnVzyA6QaHLR15EQWn7hNghdy52SLAXGCCMl/NJE7cTiCcglccA++ZYcH8BxHXm5ZI4aFvWPEHBXI3OOClorRLFb3yiR2zZU7D79KloiprVSB2EYQgbJHLXM/FEtB7nzx7YKOHE2jxGJhHiH0SlO5CCb6Cm67DGh8frLoL8vIy81xNs9rqQifT+RzSI9sr5s6g3tq1Fbn6slRp73/bi2HEf32ER64najQkmAbsvuWJT4V32pD2sRKa1jA73k7QaxoO7LL76w3UIYTJmrJQUpjblEQHB+euVK9DA8wqxAwR29AM295d/SewSdAinoRsMXNpLNOYSLtiXIcYM6zVN2xUnxHZu6rwJjwc/01JFk2TI9PIa9+Gx+G1kOfDd3B4AZo6CsDdF0TwEAQzp7Cj41ReeaF5IUB4BiABiX3FIvRJVzqnVlnCRwenfhnjcGp1ujdR/RM8zZ7S1GkPrViAfPW1KrAGmBkk7D05qIYVhuQq5Jls/pO3zdwpaQQmNjUphkp78BrmyEpyK9PxSLeGZlGkiKI5f1mfQqF2z5pabRAMJH3hE0RrHVnDJJrUnLmU1lH0K/OZ65o2wVPT7htvXLyxV9/btZliKWjql868xk9lJBi1z0IU7u+kHG1UZCVF1GkS2Oson+n75FSLJJk+/usjzWJewQOXe7NXh7Lri4crOCk5exmMS7s+VKgzdqX0oKhbUlBx5E5HAoizKcQugmrfaB5YkRkLSFF8D6YwXQZqi6BD5UFfwXhE68YuI9B4flFw+FUA2VL+oKVvsCtSl4ApfsHNcYZ2LbQe4D/fublGvL3GqlBYHKgoWT5FHYxryvMSCbeUKuY/JRvH09rkqchlObG4vmcW4eoqTOeqIajbXquvY/rPH45qfBV44UfVMHiwUas+0hc5I5QCYdtwNRk2APy1lZBxur8RUfqajxcZRyCm/GjRaRjSQSmzb3lhZVy4zSM4J3dRJ+Za/HyR4gvhQBpZrmvPsbIx7+XQEdcn6+Y3yf4Y0OGrL9xA8pai5k2p/zX3iAFyz495yaJmmepT1BGj8p28dmGpOkTGo8Im397/AGtGZJLpHvuaQ30mIZsknFa8EpCqf/5U/HPW8qDoZofdoRxPuI7fzSma4P71V/6yGsYRs8CxgXrrYzDe3gFWFhencdxeCzNt3SCchEnXqEQDHA3Cb/+MGlgiEo/xk4R3RydBp9UxJ446j/A2Ef7gdyMvCsz875veX46RJwwVFIwvtkydPdvw/79Tw+IH+ZEbi+NRbGiFdpNwDn/wUdZypIws1L/vsKd1Hukk9WAM4uO6/StWItlOBe6jJ3ONvzSapqBoa0GkO0VUupGMy5sDYiz+WkaoFTatOByvYQ7EX9i0NMn3ZeJcg0vwsy5d/W2Oi9g1hdzuztsTn/CXhInQEzjcHOX8Q2pgkrFjD8s6HizzwyIRFyTGOCzE8IWSCd2fyW5sH/IFCnW2Anjt0a5k/iF8u0u3VgqBCZWtaJX9XjK5UV7uslOS3KM4plrCLKbahQeFTRZXlbxAFW2VzYyiJbGm+5MyXkTt4pFauujSwQ/6eHHQboLodqbdSNLd2YHQKp0Dp+DmkuDW46c5xW5BCjT693ZT+Y2ovLxfbPtFHZbzd5zzU2gljzxOZ7nXiASkbDu4BQDuG6d+5FLmFfTuWYRuMOAfQqWohe8iGhSrIHDMMefg2kgF6u4iXPjQX+vRiPy1DgOFpNLEJcHkYZMYIf9ECViX3unPXsiLpyFGF1yuYrExFMIFR5pqRHhVLvTAmu7IyMnO+jrzNV/f6bGYxfUkNT6tEpHkW7TYytOvYMhWiYVU2SluNmSdfb4DZ4wUW3Mh9NXff7yvyMRUpf73sWIJEqWTAbJTdGPKlWGaYVHrYAPf3+HdQWRkwvNU6lLQ+P46BZOqGT4U1edy4J6NW9TTXiQMvDrLqQDmFneNkB6IpkRvuxiiuPToCGkkjmG5ATwz3G6ePm8tILcFWHWcbvzw+131DOzx63Eu0mKyrzy0ea6xV9tA4FX6WYvuusLzDEEqXvXGshvxncZ1x5GzBvbXPgEXLe+YMbC/kg+OBtL9feVLq4oaAzdfuDFhkXj3XwZcj6ZKQ0niKGhEceXsmXp3sGd3n0SDFhZxrxtEOyO7uPZA9DhSDi23brdlJSKC3jweJKeFqaGRCaevPFmiL5WQw8RKclPMaP9E0SyWbPix1KTAKO1DXUCBJqIo39Jez8+5JpI0LSGyYhdg4lRNHwOx8Ywm/vM4etpRRg3g5Xqf2Xw35eyNsstnU6mS4rBt6WSqLTcfHxv/q8A60vDvRDUQ2955HxqBc1miyDQBhArHu9KMoDX/o/0a2917RbAZmAD+HUEFM1AIrIQV9fST/0RHBru/+X0tulBVAaA5KhvdVHbbid5yQ2G6Ez8EIUMwandP7p5g4ip0Xpr4Rnh4YnY8FCxdndE5toc5WFbhgVllGEugZ3euAECEgJU4AWXh4c8/Yb50SpVzh4op+ywncbukuk4w0ad7p09/XuUB7iuVDVSADpfhPtyTPqgYbiLCDoFg+OGJ6qbmaaZbXlfOhdh5fGSl0kWCdrU0Ba2cnemVqhDH8PhL2S8ngjOLmYugwIhHCFG5QBW31KkwXY9YDlk3yZ+87lGHKTX92KmfS2BNVdQSwHQ4fuLDYaBsbNMYwqetzBIY0WX19fCtJxWJXUZLYVv1crxoV0irXGq3t3WQsdmQqwVeqwblB0s27/J8FxMhaGRGRBt4W6/8YmDLCHOtil6Qk+FS5EJt099tLo8e8tFfP5L6x/WONM1fdX3OBLG7pM0txWc7RovcJTc0IMD2y36uXeIFhY7kBPW86M+aELvLKQeDzFIrrsDEj6JgIYbizYyJdiZPgPYliUcD00A0War679HOh+i4TLQfYZqoeqBpuAHPeqrjMSQKiDC5jbca1sBwT+KKiXZbl1YsP6K/STtdhI8DD1S2Vm3AEyFooPmliS5fLvf1v55MWopIx+57KbKtHUrhipTumq0pH1+obyQP/KKQrc8FplWmqxofZ+cTvwsmNOIp+rsVkmEezeVJ/RXT1CIptpaLI9+b8rUuLlJOQM5dcG8GqaYxugCb3r31SJqc3QTUse6i4lqLcO5icH4+wGL2XyfzAcPom+zdBuzPOySUZt0Xl7nTSH2nK816SSXZdNKl5qqazRWy95Ptc8zHCbbZKpW6GQjdYBprxhwhO1oahV+LYZiZRFTw24lBdExaL0oHLg5iAqf1ql+pyMsRHZLHu7FfjiUzvoal3VPvueBNqW/mPxeht1Cdbf9EzB19st6RBwr3wnsnkR66qwI4Uk1No8SzptmQJu6ALEUubRdt9ehmeCZrXM7QYdiKHv0VDZQrzv1BHO9ltKT8UcKtEPERhFkW0DUWVRoWeY5B69irvRaC/zM4cowdW1LZirFTQxhuXcFBN+Vq7xVb0nzMgrb4mMKj39bWqNjOsVjJbLZqG2+CuFOpzVFmDRbt7M/awb5dOWkvBjfQ8DQDw7GTMapNXDt20xt/uVdqV7Fr7iR1t1k5l07fKt2MOul5QyQZGHWDXt+U2TFq6P4TLHixOA15zt5EUqbsFstJtnSjNahL5kR1g8KQUt6bfF7mujLyLxAWXKfrkuG+K3Sw2Hps2+RGceZTx81A0EGvsL59z5OYEaXeEHKeeIGUmUtH+v9oqrevQfrnE3yLiFjqEAYoX/QOo3w0UsnHhD4qofd9cgoRIXdFTLyMtM2V7OHJkgRhF3VB7TuySgUVd+1kU8P6lzaIEjBsVrEmYHVhfT6CI7RpwvJezNOg+Y1o4EWtE928u/CNAbFR4AOY8su92mySVxdlenq0piFCPcEzswxFjZhcN35pIT8ZBzIzlRXP2TUO2XHY1d4WwP9unFMicMdbCXR5RXxtvWc+d9y8HRVFwIEk7LZaa4X83PzH2tUMTXEcG7QVicHFPE83WIes47Tfq6FTLxAqvDMFCigjy9Cjm706Nndq5Q16j+5Sv7KxzM7V7kcLoacBV6f5D8quAg1JiC3K9+Rvdp8VDs0zw6vGG84F6H5WOhnZg4bED3fzDTEYB66pk7VPTgJn7O3FQTQHOuCueZWjxaPqkHnDePWxRWNzS6xZws8TPSDnRj65iA8QFSLOUWP3EejvTPVNNVJirRXtI59HXescIHVCELcUJINQBgAREQ1Z5vJW3p8YhyE+qd8mGY7+chIWOFJ3k2QzEdialJHXd96nuDNsn3Ok/j65D9gWkh9TYQd2NGZCp7zk7s14EfvGu7MhWUcRpu77IVKeOXiXrxnGSaERUv1+Yegs8Nag3OT8DAlDtsy6klFDxZWaDqqONJPj1yAwjZI3LdYEKbdIRm1bLEVHVLOKAN/DS84Dbx5MDjZTefdpR8P9+4xXP8RQfLwDCcXVukhYjnkDnJma9UnzkH/PEvdgvAYH1SusD7YroR0UTmINh55hl/hRb/eymFvuy6/6vZqf3cv0iyoMIVy7Fo4TOhXyeZnX2gk5r4o6hgN9xZDnYlwmJ9CFlWPqBeEwRk+pB69e4jYoui01Z9PhlTryRX3VQjJnhW9M/hyAOLEjcAaouutFHr899Icam/8kZJCmvYm+EnWkDr6ZauROIc73nQT9XCyEe5f+os0dk8Ieuv86FlN9xyJmlxuSoJXB6Aq3vxWhfpGGJs51r2P/P54PXQIPCEcjefs+7ixn85gWa1f/livgAR2rGLen0qUE7KIL9L2QeHko6awozMpMLhIF9LC6cdUMSG35szCqJcN5vpDfDEigge/DNvTs6jzdLYgtsAJqb7g08jXh7JJ60GwtwHdV0UA+/hLCoUvsqibBSi9lFpMcng8PHL6Dbd96a2GZVdZkpEUkbIShkUQ+CBBvMWrEbdG9YLDtC9y0Pu0iPF6XctNFhxmiYtfC7RRp5l4wEbsls8WNNkE3W0GyRlXc+mUCTapdUggoxWFtDRWEXjvPtKxh4pigwwOkoJghb5/bIhKveVGIk21mxj5re5/ZEDSKnwknQdHRjtFAWxSIr3ZHDrH+/8ZQlp8LEw5gfmuiA9Xkm2tuX4U9uGRDwYNsZjNw6gI6nO6BNfQoWFEIkuFqSPaFN6S+biBWEA5srfvUyaBn4e887eO3dZeiuU09/pFgvex4A5Iq2mE9U1CLOWM8Z/M+Cctd+6WQX1U0gK0ggn4vyaQtp8yK8uvQNfjWT+ckk8A6Fb/MOenfVxgwDlI/0yIEPh7/hr2tHSntRemZtTXY/mn/7ilicESckuYB1IKt2/94QzeKIzJUMGSUMSOEwFtOUxQh/Ap/xTKnOF5LLihq+JoAiuz1zddq+O1oRFheNhfI44yd82LhFEOLfSv72/FkNkcjbxqdK0YfAliYDBZtySQXmABjZOZBv6KXtcf1D+Q9/i5wF5j710DZpsL4BAGQxBUlCZZ2Di7BVNYgvAuxKpKabNswBVWK6f8qdVHPefyRE97GqKztr0YzStt0+/N1hoboRKUdKIRtSZJDz1jUyP8rbkrzxC2IDmmDWB8HcRlhLIaJxaFph1Qj5dO7DAoYtCzQ64c4pnq2ijTwLGG1MeU0U01f5nrIBT5IMgsdMc0JwZUmlId47nnjnNskSdbGmVFgANvs/WdBbZ4IFN32pU/xVsvNGX7rmuiUdPjnfNnl0k6sqGcoTSCnz3Us5Z+a3OrPAfHgvqIhr7AJzCt+Kc1frNjPnG4Tdo3/ggBZ10n6Dy8DjO3InR/L7GIxn2qJT2NiPcl6m3jmEGCR+mWLt3BcgpU3XogfmnzUe7SpciEgBqYnhxniJAUNBRHkM7nd+JYDLPiruD6VAQvaFupfVGEBzCwa+bGQOybIjo9QaiREglPYy4/vpyftwVY43nz7tK4BSD7XGBsmVmMVG5PM+IxUTE5DQWhokbb3ZUHnf2vzVTQSSLi9Q8PFgo9JvfCiYwHPUVVcxBS/9rU+uQWd7+JzfOgx9cR0ioDqsbIlyHMVxnGvTy06m1xTXgjMEWroeOi4QpcYQ7M8CTiUL6Fbnlt3veq7veYWYp1x20whd6CXeGiom5sfcnjuSNZLO+vTMFpfdmWCb8mX2uVI8fIN7SEMwl1Ef92orj/SUZmvkLhpHaMo2IjXTILAnt+9y0BVri1G/DWEpxKDPv7Y6+7QjhePsCu7IJwsJKnuKq76KxMkHxnB3yumto8WA+1qL2Lfz95tlq4WX6B2KSp4673WoAwLBAbksOvNpdA6+nBQDFtAUgsTrNO4AjNZB9w56Nf3k46odozGXjQ0wTrtFFJ5CxrCkpS1I+0WFjqZPPvFy5xup6PjXEPMa6kS+56AzFkvEHj34kUAkOw0CiQ0S3JaC/vunQO3yygQc3LceRLPLX7oDPl+EMQB+cdrMf+8x7dkYRzOY7qZEyV2T7jmKayhj0K4NhcqKVPY66OL3F9GzTv2nKN5nCqg7KwyxvbTWq9nMwh5Vrq7YHWryrefZ7GtHAVcAULotppRy18fg2rdB+MIG7RWcElsPvXKhDwZ8AbehuJTmh3zLjx2taiiaawZFH+/mjEYVM4c/Lxt/LVSl2+6fCNLkANKybc9wi0iBmon1rlyp8+FYOh01iEW2LTbZIozgvJvGFH74nvGDroHA40by54Yw0+7aPlycGSeth90B+uw4APg1l6GgKPvrVu1vNPDQ1zti06/riJM0yuPYceIA45sK0M3rYiBQnkTFj/rCe2Cuk9sEBlFxxzkLWfAnRJjF+vh7iy+q3WZqRXEhsN9GOn07Y1dHo3/IhjaRtBaU3NBSSy77paRbOX/a2lWey58ZFKk4xSWUvxCM8KmMn/utKBg2fkR5PUJgUMOUtmK8cEkBPo186ePyaK+0CEwkpneEeu7aB79DOyx3zOVYi1/wdJLKV8vJSJq3g7xoCV6y1E/4Uk3PBM4g7AgUZHItxjDjPFPz1H+ejoDZpmZMMEapcDeUL3We4j4qc1S3lL6w7FNOkB2ZSsup9yKzUjRkdiqMVh8cLkWvIEdZ8TtgGUGL90W6NxLGJcaLErEQ9FELj3PUVi/yNij/BH06T2KDxaL9OtBYlZ6aIDg1iPwk57iTh0mFD+25r6oXago6QSJkNP5gvJ1W5KLYDIHwfbacW89QEP2+OVhcQNnteAndGREKSWRSSnUYt77EYAc5vQKnyieMmwQ2Je2A6T1lNIN8X5eJNO1P6tXJmfJbB53KNxl8bYGOnfuYvrOinXW7b5wgDpfOmYkj6dgjkkSP3geTqSIxrspATj38GfmQSws7wJxb7/aQmuWchGZaSOdK0NhfnCQiVflQVlv6Lm7/Dln9pIKH06ikkI/9USdPn2+AjxViwKjzIYI0+JzLFLCv7NfXTb2YCGlhoHXkFEsvlKqbWFz1DpMzq/uoG2as9GZa4ziK/FX09j8kxwh55dTEEfp29WtzC4pBrhg2D2GDi+OWdjBcrMuhSMJ9WPbC1CN60j/OgUwvZQymT8hKbx+iQZ8ucf9qyYng88ki+mC9YHjz+ElHumX5/HMpaLVnLDzROzWU5SOZtN8SdN8WU1Q9z5DDydIanqzlZQWehSdW5nt6ue9HN1UzWwi6zujtYaFOJAN8G6u+qmzzqLxmZQuqv9ps9ehPmFsCga3QBmXKcsnrE0BweqMwUNWsE3kZhnHDlZi7cJTlZA42sQ69R6gfDmTukC9MbWZ6CDIF2710yMDl5LmSl4n0CD4869jK2j975KwkaO/8tas1+iaei+B9LrA+Fv826IzxGz2awOpLUinTTBG9quZm0m9Fs1LE+4WAkpJq0ESAiC6jTNF4hZbhJsMCa97l59XER6SU8/mZ4wrQXGO5NfpYzIBjfd3dG8p4fg0UfODboj7ltE/32jrTsTOBgzi1TzCa7egmU5rdoeM3ZjcMVWqcI8Ll8MS9h8KljsFiaNEtKpg31I7ICCg9Ve5rBRWUyApyHCcmTnAm5NidBYo9jYjQsXRxGwNidund4PMtzV2gGv8ox8WMglkdOfu+uC1AiuWaD7d3/QggotU9o3OQTdwEmGlf+u60y2m76NZOh4lAqkppv9n+s0nYCIvuaMO5K9kl5Dp8sFLt+bfSB5+hHzZXKwpiaLtAhVQ1SeGTNAb0NMJqPBfJyyXmDKDJ7B8DYflhaV7rRRzU+sSZ/oS53Grl7nTGRlqH+4qwiniyu0v6ffwLwQsTMLicEhmha9J+hvksiMQpGzbsoIrhdtYquZHwGUfs+iim8WmdLCMzrLEbxC1061KlkeDEgWrdnKd7axtkpIPPy86yxGHRXMlEXR0A/TPoho0eugclrtIPe1l0maf47UYJlKC8dExGUqtKsst3w1qgUO8l9zxEg+oGXkBSDvQfplFP3+nfJKWTkLM/T3KAxtMPjJP/nANGmqFz29cSb8tPKp0dSkTjpjstY8bwksF2wRGsOQ13O8Umv9is8Jw1afhbLv90yGGqFp5vgGUF0jf8oxw2X94iZ5xvYNUPP/GB8TzZf6r3GqAUY0vXNl+e1rJb84srxAE3YFZthVonjHT2HiW4dnUMtu+Sj7MxANgBs3kf0bdpVw3QqBNb3R3qAUgvolDEeEGL4NthJfnnUk69+RPIaWLdgTDpmTM4Yxcjrqrz58ffJetJYQkkKzORv1NSB/qT8zSguVPfQMvcNmO4SSbog21kwWe6pz+Z+jgVpTgsZNgfoLGxubj7Bcd+yYBoyKbWMKgkxLEokjcJOlea67XsTatyuvc3tefjMFhKVcdMwmYgvuBUCSYufmZvpMmqHidr9XCVtZ5rc+hf5ma4MJyKin1NAh+MG1kZZoQK4K29ABlSFQF7tmpBkM38dfzefrxi/dDtXsV5/IKr6TdDNMjznIp8XZ6FkhUvykRgwM0m5QEK9e/ib3a+LBY8PY8zWprd48NU2Q/nfAD+ONAbuBVjCPOg5O9m4f4hRgDEeFRVPs0U8qmra4abXEZNOuEOeiWkmFJ65xefYbEitVf8uB1wiQQ5rn9x7Il1UxAKWjpxuQjAUjleAN09K7ofVwmxq4MSoDCvgE5Vi56VUt7KzsFWldnf+Ui7ZC3Te3cvhkO4X2p3QcJ8zol2PWsxydF0FisFxcIdsPGRUYz4/JxhqykNFEVwXBF9xDuvXol1CXFSqIWPQcBYImRScs9JCtTCUXyBygqaXuW0TS4HYiJSwV9eHhVibb0LAVU/AUBq7o9LGSj8JTCoDZ3nuELKNG4aKR9jL2tXwB03VE7uJhSytJz07NvSXdSBMi28OYWWIfy3JzQthBLnpbskIoiXeNWbOtxDrHXNj0SwwUy8UkwvNuR+w48LqQqiPEGBaNOSWOAEl2qZ2qI09nYAjyhpzpVwOEC0ADKA5C+oe0qNNiB0FFAZ7HGtXrUImyTLVNqF6jAcQsaMEDiAOa/57aSV5rrdAtCYeUbVBqveYjISTS3RijiZ3Nwq7X5Ff0IRVn0PcnJqsFRJYE2K6OKCyA+wkoPvOhPwE+CIDSIF39X9FBqEDkzQvFSBGJkteP6cSP+KRqDqA/aWq/ad+Na6BGuTTE+T8FH0jSohVnT9idx4qvbd8+a2LBzMbOjU8n6fJNFhG0twuNsWQ+vTV9c+Q1NjUwarVPwNNXqd2GGc0OTf/VqhhpGbQSoQFpcOCMtvJqo4pEdtnxkRKpJNTEf6GtQvJxzm9YZImORPN0D6Bzurnw1imagDa3cNvIXByFMzalFAbChqgpE6o4nled6pskUsF5XEVCtUMU6zeEvylEmj4YfBKnk47GDKUkQ6SI5qDy1xHC1/2VHTiTgUXg+GXu3wa0RZgP4OuIMKhwuIQ9ME6Pze3WWqqwID80Z/HZzChzgYHahx8ni9NeHBtFcTOA4oUdzvlz8c2YQ/4c4xMcMlPj0lUYJjF1JtxwfH53nQ7N+bRuQ+VGR2VscTGWWjEy5UdWDBMYET3h7jW3taquL7cwC7ZfZLFRa85WLocZdcyTPMrqo1dL5B5KD5DSpkCl/5Q7l2Vz6MOfwfuKtS/uuaoLfschuOuoHGlIvGGYeZY/6Sfd4FqP5GWYSd/h7DGxooKt5dGi4hMk8xdQjs0zGY679iXkwr+QitXO2AyF2RIxM3tgKSP5O8dOO/IkkHjXjxcVYFPwcWSMGt68wVR3JMC5yAAS50m527ETx4vvMzvyizQNC5ecZORj5ZHp3v+UGIbQb6uAsaFBfLihkipBrZwnOY8O8OPqR15bh8FNMItHAr9o+uCxlPhc1pFX/nAVsV8HHD1zr4M2lKX+XTo356lbbvhJt7JZstcs+W+YT3ghMgQv0TQptz7aHG/qndOsVrUHdrp1tVVaZmRSEL4X5ERg+n/oMwO+9ifx65eQF6mV/FoD41oNdzg+D45SM1ovIHqigQaZrMtebtoj+1wOHC8rz55R6bYsaJNvHYxldYliu44vBheJk550PX1Zz5BjP9vPMeZE2Q9Z1fr2of7RPkQTH/oaLtZMjtSJpe4oQIyFRRBrnXLteSr/Sz7oeXBqE++GowOz6lcA1CKxkpS/eLKvvv+9BessFy9q1l61X48u9pknrRQ8B0JuHW1OzvG1zvSkt5dUorgp4gzKh94Co8Ha1jGueQJbFUSJCrhM8i+sMahZNtE6F9EBWNHLQR8fLEUJ4RI/IVaqfjM0EeIYWFAOLAOdNGw02beSsCVmzAr5+Ibnye5LsdhgrWNb0D4VQNjQtXQDqT5qC8XRC9UrjCuiYstzC9kFDnRQnkUBp3gLVO58vznof+jZdnF/byxVnEmN7Si0j4sCLUK2nPsQduJ6G2rs8L4/fuUbR0u2sM7NfxKK+Cq+a8wZgBxeE/JJQT8gWV/BCT2R6u994WiGygBo/cGi0O//wEhl6FgkAkzPtq2zIOcaDb03Y0Pyyfn4JQJP+gaw2OSsrmaxs55BSlqJ6x7381yLWfIu8D53jPhPtFtlotsvbJ63qhTZ76+6sv3m3XlcYH7N5S9Bs7wH4W8HkvSHAHns5rRxMUUhKQ5CNtWBPTkr8bVZnE2R45vlA1+FiPWoJpUl3GdvaYtylA1oUoRNVO/jxKAGp118suNB22dnJ0hIhu+/9KX14UmzBlzyUwzPbrH6IZW0F/m3KS4x9wr0s5KV97hP79OeIwovWPgntqObkXsVQ7dXBe64PX9BqUNodj7Li1NYgqV0RS1xV1aHvWdANEPnBqnSPtenvPP8meBf7EJUSHvh0f2IVFBBvYFzslcHzQFadEVLCBnx9qHCym66nfPQaCmo0GR3bHAd9lny0VbbdjRtK1Zuo5WqAEy1JBi67zz9JG0XS/WM/yuXTdXV0N0Y/FWRVCit8WZyGeqjbbzBj8J4ojwld/jZ6NwxJV491sb9IzroQ3hOr0TOcBU9S4JgjX0vkX754OVwum+NJ5QD/Hq9HKPR3YvwAQjaDyorGIxgQxTdcBLl4vnHUqyQG2g9GT/2Y20EIJDZ1l5SfmrjwYiwlpecXcMC2FJ9FFL13Kg7L2f8mS98KSkg5mxtLIBBybAEgNQ0k4zvAr5TJTo56KcLewZeiuqs3vITlZz6mfgoVp8ftF3zC/yVfV+dwL6aZgBcr09xP3sxNEkmKjSOIHG36awJidKV/kQ5MeN2zu5zH+reGaSpSEdQoQOtJWj62EwAXHu6UwAVUN/RkBNM5DgG0V9yzuHX7r1YQh0RLXaUtQrded2VD4DCLIjih7SmaqoxfxDTrpRomU76GUSMfaUsX+TDgQA9W/t8llaHBN8yHhi/pPf7x2at1WCWHhjPvT6qRId9dtTKdvn1ha7x/YxtKvSts8BGRWpFBZCVzsycWSGUYP7FUxBj8YY8vAl4xgjpOzyNnCH/TyWo+peUd/ZUORGAyOqlElC9E7BxdHmoqQ23VJf5/WfbLj+qMeQmn8c7YJjp2OougPEIf18fLyXBMuDH2IE3PExvKWDCQl83UlMaBdScKIzSNkRGS8BAYWWwzEoP7CMcXeWMIJ7+9UqfTi9xBrGL1ql6Lwu/JuHFhF4TFvVrkOCE7FFct67JFz0xwxcY3TqPxTlOBW2hmyed092/KdzCenIowDYOhS4buZ4ZSull2jlWu5SEmN2bIDoXpWY+3nzNtyt6wZrWeGHgRBplB8d9dfzeQZqeKioxNLBFlydMQ7A0YLn57HZWsboMw+lpFZKS2ZGK8O1TD61S9AHe/jaXfnuWCiDgwR8VdVObenCI2jUafs7YMGm0Tm9qRHx32e0YqrL7vuvx00npqo1hU94AVIJ+fBMPHAKCNyh9I+1Ald02MhAup3LKiydYKuJKC9oAz+yvt/jrXeifF1qUDSxNlGxEVJ2bOV1wd/RGVL9zaSKM+DTCtAZCGqkXhE2UXjKoLoXoFwCMUaUpdVqsIpulaLQ8I1oTXqYbErt/gkZktCaHCZWZmDWVOWI2hfl2E6YRdlFDxaQjJtvmxnZhCFbNL0JAsddxqazLOCstqjOJeTDoOepR6+I48smgys4kq1l9095o3cDsNO7dZrH+tamDgUTBRkUuNRbgHEYpkXd7yOF4R3nkHvqvIB+pygzYucp/Q7vIWkrOorNQKLvNdOdpOsfhCW6Y5whKXVbKR3LE3LK3jzVHmWbWlPVGkbif/yCHckrQI2v5pFPQD5XsbrbaHWG5ExHJfhYDl7t1wx1S1kla0HXeJwyOH0aYHETQ2FdvBqUxspDXztc30LoNsik2FZY+NIthxwaWiPoZwxdgFsUdsbDxLGJ4Kup6Rplmcr+WNscbqvGSB9dm+AXFsotKNiiwdjzPgDfKVHA099hdmvD2Ejelf9umPJ8uRk+4i+wPUsOX1ZDz/EEhAFgFpr0mwc34utWwGsYKZno3VwOsgEePkhY5XJA7tLXdB2fmZp8cdawNqw9RSkvWEP6moFsJ9fsd+TdYYquy7YZfIi/KGtJmos30VF0xu9m0uWETSvyMTUg8t5c03i2erBsxTdOGON70uGucegnvT9aHSksddBjSzRivNKxwwQr/eNN/2NbMvmpRfhmMYRSHH53OIXjlMIi1L+LkBeX1KprIZK/cnHruG+bI242uBfFJLj21Zf3ruRbfFZY/g5ss8zYcMeiM8EbnRHA2PYBOKhQv5CYi2mpJC2FWQvM2HacGLtgERktbJy0R+DPxo7SVNwNVOmwfiy+bSr4axg1zdl75SsEXmSzh+7TyMDQCC2brJFtSWlQeNrcTQjpHpkFAO+0S+1ba32FlLCR2Aq+HzbKHMO4fMJYtN01Fe63VGIlS1AxTYc4OyCXQH4C/aaoc+ZMFXQSqUe3sL56RKCS27h7ozkEjrjjzLa3Udx11zvb7tKuoHBY00MbjBundgjtJpabpm4A7zC95meHpxwx2/2IdYo8y8EEKPP++xo89IXonUZ+sV7pZEDs7O1iUBTzrJUKyZEZflPQJyWISuYDso56GvV06S4IsOEfmHJpnvNXwxsY5qJ9I2Jfe5YiL3ssSigRHl7tLqf4hFUAyvuuW1svp6JXTTsC8p1fkMZkzWJZRSYqbAwTPD2CNxmpSpR2BpBGxU03Tm7FwWG4CkpgXASrXJSEbZX7qiDrkyKYM0tkmmGNsWxZ6kVYvrHU1CJs9cdXxa08Zg0e43mTwZyuPRiXceVwzMGX/bqZnyg91ww8evK1jzD6Y/QeqSDjzeJhoSdxcSL13HwAXrnUlO6zYQmydq1X/LTm2AjCn5cyO7F7brjGzXeHZ/imMznbchYwu14Nx6JOQU0XF54eRX9zhn6/QwCUQRngsmlX4nUBQk8DE34Q2vzqAI2HFQIkVP19ZExRUh5M7HXwWBaCpjXf5wuy9UtYWmLClFjgb62F6YvHf/hSbEWN1ZZeJLwrmEBmtaKgA+oFki29uoqh82AV+qrFySRgwvPg42wqENPNH9wVOxZ6Hef90FNvAO5jAX01PfuvKyLfl4/mpSFxy7d9QB3KACZQS7nPFqlYbVkonVViiIt5jraKWupb6g/8PpxZ8nc5bokW1pPKIvrgKbo7vBqYMaTbWHhy0jYdmX7ftNwDjwT0amvQ00hUaM/rOGI/FAbNfFFb9EfzmUBrNDad5FCOlnjKGwz7je/aCAT83Guv+NM7w9pKYNwcgYv+1+djRocCdFSu1txOJ72b0VScXWysev3aCvodAc/XX6yRtjkhp2eKjU9ZkqKz6K89trDUx28Q8l2/TOrc+gm0PPlC0l3p48VqrIE4Pj97OgNlwPhpqNH2Nf+DLbKXplN/nYGFYYc5URkaIX3c8EOcm+aOGyQnT9fI41U2aSFGfki3/a/2GwYvxRx7+FVzKVpHQnuHgjNyGLK47KBYBEJLVUvgN3moGhyDT8Emd2XU7xaxpgwGcVDToh/J6LKQMpecicpK/PZn2kwkwrF4ccAYV7yeH101a64qqDGl6I5dsAN/5Jq/OpbvimtOS4y10E+QC6ovkbPm+ekm03xdPfyerRqcFfH1U8cXL+ObBtRuhtyEdpW/v9qN5ludYgH7Pv0tVi3rbDAFI7AO9h61dZj+zUILx9qzFuzovvvV+oz1VWMIMjv1Wv/yxEFTHWAVWK7BALQZcIK0EXoPmrCJ5dAdClwdtqsNQptK4m8alU/Owilrs84pgooAUA1PVnvRQ0GsLmSaG32IpVQmDVPFleu+qWdax3kILiWmORn4txc0kDdWclx+bN262QkZRGjZ3w0pePoLtlT+lvS3fUsTmjawF5BVoVIaduyts4ZTtAfyw7JX3xex0J7wqstsoEH3Ce0bKkMHFKOkl26o6N04gyUOQl08ceEedZZ8f+Ef8pXEeESGqSXo8BxIWtGvrP+VEawd/xzAx/tnvV1TQEyGi58VeK4lWzXzsK/x6eiWkbXqHj1JMh4mgNOkf0XNbIiauBEkUwwzTfE30OLIfew3I2601RtS555ClmY7tPgOEii2sUrECLEkn+sqh5jXPawXSk/NFfTup+teFgHQmReUwJvHu1pBY9ULtVO6KeCOd97kVavn4cFF55PaZCafF/zixpEK0Vv1JnLO+oWNXLaU0vPMZjinU1NjePALNfLwBJcoQ2HrK+HVP4NRnmOY0qOBk9OaZpj3LyifIkyyZ74Yp5rlZGpTZen1LEtv+QDXrx/50oleCleFI5QZ06XioftmUOJ3FhzjVIQjM9W+a20D3Es2CFoZ05ChHQgUJSsOFLZfRcIvJmxMGUoVAtqaqcMr2tIyvsSkkRNm6w6y9GEivtQkO5L/Kv27esvHppN/l8z9TI02gVswFy/bhY3ecrirm58J1Rsldcg7pZU/+OSg2hzsfEx4M3amv4HVaidh0qUehRRxEvpJJWHPUTN9MaUovk64pOwn9ud4lkUjC0RvaQrzYIYLKFcQlPTXJbXK8D+CXJA536SAFvqwjM73PLDZ6GY9EIke/sAkJsTO5NbZYAmC3BiTZ30CJ/130qVPR7t0zcZg/Jh/7ARkMYPDMPze0Nsmy51eq1vhV1dkYoVTK1YMWL45hMzcxbjE1w1rDmkuhtpEJf3qxqfiuSGJf04LkZwltQd3PiY79v7ezxodI/+rFKp7Gl+gH8unEfBDnZ6BXOSyS5cmKnXghxi/MqlPA048q/dlrtmXWNNBykscNzBl3Co8E8JFPUhJgzcRN4bH1tjVfnrIu7TtcEtGVhmtUVp5Bnw7XTJiJdFZYTaX9mc+OjE3CZl1GbRf9sqYxcHoei3afh/0qbDIpwbCdaLu52lXOjxCPeRpIdJ0+patz31Tw7ulgmUSr85IxxlSzq5TFaZX0S6AjHia2fsVvCj9zRm7MuPs2MbhVO2zZnUDbmPXCosj6BycGS5SVz91bljw7/XOVHH1TEySTw5RSpVrfAJ81JnFp1+IxGXadfw6MaGoiUkhEskvcAhUTgyqawSH7BQ6pg03/DFTfYCUm/cKukqpZqJE61ryVGtIYbZDSANLgvPm99g+XY0kVMkaGFsZR4Z4W8LLu3YBwUqyvEvrCx0J73Bhc/7L0Tx8/0kQFFqsTyjPpJJY4MvtAV6GZqkWxbM2aV0F/jYPu3whGlp7IRQmlFPk6oOZ6M1+YcFdUHaRq65Hm3gER4G7bcMZhe+rHtjRT0YW6ZD0/rBu+y8gln4+D4gStZE+ksobKYT4e2tZun8RdWx+B81aclp0tzXGuBpHdTbaKuzAaeXG1428ERZZHPrr5XwjtlSo71dtZWi+yaCemUB0RkPewaxHjBtpDWOe2ruxblaTsGq04WQWWtXXA3QrVDyMPz5vJQpP2/q7Hcn+O3aUOUKeRnyLEmo7+OlaoSosR1wAwRb6F9VLbvZvJw0EWJPX7bSHNER68VA5laRIRkzsLVR9RZd4zUrjrrwH6JzgcGWl0u4YQtnsmegDZ0+lrqt3GApu/XPmqa4sV8tEvGvPrNhTrC8PGL8TZhRnAQy2N/M0TRB8e3/9J368H48Ra3BnvbL/AwO17QLugZ9VBPIVEnB2bQJDQQQUzCr8D++x+mbAwbpfrEVVZmqgbnbMI1sbkIVSp4IkEbWSMAeYnY4rHqG9j3w8LQ2ljzMODoIHnXgpm54La1FxuLj87uGMr+hLWtmOguKBrfN6SgXwGr6zZ4jXgYwtcOnHCGmdNAppXnpXw8h9BLuC/jhcYv0BFzUIoUnfIRHF01sKizYs7f6/0xzC9wt76TJjGBj1En7fncb64+d8WGkAddTxXDhOcCXMpCnQqbDTFNfg4UC8z/gxz5Q2fFDmphxpeF9jHPAVfErkYYrJOZdygoqI4nNScLQKBx/N+8mab+bzeflRH0t6RyouDpG1WX8Uu80W/XRb2/+d5cJeEZV6YiTKPLwR8SDNG3wSXpEUbA0DvFgq5UTIqmzu1HWDCG4Q2kr20P82nGEVmo12H1laXAOByEMQc+AVF6dPP+QkBXNEq/0Wdc5QwoCsWIfK9qz6aLrlS5MZefRmG3bbbLwChYuxfkRm21Gywixr7Kl7zb+PuuCMw6gTwEQIZ8mfJjEzZuGWDsTxeM71kFeM/VMxb71HYxuRmOWwqSc4BEPdDuvmL7qivyVrMnVI7SyWLHa+15UUxALxDhyX6au2Dhk85FMqTG5h5mVXDgpXfZZLECtwXn2mcytmCfXQwNTFs0XyVQfXj49Mg83ZwXrhdcS3HsDwW3gjXCDQO3aU9Ytf8GsLS2zAkt3BrcllcfoPL6F7wS1dLPvf106DEp0oh7Z7Zl9MLLJX1LLd+xdLhBqajE3q/D6gt4tLQUijexR0jlCfYKWGCWprbwpuM4yUv+qXsUy7wT60QC24GLyIyPMigtYqRJdplRp1LPF/JGIKY7sN8kKaycrNnT4CL4kPc+fTTLvPe8DQ0rtaSCLirHW5nBiYIHXOLq35n12PM29rFFHe9Cfk7abvP/3ppSNBsehTWa49rwG9kLQMgFblLLBSo45jt3Zx8j6+rSPJf8s6kaWUgh5yNvjZlJMhmBVwHh4kCtRaZTE5W7byq3Gdk6LdweZTpqIK+MHJy1nLJaTV3nHb+yzh515vpVqyQtTHDDVaugcCIvDKUbTzwaO1pvfT5yJcANNFVyqLjjyjCR0jyC/S2KOVyb9T9jaI3675k0EW6lXWFUM3LUc+wnZ60wfc9UzE2jkktwezI3vWRj8AL1wlHo+/rK4YLGeow+j3RT6wxIihbJZe5c7MJAVB/PNyBZM0mImYXc7EPA9dZOXHJo+27eMM/D2CZfB7gxX6bI2kJlriKa3GtcS0l3fxR8yqYLxdmOYIFfFplPWEi43Ox4HKmGGfQ7XzM1g5lN55jQeuh0bA+iWduK10Tj7jh3Uz+VqWpGxaL/ZL+P98E+6dykQ+wQdHTgCiMmICUcgP+GHcVdOYQxzFrmz1++7h93UvjCNKVaEjZFf1JlarUhchKhi5WXhwbONls5MyxBdeUVw1PfGLs/qinMj1NTee5MpfPy9AoVwnuEnCj9fyKHoK3VtSnR4WSP5naof2N45HBGHrITlCNjfvOLM0m4To92GFHwAGDDAUHDqxPSIOeVAHl3cj2oMe0TAVnmkLZ9l87fR7fN+AOrkxbOa88htDBSnGoZn4uOKbzquaK/BIArV9JCY0FBIZ9M4+ngd1UJI0vWOnWsWfWU1yKQrMScJ9pMUM+6H3QEMost0nKLpHLxbMNxgar1EDSWlNO2p9sHKfj1N1VpsRa5E3RmRAdW4W53DjpJUBdaKEsd2EfjSJk4aTE4RgVRvBosJKLFBgIUPzCdV1OPaTRJsuGxr1hIjUFL3qYd1HTZmP7b0bhb/3FC9sPQA1kRGZzsCKy2NoxFpnU72gm/5hyPJFKBAVORpmS+yGraRYngi4mirmvXAc9wkOjGYIiXDhVwGnGmbBwZ5flBwxSrx4ADyg+n/iCjswXtNpSj5cEorCB9wl4jPTwRs6lXNmDgonhEmWfqJ7f1CTc1urvQMjUgZs1MT5V7sVssz69mR0Im30WTFDjT1GZen1WDtAOcSGPaxGdrlAg4nPZ8nwFNq/BVubymOPxlFNVCnHPisUzOsPvBORKbU4wxaJMGYNwQrEoOpN5hPqbgDvksmMIkX21DYDQkk4kGy5pprbhr7I6vG5mKRIZLc2hOiqpn1p/MVb0YPC/TpfBtezgdiinTl2x9tHNoBBRyQF+IolQ+JNaXNpIW0V7l8+zqWrHz/u3wGj+XdZRGaBRYHW5t+N78M5t0Y/yfrn3L7gCuShkVcppABfmqn1ZNFy+bHsbXyv+W2BBBs1AVBbXo34FQ8r3BaU4MzyjBj2LsZJkXJU9mA3ZZaGHa1X/xneYE+mRHaWEd9LWrPbgMr4JqnFDTye48rDvKGKkPFO34GZjzGrtowpLmF2aH2eEJUory6YctxH4TQbIGHGStb8Wht4jLI4PN35pUxJm5JJZiOh4zVyKeWgKhiy+5rrYVcZvizQlpuGYRjuWxsWRopI9aeZhNh5YMfUueubMhpGd8j3fiwZkPnvmzBQKZlvXQ/T+WyLGrHTslAr88816NT2vG3v4N3AeLo5BbixdcRUhH2IiR0iKlq4KJugEcQATGNHRWMS+9PoLIQr5QsM/Hs9HLN5BxRVdQ7pslGw9swnjvS59dtNW5qY7YCM318ytuA4+XhVYPQnzGGBF5YKjSXH53GjRaeo70kDX5ZLs+Vzhry8U16MoD+oNJ8BH4Ut8lamEHg+P2FGGFFoN/XXlh5qm+3L4Nx6Qs8L2UCfeMBUcG7R8OzDalWYpLZ6WyoFLvv4JadgwnP4b3xGwD93CvwDftB2/E+ASn7t3Oc78tvfhIyJHVhPO8GNV771r6qgz0owTw6EXKUOENi8yb8I47spHrK2AMRtF9oWqZHZdvWCEIUuQRMxIdPtdVI74pzTydIPfcrhuMqTmSaNC0d4i7wFTw/Rhj03uxvgG8FtB84Zvi/ViaXmUUHmhM2PS7vK58Xd4U6+mcDMIObomq47W+OzQ/qIuvsBuIZT8SmRXzqa1fwfJWxQxqEX39hbPnWEvxIM3aN/W8OotgyLAXAUPvQDuPwbQusjCgredNC4SIaf3O+gdj3Fl9a2SCfeIZnUXRN0ZIq6o4H+ns7lcKihtRiP9Z5kuoY7K5lCdIK1BEXUV+aiQ9HXnqTjia3RH6tYoDF4pxyr77mCu8+P+L8mQj0gl/nJUbcmRJCQy1jX2Atuv9nhRBFNlJ+IJzoA710nSLqffgnCeqbJ6rQ4iZi0EoeIjCildqwZB9JhlfdkkEXwQzYDyDcU+h4tt6Se7BU1H8xEReL6VyTE+T/EZemCxP+TEA0wh7ZbddkkhMnhjoeZEJDm8NMs6seEFYyENd2RGZhctHJHgS+SVQzaj4W/0y3kwxzX5gWUwc2To0SvQMY4g6sJqPjEqQM/hzCVtRk1N9Bn074tEHig8PhiVhvLCd71E+zPj4OroWgdJraQygY03/Q6eUNkVMg+PoXx/mrF3XYexSioxxqE/ubdj4J4D5TWxVwi8sqzPTl2hCIRjPp14+ZxpVqzjAynB7GFIQvu3YVuJLxoO0OWrNG/MFbayYpQT02VPs2OVB6uxMG4lB8x3/2hphJJMD6iW6ep89EkHOnKckwboXEP0ZRstKhUWb7dmi9AHdUasByb3ZR/aB3AH1Mn6gRT6fyRSqzi73oLKd0Oa/wC35DnrVDvoBnjxIqkNuMY6qMW+Y9sOAB/RnLNkWz9QJCk+cZeHP7IpUaYu7QsmJxIRDmnTjMN/mxCEj9/dAeZrOlMgsX0zEcum0vNvc01BT09H9BBNzA7tXPgpcg05UvFy/h2KGXtTZmEivSSxv1chY10bMf7KwY9fy3k/hJIID644ogCAei/MhOXNkDbW5IMbQ4x05/+GO/Ca2gCvnWjsobIlMaXNuRr2iH0B2mtvoaGGjHBiSMS0WCaxnKYNMjPxM0D4Ejjgcbgf2MQAnHwUZSjx02zXc7vRE4oru+u2FVMTFRstPRuZgSX/LaBVI1okswKeXKPeWdPQUbcaT2OPm6JeISdNZ+JcHQYVLKk7QXGNmZhiRz3VqoQ93CPDmxXo1cSpabjzlo3gGpbYQOdbcZVV1b8Zhpe9M5yDyTMjeStFVNGSmg1YFjH5n24PWzJprofDybQrCR/dAcxBbd2vTjG5aH/B+g4pfxLdP5fp6J3mMlJ5W8zg3o3u/L17FSEH2m06mfMDmoQxmZ1fxFkGHz0+hSv6f8OEUkvSq12fQV/DeXgDT0j5BSXKfOAPfeUqQfLjpXB4hqFQh8rAne19P/eZF0E9c7PwxCS/p1q8HYGyugaEyY6fwJz1aLsKh4FUe5QI5sV7wRtaRhqKoYq6vyzBA+QyTvWX0OZgjfRGVMa6wZ2BXrvWbtdV439S+hTr08P21iYNaimrqD8dnFaVqrEPAoA4AbiSm54Pgj8ztblJYIerfZ9hbO/VAPqhhA/OhTnP0fWjS6imBUWb+PscVVizDXc2HHAr3OwiiC+NIO8SfCYTs3V2fnVb7gcl6ugcxF4Z4wJg9FG467a00SomqzGN2T+IACSIsSzUOZc29LHNqZRybucAarnDbzUvnGfq06XcvaEIdhxp1w4BjYVMiN5p6Ity8FEWbB2u6CWqIVXJ2X+cTY6q723TD01MWiJuYb6inoJw0nk58Sb+/+KEn4xRcFsMGVgehmVFoyyl3O8QR2Sz21p5xWdJmSwRmGqwrcB942pKCm6bgEGDluHYT59+/61FhKXmCuythFHuElisslxzUrRMo3S/JVFxzldTWYCgsPKdfDqGQwDSv0XzzmMyuGKwhbutyQZi6kFMpWh+xNur4qKMZnKlAy6UkHgFQ0Spss40wwxYI9OdtPMwI2/JZ5uWLEdJNgqbwq920wLDEH7rX1q3ie489iGgNRc+BK8CodnkVVC0188SHdwLKOmCqI9Hy3a9B7bTHj9qM/oJtgKbfEKWrLOMmz147nN7IK9vNEK0A74mjziSzoEgr7fB/QU6Ac6e2z4bPl5EchbQPyz9pbt4gSy0S1Fm/Em5uOuyhrVu2lgnyh3rk7VA6rjqNd04jCPM5tVu3DCPfUQ+UnB/SYCPUnkhgcf1bhnRslwGx39MNQ+0SHWNJiIkdEOHqIE3aN6S4wq5kTYu/7WYn5VvIAUMmJ+8r8yQd2M4Kj4JJln0bKN6eoFjfVe1iCF0gELvPn974nFkf364O/4g2BCa70tKSIhfNt6PHdEpg/MSEMTgqwJt0QVeU91dQsMKJLIAgPxV4sbR2W0kus9eKpM9oZYmx4U/j4KZ2jwRjmDgkojcbZY3h+U8veELQ3G2Yltt6UHzm/PIbAmtXkgmrEkzANtm1q/RybcJFqtT2nrwql34JTnp+wwTmPOZOZ8g7H+dBUNGsebE3P67+Q7B7Dyqr6bbd7Ne27NR9bdPZP9r+siwBjuA9Iy0YP4m2carp7JjgXDmYz6aAul2rXOw7rznlP8tBmPxJUeyxGOzxktdVQXWGb10ySwbGGpBFUOnXkwA5TBoIQIMHB26JU81s9axAIGhhkI+7qY4eWOywAlOzKq1JO723WWEYjqShaTIKPjUYjgFsTya+EopwuXl3CpZFpsPwGA5yilHuz22Fk97Fsq3rtvk+CP5hSYoXV/t77XgM2WARraB92hzf2e9WxvGJnaLyFnZSQ2z269/W2u5mKNjRDI6gqkfilO0QiEI69syPBR5JzYZbehgfcWWJn+qheYsQz0cZmRuq3wAkLstTSjhsv6c0dxD5V76/VhTtkA6KP8/DoPZwrheOxOeAlB92EJLd0jlEUhI9Ls7ivWka/F+EVLMJdzaHXZI4g3QlhGaCPYRLOD7RD4UUbmT3vHDoer5THdc2LQhTqb+4q4zoqUEcKSy2QW5UxgAsufRQmtPKF8yrWq3NhIjlp9Yfgl78h3SYwPvm4VOQCkojj3OJos3sd//157ZwYHQm5fNlhf3ehA6XLqUnxU+URJziDJ+gjDSxVRzSSoEgxwISJJ6X6ZlNrRssv7zeJInxSXvOfbk69E1V8RupwO6svS/6BDQ/1g/Yla9A4lV3ly2V7tMzi51TPW2IDLJi69dyGVrYGuCZ1QAIfmsUQmCdvW+XHTRvTUpnRGnaWzMF7M9VH6XySKSiutmCDLzbOkbfPt9d/hMIYEcTRBwh/XaY74tYjy9LCWyDpuGVDxxXMhJyvfQ3rfPHy+bq3guy43U693/MFss0XkrLazOpVuNEwzS7ZojDKyatqaspW0ZwXobDRa9rpwWTXdsPLu3zIWb8uYvsOoD9a3yCb++lAaW6EWMWzU9IuqNea5dgsgo+yI/ztxJWd9Ns6kbP9asdi5VFdLA3eT67RoU6KRTSJtvq0UmumL2O5+lRBixQAPTaogeuHzlxvYaZnBzUb4sP1sZOZGTXR1wfUYXkKluxde+Vo2DvuKI5j/Nqd03s61T3S702sVXj39Eh1Va98rOUC83Ukg3vRttk3iGtbKCiifHzvvI+iBllal9ApGqVfSiw7bkUtdezt7VXbNeoxa/E6Muif31ExH8t4gpyPu7JzvipxyrPMEtYzHtR7/cPD6yAF82rfBNsAvG/SgL1gTn4Jr/A54SdVJJUL+H0Att9in6hB8jDFIO/jyvHEfOTjg6CTvXdeV4sdjfDQuflN22+hDghkmgHSFAyZ7VVldLRMmLduZPxFsiC0skJwmWvFVvLt/2LGl60BrwYtBkrRZrafBa33s3IJH1oKrj2I7pEHfodh0kj6CoZd7RKWf2g6fuPILB5jMQJnOXOSfx00G+LQQVd9Lnp4Dto26wJ/6kFzNltENw5k8kAPYVTgWlWj5W45NWXiUHvjA1JEGN/lAimfH9hYCSPv0zqTmBZc2RM+FSzGFDmoNEHGBwiPrx8ju6F9+hca7xtPkFslRCctI5CRbhY+nq1JVD9smTamjQf/qzwydEv4NGddltyc4fg5VHCn14beaY0ivi+z2V1OpXJHQKkWUesYdALieeiWyhGN2biJ9f76YUZxK9x6vaDA9B/s+5rGjyz2CCd4o//TuZBCx9afd2Hm6kmWvLGxHdY2PHStvYwg+RRzA9MK6MXnjPJRcrECPGDY//4Ddb3zdR6LXvY4P+Rjt1S1vCUuIBZlt7gZ2QLcfh09jGCI6AHpxpGK2xZli7Dgi1TfFUGJks0kPk7buYnlgIRCuKba9r6DS91VbgUnSxSM7RvTJzdVrtt7nMWEv1rQ9F3AEp8sijrIesWpFTat7rinyga6qsnnhHI05kvsgQlZRYoOe5q2HoKjuCnhnjCW+4rPLqE1If96hNoAQcxd3iUtd7f0B0/G0m4FXsoR0ih/H8SuAGK1Ch6I+jKHJGyK+cd7n45ooSuSGOSmvydBLDaWCGtdJSgYiDfq+eqAFRHhV1ybxYOgqeR7hMwKUBoQnWdAINUP4kg5+IpAKDK3bHsKPDXgSBCqs5dNR1+C6e1aCM8odZ6x+SOi6wCU+yz7ySTxFVcVQRW21uaPSQlTTIxr1M9DrP0/gvqnq4C9exypEvNqkfOIEIvb0WTYmSHd+DNIJXI8X194AnpPgzF53AfHSJjN30JrbALfu5qVZHiSqp5wliUX/EzUy2tiNhJkXGqdgtJiMkG1s50BlUn19G+BXyWUL8/4f/2964XxtHW3wH1afPwjSOmmnADYE4+FD5MzAmbZHobalUrn9dSmj7OrRRts7ATlX+gOyGKr4JmfoBOdDx51Dntg6lvz1MTumZmq605EOtmHv0K2X9AhBFsH6JtEoYdgBBKw+MXB8oVgW/BDR0uvkNp9ZaGC8WXwPlPZqhiOqOUAdYsO4h6tIQyAUdjklaeZ7+/4XW0k3PP7jAcjMPkcMIqY/AWdt15G5ymXLkQ7o9b9+LtQtH6raz49oOrvSwMv39J9FO+rUKVVt+7Fl8/hyqAyPNuTu6zTMhrn5sVvVqGmBe1ZFykbRLuAFdLMamUkeMtckcp/yRUe8X8VDVTUe8M8AI5TB8jfSJhMqQV5jWAHLaGMkrjsKMsEMjCU4Wz+WhxZW4GBV0Di7+1lKsP0TYo4AfBot2gsNroI8/+ItYvJZvYCC89VGCGh9eIkD6JzH72trsNEuVY2whWt1OLoAj/4RaYlxlSPo9JtQaBG4IP+GWZqAGykIfNn6iDKcBViaCWWGnWJIa5y6peeAuvvEFzt1I0qcQRkgsshcOf1BnGJFvVD3qX5Ax4LBaZJHFfjBdl9JXY1M9JVapBirlOGqq5uvAmBMrucQ52ekKaFPACD+EcfNduxCYaT+yvsU6do6VIpCiCH86TgLJ8XSUOo6UKsnh6v6a4LBaz/aDCR9Qe634clQe0OGvZ0bSzengNvtpUXU0GfHyq8pQaf/UIaHjiPqVImEnESCNFJ4mKcrfjQJZqTEcWjaIjb9UfrFrl63mWhJwgvRs5M0VNjZNTWq1j7ct6biSt2ac1zkiE6DjLBOIbkOIJaDCY5DweIf37KYRGrvjI0z8YkDjwuQc5eiuZQRx/yF809O6EjS/LkfnAaims28+ueRWUwdlBEiUy3pJSf5Sioolm3pzQYfPzFQA8u13zLc3c50Kf87CKuxzSj5+erU46HmwjFTJP1XboY0kTNhQksluCn9ikev14PicW4FNFWjU4h8+z113lRCLBdtkwHIS+9aUnA32ddMux78WNeZnDpURz5YAVYhH6RE1U62qZDxaYJGnVHmIHQYOKd2OZEFMeNcEYZ6bBU5aK8rHJZWR3sS94hcRcB6kdQbI/dyRqe2ihRHTopZ2lrS7OFPD2cxz1XvpPJw/Qu+GWEkTyU7Cu5cWNmp4dtW0LLirJmG4Mzwcjja8dSuZoBATiT+lstUuYl9x8G6SvqilXjqbUFXC3MS7xEPpfp406flu4u+4L300jbLSV3Lh2PRs5WX1AQK+hN94lwLP3rTCZdlzrGtH3NF/9CCoTrNl8Hi++XTmLkiCzHEo/474UJu1GkUhvjrnlMc1aWkgyW9hGXel1I+YFsMI0eDEBM4mezUronbF7TxPrbBi0cUqoW0db/bPbBGlfqDUA8HxZgk0clMC/MtGDpmbGccxYS0JrsUv8itVBvw71jq31slYZXHN5FYB0Pg55K5Od3IbV+kMBgtp+C0l0WGfk5hBG+cNBNwRLedz2FJe4azXwviNqmpWDttONb9Bu66KF5f7DjKSSKZhElaIdjL+yABFLw3SImd51vLTd4NX115io8BOUepRiQ2vte4o7Wm0Xh0MAvYs61CfC+nCKwypLH/A6/Dmevs5Tqy3cGcZav0oAXeKq1vJsjAR5xqGYrBK9W0eMatPJWDKQMYXAbRwcMBvZuPpXMK/BGIS+J6vNWfmIDgIQKLse1Vo5QztI6/oOF92BXgjCq7fR5X8ntawu/QmC0K1csBySsw338TwTYJEzkj/UiVqu5eJe5rbCTq7XGTVGOLyt9ArPmeUV/8iR8c+nSPkTdpcWaxDKFzPwVy26ED+dTP+sFEfrTkCOcxZc4ncL7ITWdvJK+2eU/NVtiZ2jgxkEYm1Y6nuge+g9xDu5ibSGRF8Rv26QLveyoL/HUVT+It/BKMgAQUbbuprOmkPavese4rSuAqGEyDUa2Ew2OTwRtXyEykdmcOLSXUycICgSmPQkF+Z/tXqTTnIChvB+NBqzhacsTfMHmk2FIdunsl1a7l+x1I3NLoaYgkBvfyItQLEWUmwxS1WO4Vlz5C74dI2aF6uFpd1zdrAbRuvF16ipeq7MXmCHpTFkGzgGURxnQjTDbaaZcdDhf4lYbtCReDAFyqAo3Z9Rlh7unJzeQMWWAv8lBn5czXbf5LVh2PO8iOY3I1aUzlVDsF+ZYdrTnW8yQmqU2gAh/aaPJwJoY6tyzVk4/elvlgHr2bkrH2hsCElIqs3+H38yssSCRpF0TmQJbxpLarXY2hT9qjy4BGfojGi1qq5YPOCGwU97TiHnB7cfy7z6bBzm2HFP520V/E4+2/lTuu7BeuW47gfInackfGWeXSf93ZaC//N9o58wq0MOOIUTbBTMP5HnKiQzFKyDaRPTdI2R6KnZBUFzw/Mq5qIbYMCvPhKAvGr75nR6QoEZQ83Jb9+O4VlCGOkxGvSaG7qq5GX7m4S7MA6iqDqqW3lCuyOrilXuWUQKPZntnrlq11IZ1R7eNvQyl4G3rCimGpniSHdfENoJ/S87CqqH+EshIGGq6pkaZUX7UHQ9Ag62NQjxNUQO6ni+IGSTcMyDoy55pWJ0rQTb0Xy6tJO0o67giYpjJdwNKkQ2qU5iiyiwsquSTIslG+I+LjqRKjQOfd+LSVPGjdNNgwLVAqEvJMfGz5iFkP8CbDLv3bJidbguhtpDRMD6jh4zK4tIt3gzlvkhdmuStLgRd6A70i3EPRFsWV1eGdsuBgDaIE4KXyB4JzT7OYP2eDiWJmmESCz7xhfbrcuTgHgJcJ3o3l3tG0Sf6YjvEYJhKdZ+fsU8k4BnvYzAFjyEdDR8TLbGC6YffqXsl9IQWdYxmAs2gvojpl7vvKXMg8kq46MEp3urW7KKNzQ7x9pjjB8YFh4d+7aXAod89h4YJF0SZamf4v3chQnxNBsJISXsZeN5lxD2+10wuj2I4n75uN1U49Kz4T0DiFEvzJ4FeGvzKlsnB43Vr0fw+C+pxRHXwuX9cvWIF1HuSkmGJvIs4So2ExyAU3v26ZBglaQd38n3UATd+NqT0eOSRCKEf+5W77Aa8zWyhaLSwhi0SFa/Sn1UipZWl3Ugjq2m18tIBHV4DDeHRkzUf53G+H594qpKWYGgnKbQZ5+0b6xh3j8+Mt6XF9d4yioNHJldq1yIUzYvVK3HBjrlCjK4p+keThBRBEM0+a+Y1KR7NdQ0aJCQO1rOtza7cVW/93TduDXUZeFvvaTE7XE5YKXVPbUJJPoNpEp1NAsjaDWL9feanamktaKhAq56OHuStXP/0FBVJiWlqrbQEizCbIaYzH4lrD9AysBnaOIdMiB6yxeeGQO877/pgVkwHVca/JRGXjGeecNpOC8/zI3o8P46Ai+N4pr+2SZ5t4zxBU1IOWbmYJGf6B4t96YCDB2kSxHqmK0PoAEW6/fuSFxUsTJZ1D6Xeqsj47ipId1rrP/111q9dJxFls2IoITNBlBc08fllaN4vylwo9IRhVinzSjclSSL/xpanOVnEChW0/ZM/Ly08aFsl9hnWykF7F+sYeCZloGprkOsm9yFNMN48dy1hyVrFHDITeyDtIxhum3mVj/AtCOUIz3ZXbElMZbrdobuLKBZt+sIhVenvlVB6PEuBjSlH0NT2XW9SmEfbyVwnkj3Xvn2Nmv44HRUATfMegVTKLOfn8+QZF9IvN+ad7NNoDXGgVIumMFaVZiOd4FnxUleEOl3qxOcC3pqE5Akr/LykCitXuUBl36a08GQ4C2qbDokIq/QfkqxNIA+4jkx9JJDUTt1Xm0Lv7HvgUjAFsUSKk1f/YBGB1SLTT8k0mRz9eAHOH0u+K20yyVDsMtXbUPwoQqLQ8Lrg+l56wD/ecbwYq7vb6p1NzqfunFiA68jNijy9eBjM/d6UcTkb6U0O+tZTZa1UOG7GDjC2WfIxX2j+9964ywvRvYdwALBH5e53R0gWMvleYt/Irf7NsRVqHInfJY3eesrgbY8GDlLE9iEeuSgOC5FD7XWIzCQMM4MBHPGafxD8pIUpr1AZF6sieiSXx/lvAACfw7qVHFFl23l0BRN3+9sC35ebPgmGirr7LmbnNGLs4Wv1GyLKO475fe3sxDeK5TUX/i9e4gXy4JzuqfSk7/BwZ5aWlRxPax7Uawed0FWhPHfSha7RN+AIupNk2FbG0vmn39fSNHBRwAVYjIsJtceOokshyb/JtzW6F3WirKwvZme790G1cf8+y6X49qxaHHGqiE1LVJX16C5BDgJAEloV6DlDL2OPlTrYCiUWZ4TINMFyPkA0kiic9hKz/u6QqwxDdCguo+lWfO30PMVyA76aNwwEAIaMYaeyWtMwglQIVwtjdtZq3qRfzdBOzB+Ddc95zMgdGNF/D+z6RswGjfQDS20K5I2C4g/yWbGN4KenwbzsmBcQZtouqjSTaNVhdTo5mNHcXXn6NuDhHDtIeIY2/duFl1ScsLbUD5Gn7oiio8OS4IeWUa4D13d+8J9ymfqyQWI78ErCdVNlAmnkni3u0isvTFAdry45jU+A8cDWcUlPxpZeGrsgbCxwaF96kA4SicLcTvgsucwRRqIUyBQynPC5pGtyuz0phLtn6DNfS0AM0LhJQb/5yrpQ8tFCbUvmO5NBAobkqNQYe/35GkjygJYPXJs2FtClQQ/wW14ahlTxXz9i3AOYKIjjJybAU3zWF4r25n9O24+Dr15h/dBFGd0GdiNStKRyiKi85dxj7DnNETogrn5Or5yeHc2Di/bcDlJtlVeIyNDFQ9KczEGADuNq8LrNbvC9JsgAm+dBfbd7GUpueNqvoOrmnboiA9OYpI5XDz6EC3iBvY2v9oNN4T96UKd74kPPrcrBpV2AVTS2v4A5ElbHqBI/IQiGaQtfWl0KJU45otsDD9fGTuuw96PGAgQsJ/jT3Xt6hHm7r0fc0ExgCMwnk8JUHzsj1156/UyfYdsQWGP6uoFEVgXzD0SgSpsdoSv9Sm+dPI2sOMj93EN8My5DU9xEucztNql3DDLqp/kAwUqhh1CPM/yU7jCmZYb0InS5os9M/W0rQU4oTziJ1VTzRrVxVnP7OmENxAD0nKflyW5f5ZtvLvuBv5i8F9sA5adxDNNhS6Am9iLwDlc3jxT9iLQu+DWsaevB/1kLo7ktwlZUQb+Dnh8q0CfShpc4dhIp6/QVIA0sd3mMcQ4OdIhy9AjEN7tUtFEtFW3VHgEEAY13TgKhDXJ5ypVgJGoi1zdTGbrfgOJ7tkLEbf17FWm3tBHnEDcJkGSGAFhwRCynbgb9gKFk0s5vaNL39y4FyR70yq4BXWrLaBbAEjYvqNEVOfSLspd4jUrX3dByr6VAXrq5KrlQ5Piwl9sQjZldrfInceGhTJaq1sBsyW1epmtYSgK8yW2OLz7AiJxCkuv18glmlKjlf0km+BlMDB5Bmljub+rIGZEE6Xlj6hPgRYGNUMFxpZ8ihBEkaedgn9mHWe/6CW7J/TP/indI15estO9k+4RhKdsMCMN8mscrIzGksudvLOeHafjSR6TQ9HGxgOMH457/O/Yk3tyRd6WBcHs6LVEtomhdo6xItDu+3D+fOyEz+aO/HwS2EpbYWd2RA5HbEySgSlZ+aWfjV37CCbCdBT/kxEEC3TL0/CEfoCKCIUJxsItsxSori9/kOX8Y78e6T5zpzlDzGHc5bXlHKe/Me+Y1iDIJoQfjILT5SbPG4N5sy65GnOlpDAzX4mm4Cpa88Yev3jex1XVOIIA5pfByQI4CIAvzHavRS5SoisvxxHBnOGXtDz6YTGnREhcznmjsO4F6HZLOPjq97Q7ZfMyP6PwVZW98oHkSPmWU6LtZHZOXHeKpPTZe9sr9gAczrCt6KkSvLSACF8G5ac0JCl7vm25DPDueyMAgZdVnN4PB7E2WXKPIvAnaxO0xBI95Wpi/kmgf4kxjIyH367qSkOMd09+Vo0tHHXQCQsp0EDiPgRRIQOBRjTB34WmPxq7nj2o99/CmLAboW6x5pdiG/9O8KOBbVy86SfhwLZhwTasXSAcexG4jeLCTrfz+HwFKareaN2FNQsNCdKjlyW4pCYdt4CS4/ENrAIOitPszimd5qW76ubGBZJZeYaVGwMZNae+NDHHdwa27Jw+tfqcCE8ngiPeVES8/sIINt/HTKGXzJSHWQapXAmFUAq5JwLr4PAnglO6S4yWmy73o4UaDInEgIHckUM2X1EnHCnPH68UmAguaORFu/dMQ6cTn2TV2hayG6gXAkJKapnx0/FMorAe7wbjH8ZNGDN+rN65JSkyu273nKAd5XV/3+D6htbcILNdX+zjQ2yXRXRqBK2yejsOvT04QzFyW9wvl3iWdRmfytH8Gs8ShK4XsGst+33vhyHovxDMSWjNYLLnwb78nLvzGhHYNVQPHIG61cNNAA8QJa/yXobb0+vHQJSFqenebuNO71fAqNsyVNUARpCdopYfoZ6IIa58vVEKyOGgSWZnYzI6F6YlTks+ZqCXpdEwvbvC5Q1Kk6Oi2E2ojnuDJRTLEGCAPry+l+oT6Wq0oIyWaL3mAtCFQzySGFcBuPQJXIc8WlTGmFbk6RbYvU25whTfAS3jx1XjhpCrq7khg/l2d+gNfp8qkolLM3TfCjbfWCb3VRvdRoJpOt3ZL5zdPyc58YSfDN6Q4ciqeUPgPLcOjVJ/wz4WEDyweeCtWWEXGTUHf2qJyK76t2cE+oh0iYyH1wGIukLJbzam4yijn1s6/KOgpQeYTgWb8060GbWLzvMWR0uF5gJif24qCMYz/Iea7/4LYrlWhG1I6utA/lzDCkCQGcmwaqN5jLhlY1k2xUk/dap9OHYmbiOYtZ3aHVB9PllZA1Svgcgz62gJqBH0I8Zxrpqsan26zL0z2Xrv7zJNVAtWD+99k6tQmaceUvyTgifWBisRYh4a2eclts7KiayMHaJ91p6UhfRq1Siqx0AZJZMeLBgJcAbwWzFEZHc8X+LzPG5HsAa9/OqKAyOTKbAsNx5YS3zaGJT4WGK71ah6p7hsykasFE6mLtzeuM2p9k54c7w6Oxsqbt2YXI6wWA5ZbffyrDwKTCNC5V4G0Sf7OhdkMziHHT2d/MRDdLdooKWvx8RrW3ZEA6KO1RUfSL425uAQ2ZdYqxZbIHk8xHxUxMMZHohUEIEHoLr/FHLETXfdacDKdhNfdLY5VOUIrE8njXfj9Sz7lc2zQGQWHwrH1HfX2wlQNkdlt6P7Q1vldzIwgfiLBJTa9ypilKfKhAtnuk9e1KoURw14Ih86NZ1xHVcWI3B32t8Sd5apCXovdsFHZy3weK5gBUgtMagFkKGBZZU7uQQJIWTHlV8+nFVSo/SWfCRPmM7z9cFgucRTtoQlAI7UWMPd2tmiyje3hBAUsrCxX4MqoKQvIdHWaiHo752HCIn6FcsVxjruUjGXCzj6CwkeLoNkJgYs49fWIAsfXBkwuPKCF11wpYnMc6l9lICzmsOWGgUFvLrcHSo5elCjosqFx+3yAOgWQ1ymiqy+Bq5zoK+LkOfIzy52xpbtcGN3pRf0EYtrpbPLcJJ/m4MPWgPwbF8PD2oIIehinWA15KbHFBwcqumGaUBHEOvj9ADH2yjZeqPl0dx7zl7mXl7S+DCODGkBGbyXBtSKVp19hhivJ305Ot+PXiGTCd3BGgZVZ2osjCdqrJCvG62YiwZ5iBb63ifUl6aA1x3rx88rEa17HJ6QIc+gw9Z3dmgcPqP+RXQ0HmudZHDI4A2h9tIDddYxd6dnCE6xw319eZevBPLHHc+cxGSCCnpfgN7+oxEUB70glF/s3dm/VPg0at4DYUmOpKrmMxIx48Gfapn0QNt0yHyNUPluOIBxQlUMyNtE5Lu9vEUGzueAP/EYSxZMnz9wLZ5TTrh1aAt79EkmAuKqv3GlzUzpfGiSk30NOGXo+TnlM0e1K1mtPdW3R+zu2xWg2HEShqGcg1AiWaM2wY8+5Rbj6mEkX/yI4FOutQZ602lZQ4HcoKWQv8rIq20ISjIt9dpWtlczAJlRlDw1E/efPEzjd/Jo5II0FYIFzODFe0c687WagyS+zGrK3/KA/E/rttM/YhY652MEet+BmC3Q1l3qIIOAQbuVX9+lJHWL991tH5YehjoAWFRuJYts3cVaw8Jqhm1Q6xUfHAfL+lB/TbOrlbwPrGZDrAQrv7+fvcerp9K38qlvsATx2VqfSPc+hQV0KrRmeTZjnSAKL1ZOlqiuj59WcPrjG1tLYTovotP2/LB1ujKYEd4f1adQ6eGHWM7+htYhcSiSIPKTm80pV8pKGIujICHlSO761N0om26PSZ1cIvZsCEDWyKdOB+3JkkyY2d8JadWyRPneMitzkfjj3MR70bgohub61b69HIVeAVXEq48u87MhQZdOV3sCSkpk+8VnrM4vRhaqDNp7QeVvzsNxsizu/GmR7B7/zri24AcKzvDCEG6A9u7rFfUyWP1GTmLt0ToaNMM1HH+LpN4fOyPXm957PvN/VtJNrHtHODvCuK91R3D/7zHSBH0Wy2NilSyRtW/7365yZs47JYj5yWLOZf+onwIOomn1zfD60By82vswxO1BaUuHCZ6VjMRcUsHnWybAKaBaMUOzxzVrQtt4ilgvASYuFINzbTgIuYICbVXA+p+BYNIxiZ8y9GdhU4ZDS63MXCsRWAv0VZF2UxLtOQwEJ7f8VK+BX/HdK0r3DzHL87hvmi36+LTQjGvl8Glu+aPFkdSPioUmbGSnQYADO4k/ntvMA+Z9BhcIOpz+ArWuenpSJZv0AUzDZ24dYH7wtJns8RVyNzWctlM89mJBvmu/mnmAbR7c7xsgcBB33Sb1pUcenu4bEVoTu11OxdMxFxuzb3a+oC6Qd63N6wPCNIibf/IVszc03hHSd0xtjZ6lYf+ywl9qJKqOQVW4wPZkFfDwu5lLOAPaAB9VYoTCuFF0NxTCTBn2aPMSUVXEpWzdDrYMqHjqZ8iu8anZKPP2Q+7TaAx0IrsTxbZyfLy5rQU8qVaqyQ3wTUQUqaRKSdo/PREzCq71XnyD3Hu1oF1vT80jA2hyIXv52doELNboTbmVaMQ+CJhZG1wf6iM2Y4NmkpmTK4JyN4XyO+Q3nXAUId2rgLIJTFSFfN2U0sjGIzaQo6wWzhWQqaHl8HQojJgSVlhFNKZTwdWvyZnHrPVoLgUYt7O9fdjH8T4H8tjCuRW4uasPgVYEp2FTcgg20+6XAD8IMfrx4Fti8fEf6lzB9FVLxes/F3RQbbTpkD2WuODGsWpTsry+Z/4a43lo//24q9HYQOSMG5n4d1ILQX99Je6PnRaOeqdKyZFIUqUZY4PNYGlYw/+f/96twYizUUBKIf7mC3kYJ/EpJ0RGcob2nJuUzC50EpBfpbS4I1fk+91gUomaSIEYD8ccVgV10HM0yS4oBv/Yb7t0X5UkYgfLlSAEJt6WfLy6sZFrZRT0rzUYW4IDiusUP/2rAswvolTgoPCT4kUC/JLRMb4dx4ooHf/8E2qqBfpXCulKhoYtFxSy5cZIqmpw1BEcQ/Siz/q4vGPkm7Nr5JyGCPrGrv44vfnoyrNpZg2BscRUT8ouB5ZHeT/Iv/366YaFani0r/Qh6edIg68rHS/zBOPS3SR/tBCrx46gYHkBdWRpKOyY7eI+eqIQEEjKT3k2FmeUitRAtd3TGqrGRUsMr9DSU9zdTAKTdIldXVGvFUbnDKRO1emauXrumCEVK5lhcLJyVKP/Exegv/Mc0q2mYWQeNokWMsfGuXU3KRzvFozQXDQCTOBvhaUbNcbJNoKJybzq7LV82g/WTHCqtVRi33/qs/SxdLs6zAgWt8/fjOUWARvp+wjCqPkgpEX6WI+krv2YvKyn3YvMvoh53V+4fqeG8ttTbibfKIsopEqArt78Ng84OwcQQQHjGyUua6e9zDWhi+k3eCPgeXOAUh6kDm7H+pkjqZVskaEWSGOZQ+zy6z5w5MEaQT40MIGZxeQ7hTsZHRhtdp3G5Nlb9mzcn14Sat3ssVwtODqoWxLa5P4KP89SWxarNRjFREfhbfMgpuO11tF0ThnIo9KtHPxWsDIS43DWsudGb2+xbPwRPNO7t7p4/xSuhoDtLfNpH13N2fG9q8T/LlzWY6J4zugb+DJIjjaN5x096Ot0ghC7/M3TorVPenY0iQ/fM/g7KrDsifz7WMIMVnHqMtX/3bJC4LfPxCeu2WwTHJN3cIhu2XHNGdTKj0HPapYKJ1f1tJzrXoo7Qyw7NCeCtXFDzMtGS7TgKMtYkcLNTOFwNZj/eMRJeuim9YQf3EJWf54t2n2hHpDDz7gMJcUE8jPFgyDJSoaEvnxyTHCGG9qOTLkHUdMvJPiSbMyK6TgCognQBvCoc6nTCg/VZn25xOSSM/HtbqfkBXXXldCxPg1UBnFxThaGtwH6Yh8NqgbQ78LgpO2b9EcFA9wrnFYzhu436I3qvu3l/JIzyoAYkgwOCHb8e3PaMwtjUflEz4WwljdtvjOwmH1B5pux6MqZyt9pJqFcaArdEFBgygbaiBXy9DQHd1mpr9YoXw7dBBjhaMZV+NsGjzptdJUKeEfoTBFyIq5qudH+7KJxf6mA+bJST0bkc6e/FXaVTseUh4Q0ERsZjorHmFqR+M2Q1F+QksrZ/PU9RvdBRc0+xwABPCxe+82f/rz//goFT5pvhnzEREGGP7OaH81sx8/pAolyBkUPI2CSto6BzIurlBJxQG8SPLGZmM91jqZ/GDAj5XcDQiGRrZnW1Bi+jjk6UQjtSm6mAF4MzQFexgexB1dyv6f9ImzdUupl2vAS6afkykZKn2B6+opuzDk5BPfptd+5XQ4corZxQU2U76jHzywisLTxXjlrbi34qCZV6yxbax9Xv5cg2rgkdm30ArSSgTeujVXHjdGHdL8VUjXs+Y6w74ujxemb+s/TbL1bbZDc8pDK2vYLWeeSvnMTii+qhnUtTwq3xJV+uAhrhsRa+VtbcNqES2BcE6sNedhcmbEcsBON8Vjy3eikPPm0SgE5rS5vKjG+54K6mHAhs7w39fTJY4tUbihetxTBVVqSPI82kpRCr4oFzY58MkI4SHVZ0bQr1Ge79hPl1rah9r8dQRhNmoyXQifsLjqHTextfuQcvSqDGDPRR0FprV+JE/kE/jq1WMC30gZK1dGltD7mV/3YzfV3h1EAIXytMLNCrJ8xnhq3dwMZtA0KrgEyv9s97ak66SaORC5C373JIVM67rUlAJPRz2m1a2zhp7nyodak0KzGAhNdKo50ZR97EPTooUxFruC3Sm0WXlpdIbV7BSH79n1W9NDUs/m/yP+4GTOYfPvd8KdJLe70UpBL+E1kEf+1j+CH1yqjxwWcwWotydcbobC3YLgPxekdMam1ogn2KiVu/8rulOPXSVZFQzL/i4TYive7g6yLHOfVepzUxXY5gjSwTtRHmJN6BjgX0B5xlByReIT/nPXLtHOPDJsUA9ZnCo3q62V68kp440uKVRJE1C8GmNlZdDMy6Xnrpw8HyMKn/tYQ/F7NHipxKG2D4dSol9pyQhcmI7Mcy35RRDk+1+eXap+gfx9PjkZol1vtq8h5xhwlbmQe/fwLcUj5Ifggb2pH+RxNaMwXFjS/vrDy9/xFnMv0TSepbZcnDyS/k7hc4O/88IWCj+rMPKlobZVaUpc2cLDr3ozboVt5RwQP1ck+sD5a/TRePHIRfg6Td58JSB7gTOOIeOab8v4Ju1lvZs8ZDJsSh9MkvP/sghRWhy5htX/90RXl/o7Xx8taVSITR6aQ59TjNKlfvyR67AhP0eHgbmK7pDtP01DV0Y5xX0LWPvHd5r+xmfZf1vt0o3pJ95eO4O1elXh029lQuULpGlCJtBm0umkWRgszdr+nh9bg70839ztvzGIna6jqG1NO0oY8ctUxde4b4/IxG0GnzatAV2a8T3bUlBbLjUksSSLR+wPeyJIs3rlqGlv6hZSn5iidutBlj6bcS7kM/SgYbGWIycWvUM6OQHP018o5ULwxzdY8cQCEFD6ChxRgvnvP7k61Xwz4O5H5m47JcIZR+anKtT8msnm2dM9rE/JmWFaaqGs3OfUsFvqP1B+Q0Ar6TA/IbnG47g2iQ1FF779niuxMS9wAxIGm+w2IhDVDBC5M5sUMW5BL/0oFrds+86ncK/6pj2QhAOsDMXZIDkAtJ+9URZGXvT9yX2HONxIlVM+UkHXiSMeFuB+tOO0F2w3uNHSNJZk+Zp7a4CNXg3NcjkzVImhS99KS9iGBDiY+Wgi1mU86ZKfhi3mtiVrv182rFWtAmSxnN0ZY9NhSs+XHe2WywJW1ihoWg4+gGxGee4a5DNDLiCB4xR89RiktqehwoVNPF40KLEkE7GwbeA2YZG63krtX/fPl14JoY8NcmDtA5KgseDuAcU8vYZVjwBQ1jAJ6CbS2Dofh94rsV1O8OQaA4JZoArGKsBrgayvzxR2fTQOwcKiZhejUvXaoajicLsKxp7nBfkwM+iJxRRP0Jiy+ilvQG7ffqnSxrNvTKog5eH6tmyV73T2jSy9HahemyYLZC9Y1BQ1kbR3acU3a1vao3RrdwmwZyy9mip1/bX6KmFObKdnW07xUhuEueeTyn2/KL8f1QuMm8lkxqQE0yZ2zg70/tSf8Vs2ZCQ/ejkw4C1jsVeWqs+gyb3sjfgY1FXxNG+hnjo7tM1lLIu1spF+sHmJ0p4EQ+dTEIfsq7QqR0J1CwYPpbrK28KSZoNOSsr135wBT0Pc+mRdr6exobERoxcctQFJZj1sg4UjP8N91aWiZpy3Mqf86wCJJmZf91ElLZzraEo+CW9+iv+c0rN2RLAZrv2sdBWb7XQZJYc8IZ+UI49gUKu51C32IjxQusObCuZ75LN0gct8yGuvelgG853K1Y4u6c/2stES7r+gLKlLx7nlRWSopkoNGoVFqUeMIsIGxyLHUUnBVBbw6a/GqBl5TfdHu9GUzOR6czVCvB9cgoRUs0TY9Y0KVALortyQAXvAN/nvnMzALzdXVSyrjyVFBlTAXkne01jcirZVyCJdZS3gZUqtxz77QX254Loy7q6zlZ6EI/KaMPSbnAJurLvUR09PDxbMWvjmQe5bZoHnEdAAUAtFOsS3AazvjdKLNvNCpK3pGaDgJRcn/DvI9ryPes87PfyYAd1MkmBq+shpAUaZ95JICKVsZy1Ytk+sqINJyJAjG8jfXx2PzHVr1g87BhSPZ2gLUdIpjca78jqMv+hhBRyZ9oNyRKgdXRApCDD9TzYo0jgu7IT1iydfuoI6rIGTrDnJph7o9nTQRst4LgZS1ClNhNej/DJuYzYz7wHkiOwtacfPHreK8EHtXLIXfkbEvleoHpJAHYu0m1yDsMGEIc3BXWS9XGgwsngkffM+o+cPI+MoIyKbbIWw64jbkBPXkurpAVV5NhB2H1j3/erz6RJtveqJvU2B3/gsv4Y0n5k9449tBCxAJSzmXTkz1WhwHssyfidpM9RjstlmKJOJ+mcYH9x/pwGv80z3Ee005ZsI0Kw4IG8PsObvPRYaKx5FwCm2YdxcYHLDQK5f7AhdyyGPybATJC8T1Quhm0/N8pgGSfISrn71nd0gD/jd+TDBaqyBz5U4MiOJZU63wyZyvKpzFi4exCiSR2irwfodHgEhO1WnBnnDDsJUzjGXhqd2qMwmk4b/9bFHDl156NW455KOkATm0LciIWvgngjP69oECXTY3Ls4sr3q1EOEw2ZWkwzSCyDedC+o6dfJGaOZuTnWmqkh05Kuw4zPBoWr8WgtHU4YiNWS1kHXnxu70zZPBfBqX++MJYSHYYNv19fZNNRyF45Bov9583KLJbVZkoVh8QQKFHzaes26F/Z1baYGvlc9M64Ohnqb2KGE+W/ABVQ6dkC8p9mF2epvTI3qR3DKov989+x2xvgAExIjC/l5wMTFa4rhG5mNlIuzDUTkZdRuhDbVsUJaHslyjp6dgLRKsHD3m5X1Tyj7Yn2C+tGYsXXOC2Hy8z49L8djq49IuI61eovwWoxafSsJP5WeThn6sM2vQRFL4kpw6E6Y+7WC0lpVdv947yPaa24eFwl+v3WWrqwJ+1xVAiygmjg7T9ek7G167KaYI1M8cRVd79OrxhqIsAbSpgfeivMF3GWIbtlq0nq3ODXSbjwEngJ3+ot5H1O1ENKPN4CGVlMWw3fr4VkFwsatEIzSb2COW/NkJDc1MFtdB/hgrLRwNvwkXn3FrCQZSSP2plFrgUdziAqttL4Cr4bjcvRPnEfWDxUh/L4KfHm+xBfq7VPA3qyC+sYo7Vz/D3cNaLbluDk3HoKSauUc3ksF/KKm6y7+YGdljKVhCJ2QCbsSBwhfaoJ7WjMjyx65ZUpMJR9jr7XKvIXxxA/c73uc3FXkaPLtex4H097knET5DoNCUK2etvl4mJMgqNkpidGgk/oDnT5Ha03BgyswJkV3yAaWcmzWK0ERTqQR9hugODjohsgNFrkKiXEf9Da6hqj8Yqw7LB6OubeYMw8GtNU6hVGMyxByP5hkoND2DDbBeztuBARiltGCxeg+7EkLzHNhZ/akm1mheYPdG/SgVaA5QB3HD7XteEbVw3JawiCznJ8Ka5kK+0MVeQZQvsdrvObh+LgHCzVaK+p/Yxr+YrJWMGJLD5mvgxF7wBXFcOB/kAzSrwLr46/2GVjV0UUQmj4zwOsFxeuA9Phk/SVlTL4AYaNtHn73D10QsiNjnjFPk5ujoNJhPMrlrgXr0oZL29+vCTSoLnIbbyKNkZrmYvsN8lz9ypMypZexq8976zwahp6KwWUESNIxW0O4SBez+WT2pH31+X4y+2NWwRY6eXFUH57ByjDYRExi4qjUSZ7HNnl33PkrEtO1JRUNK/3DF87kZgcLnQQkdqLBI7+QG4LTCMMs91d/pwpgaGlKy7RJJ5eocBJ3ya15ObveN8GMxAf2G49wmAL7b9PHv2uSjq3y2qw6LAkaVn2H9ckCmN27xclu+zL81bEs39R0/5OQ+z7VUKpoQZfVnwHUea366CJEAhaFI/6t9eU5XQWTbrhGvxzCnvyd3Q8WWg/x60+yb2MTuSK2EUQCXrlUzIxDCG07CCYtvgD/q7vE+Qnxu812CTH71CDa6a8aH1cHQZsD97Af739OwO91IAmJImBn570M+tcpBqVjBXQKjgmkljrlV6EpcQgg9zVBtKaQsc9h0olLIW6zXpgHeV+jFKLuAwxvgNdzP7t/sA08o5AJRAq3Zvqy/2cjI+McJGu3VTUW3L3unFGlfsD/ksr091UbbpwiCBsLXUmzVZ+9gDiNIg54PEJp3NZL8/VP+HYlZIiuulb+3GS8H0JCyepVvFqxgxU8KXe/qsARH7ARv9kbsfmi3jrYa3TiJaoAJu8LIMDbs7j2q9rN1iNPqftyUZPXVHZaAcPa1mrmpHTVkXUTjzaMfF8a6YIaGNfTQJKE58s58CiHhYEbrGK9xB4EwS7rCXhtHa75qJUTRRFcD0mbq7V6KZw1vA2LcbICq4YO79UfPcZjFSfZS9rnuFyFzptAkYbpXxVSHrlktjbSacA1FBQ0TSV54TpEPrp/jRXVW4u6tE8M3TeGsYuI/5fP/DHvBDzyJp2S9DJ8PgbdtU+NEvgzGISU99COshafgYFVE6weAFH+rKXOpYBfErS0cRpW/Jd+ejaoas0v1wHuei4Id++TxE9cjbbOJKKo3fmZhgXBZtAXbX8oYA8BjEQW83a3cJ5nSOXKentOaZGK+/8lLuKKHU1uYhX/svJ9YwUPDFP1EbehrSgqCprbfF0fNsuFNgP+fx+0zrv/9qz1AtMe54zn4Wn3vbjAeqHS4FCv3v6y9Tm6OyM5jHGRYZpcPJad+Sd7p+bXDO3OQEOua01fnTfNskMdQFUWfiYJ6x3tezXnb7heVeRYnWQOWHN5cSG2+6OGUBlvhxM+COElligI3d2jLMpe2xkQLBxhcy4M1LFTBUWRdRCIGMcf+18T4kpnFjcMUCv3XclO1NiOAAlrjiOldzy+k+wIwVXuIi09RIw3p5AeWXOVGJ1gXUqVKAFVUG9PZSdG61zWLysufaSKmnQFKJLlri3+f1i9U6+mjyG3ZlZMTGBuGcK9q10kMqoWNXPLFHLl3rxI/wtRecz7IBVp/WjsVz0jaLN7w42XfPTEp/NLQfGHOsy3Q6R7WJCFL7uFG+YXkY2LA/Si0YkdZo/QmK2idwg8tzUyIsKcshk2xl7LfbFakaZYpDwqpmxVoYD/37euWjfWUaBmYZ76eEmWr559xBCvX0GREoFP7UQKrbwaHPMatIJKbG238np9u+teQ8aMz9ad2EqPSCsSMbZRoiBK9W841hoOdoxb9jzS6B1PEu1E60qoDIznREAtH4y759BDqqyGpunsiAivhHud2qNp1Exxx5eKPHtgH5s+AXRqWuIvJ3WyPF2btE3ZxFqYtZAbFkl1EOwxFaSx9SK3gCDknlc8aJwY87NSWkDlm+hbTqfsllK6RqUcyMoiX56ulvDxiq/53gpnaUtKcvEKfiV8cYWwtjRKjKgTZymW78kzxSbIhvCeYannscC1t5xWQ0U5fEDN5AWZN7hf1aa7c9fAN4oYRwKmOlSbtjzElqkL2VQsWMZVhn5SM3Mdk3wHCyHFFYrc1hUxE4X6XduJWgMgZrQTzu1ienNP4yGGhYMpPO9K3Jk/V0hqy5Qo3A34Ms9xXLrO10hhml41aMCmgEsq43+g76za0WGjXfERvsvm6/fBl4OTc7bmm4wdrWoXGCCNwJGdyNuK4BgP6aX4kmc2P+Jd777ea7llLpLDt7hvsXB8hPXP4AvcYyTXO677/kPZ8SjmBs1YMrYKr/DRByrofw+HEDP8mZrG7OLzjXcD54QlkQ5/NO9DCsVRXV7OmB2pAvPvcnaCVN2hYOE3W/aIxo/iQb/iW4AOSNTW8TmP6A2/7hDqB1BKFmwD+79tKR16lpOZ7Meu9cAWe3nbqpa0w7jzJE+id5s8V8fTgCsZN+x6PnKc++DhTeWi1A6IS0SGl2ZonyMKtWYK1gMgzZ2uvVrujzCJIoPQZWWGA0nRQJIaprxOBSyxzBb4b6N/vmMJ199uHcOkoWl95q65sZPHVF3veGCdGGIWbVsmiW1xKEITttWya4P/BgoGCy4qaGkOrFG0tY8J6U4p3SbemEJ5H+3XYVU3W2guqCJLWkK5gj60pbmlVs4gRPNYdU95LDNHpESLLoyGyCNW7ify8Ke88Pf94Y2sYDF0fodPb/3zh4N/YpHVoFbSPU/c5lejWPvmCmhQPIPbs3XrpZvY54Iz0MeGMKLDHj3tJvS095sD4mfPzX4f4AoGjo1SOwjv47XknLLb4TG/VxZj2/8lOxpLPLGIYrjdAaoYTET14d4AyYwdE49pclN+lZ5jwcyNw8Iwt7sQK9Ek5Ju7qVOaT/CXNEpeQqfg341AyiFXLMoh0M/oxYIHsxHetHTjgtt0958LhBwY+J+RYTtRwdMj5TXPfrusJif5ytZEKkTANVvIVqH64/l/sO+0tpue9zFMbX9I659XyAACfsTLC+7idiCNwHEkTDTXXrlaV2h5L773MSYPC5ja4iCzSVgkZ1Y3ds1JznzHVONieozuAId3Qbcu2PJd0yToe5V5nT/XioebJPQf+lWBH4N/nuYcvxoY21ejTQRKr3RP88EuIDk1f0yCRb0skMQmGB3ZpGGAHQoZIliAYnkU3unfJU8pTB4Jw9xUeeDHJITHnfpe2dVQnAVX5ytZsgOI7PUpbD3Hc/5z0nLQ856ejQytVawaXkc0s4seaatNkp8waVRJ2lsUxOKFuOIu2NIpbabUTs2ABBvtMwsKYMKKy0Yd8aQyDDNtp9CHTBFZjEFjp10YwG3c+mroPWSHB6jEfkojOBgbELx5FWGI2/wVzYK5b+fuF1Reo8vPWQPm3afIuC7GB+bOpSKlwE58A0uEy/ChoLl694idX77lDsK1N2mSvoVaPtxieK3k5/CI7Ld86YE+XCQNS+GrmC/UZ+c8Je2RUOAi5rBcFdKV140f3UQ5UEMi/G0BXYXw4BnN/pntSIU9ffrLy3E4YP6OnCbP7GUhO0pZxE3DZsC4fFCwCymexuZFJldtnB+XVHKPAF9c7AXbu9pwpLVwAzt/uifFo7xvzUBBe0Ee9KeCWAu9DESeVMArVyBPgZ0ORHqMKM2/V6kvY9rsd0l74bzQT7o1nSJ7+FdrqDJUogf+FBFxuLgkhrCEuP+wDDDTUvNIvMv5vp4WzjO6UCOUAcbcAhSF6Gho/myPYc8yThsbNbEQLdt0ZfcTUiZf6Lol+46vn/+qDo+DDvRWJkfPUFLk+GVYV3b2uYUJZfhBjfe6kCRDmzMGrmMm/bWW5l4C4mpmjiGeZkSH3lhn7mmS2cre5ij+d0a5fpMbwTVdaeG+lRBTW8A1d8M0hlL2Xsnxi7EUPWsT19kAzj46JBJMsA4fWeAKBz9TzF8vjkKTJdMcN8vnuhDXMLlREjvlDREK9UALMa8ePYweXJjSKnfHQ4jWKzhWCKZSd6poC5ed2unhSesOg6PH+/faSvoHcD3u0tkGgdtbIWsZTC/86Ok6DjMDw/5h408RwVTTa9EDuK/WNijRYow84S9PwExrO7L48ACwM2NUAU01kj0N/87wZbrdjWaGMCYAuOO2g7NBZLOcqS9KQBJswBgkl+ZV2N1dgKloVezmyGWwac3RYRrEU+WyNMjxgVlQX1S1oaSIY8jqUk7vAHfcU0pSWAWS9lJZbzCmgcXljI6F8zuhApTk7DUw+Sse0VJjL3lpTcAbBOJ0xhgZaMEX5YLc+oJFuPhLrIBF+LF7/zcGPVDmpsEB427WAqQOj4n2QxD8rwfUk6uGPorUlBvZArPqixBiHrJfAmyP7KOMglDDHhhlJQ94qy9zYm1If496FH9gkat9Ndq1tRQ5+CsPY2szVaIghblcbZ/hNa/bz36EIOrQWgMUfO+vh+RheICLxHDECGYtvLJCPwQwL4nZj6ZXFp+vz2poeai0GLIh0fyt9jpyzh9S70QvccqlrkyN84SYDG9iz6zQ7+AhdYRk9iV1qf6M+kZw0mO5ZHovUVNaUrqKbtwk4LBLfXa+PGBbiD2SbG1zG50GcE1vp51Anpj07rRjvq7JxgwL3Se/4/YW8N22NCni1GCMTSLuRpV0mnDVxHvYLkOFW90hwXF2lSQNj2tDSlO5SkidKhE8WeDKd5b3MHDCDPWA6QCDxLDhWQeseCbxw85Km8K3tPTxHzpz+SN0uuEtig7GCtHtqkemgKmAGIvtc8U0MpG90+weZzmDNvt4G3mZldMOOJBO2hx75QJR6IXtqSiv9W+nHQoGccZeHaBB+GOeE/R4RDvWWugxuYJLVOdoni81l8oST9SK7ovfkKbwnp2Qb6Mctgv+WHtLNjsVHtv7433WoqRNZitiqv6d1950f3D1onvpKIsp39CB9hSECkk+4x73Eq/lATBHtZpya1mwOQZ7tRHFUG/trHeQghLB3n0hcZZ0F99QJLv5r65srfoerkOuXSPS4GOAFM4mj2/rdQIQkbiGctdGbmQCdGmT0vU3DNwy57ki2ZfuVeUj5tOhSaR9CdA/0JEYv2zZG6SLRAQeT9C6t8f+6NeMoC9ygVQC+CyYaRHRtdQ5YWc6+d7lDxvh4w3hixCWZnw0YosYfyHEsoaCksAiTd3kMo+vAfJKjv6n5AFR0QAARfMG2XmfU7iHWQi8kL9wdggGv7VxAwtEo/20tfYgFMSa3mwPr44xci4egDGc9Ikjg/7YpSL0m0SgWSzrtI2zw5KoSDFkBhc8iolZqXO3/dKnaUG6hksFkJpy0A/s3nO3Y6f0b/fRfMu9y8JjcGoD4iPaYEJNNztbSyzlKO4CLp7ZpGYx0JmoQPsb+UdB+kUogjWJ5eckWVIINqPvGqDVo8Ivgnrxfc6yUuB168mUkyCUjIxHac/mBduZV4WTwQ31gtihCOmFaJ8bRk6cZhcrxctwQe3cIg90yK9oVRVjA7Lej5Nd/OIVyMZfr1Nb//3gOUHYwFcufzGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4732,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","uuid":"829079aa-5d7f-44d9-a0bc-5f88a502d710"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012tdh4vLbMCnVLPLXtieJ3B","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Ck1XW5YcaPfLT4iBdvtNAf","name":"Bash","input":{"command":"ls /tmp/loop-bench-xwmz17oo","description":"Check working directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4732,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","uuid":"ca516512-c04b-4bca-ad2f-a58cf8dcbe1e"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":769378,"duration_api_ms":87329,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"1bb8e69e-dfa8-45ee-a9ae-dc59bd0707dc","total_cost_usd":1.0136526000000001,"usage":{"input_tokens":3,"cache_creation_input_tokens":4732,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4732},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":66298,"cacheReadInputTokens":4732,"cacheCreationInputTokens":4732,"webSearchRequests":0,"costUSD":1.0136526000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"a6a14f04-4e66-4345-9c40-49e2b60be8da","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":238504,"duration_api_ms":178518,"is_error":true,"num_turns":16,"stop_reason":"tool_use","session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","total_cost_usd":0.5706807500000001,"usage":{"input_tokens":16,"cache_creation_input_tokens":19320,"cache_read_input_tokens":125669,"output_tokens":12486,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":19320},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":17,"outputTokens":14600,"cacheReadInputTokens":144879,"cacheCreationInputTokens":21305,"webSearchRequests":0,"costUSD":0.5706807500000001,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"51cfc997-5f5f-4f2e-b1ea-8ddbbc0300a1","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,262 +0,0 @@ -{ - "structural": { - "pass": true, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": true, - "detail": "tsc --noEmit passed" - } - ], - "score": 1.0 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true - }, - "performance": { - "bundle_size_bytes": 40521, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 13, - "code": 4, - "docs": 4, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1494, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 32, - "excessive": true - }, - "function_length": { - "count": 74, - "average": 7.1, - "max": 36, - "long_functions": 0 - }, - "max_nesting_depth": 10, - "global_declarations": 95, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 666, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 84, - "source_lines": 1124, - "ratio_pct": 7.5 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 3, - "files_with_logic": 3, - "files_with_both": 3 - }, - "html_validation": { - "valid": false, - "errors": 9 - }, - "duplication_percentage": 0.0, - "score": 0.85 - }, - "transcript_analysis": { - "total_events": 45, - "tool_calls": { - "total": 16, - "bash": 11, - "write": 1, - "edit": 0, - "read": 4 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 8, - "productivity_ratio": 1.0, - "self_tested": true, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.56, - "total": 16, - "passed": 9, - "failed": 7, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 30, - "height": 60 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "pixels changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [260] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 79 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 9, - "failed": 7, - "score": 0.56 - }, - "gameplay": { - "pieces_placed": 189, - "lines_cleared": 1, - "max_score_observed": 224, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 36 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 3, - "pass": false - } - } - }, - "score": 0.7025 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,128 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 30, - "height": 60 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "pixels changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [260] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 79 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 9, - "failed": 7, - "score": 0.56 - }, - "gameplay": { - "pieces_placed": 189, - "lines_cleared": 1, - "max_score_observed": 224, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 36 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 3, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "opus", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T08:27:58.434449+00:00", - "wall_time_seconds": 239, - "exit_code": 1, - "completed_at": "2026-04-04T08:32:03.736289+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,45 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "opus", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-t77na7cp","session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-opus-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"e7a7a45b-101d-4f92-a921-22d49b24bb1b","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01KMmt6vkDprV9CWLBuQ8NdH","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that runs in a browser using TypeScript. Let me create a complete implementation with all standard mechanics.\n\nLet me first check what's in the current working directory.","signature":"EpgDClkIDBgCKkDRsgZHaiUFdHThTH2cSWRvnHz7rUbJrSFTtnRQ7oYEcriNgK3VnPRyb6ioBM2kS4k6DKWCW/oDcXX8Li1TKseXMg9jbGF1ZGUtb3B1cy00LTY4ABIMmt9LReyvFD5FploXGgwrSXxEgcX83rLJ8DciMBYQzkZrvTYejvN+5GSeXt86kEemA6S0UE2cT+/W6BI0RcMaHN0Njqs1k6BT53K/IirsATqgEnv8Emwt3Tzc76BybukmaxxsTrZL/IVZSYbIBewueaLy61zYDncwfPL2NskxidHo4gPhEnwRaeDJl+sOBwWnhYRFGefIRANrL4CF/EQ31VTYpB0edGO0hFFd5wICL9Qz7Ov3yJT5BhaNGHwc4Ccrr/E5jfE1c90VSnsqlIKuehZZkWw5iRAEf0fpu8luRym8sOt3Fbcegw3Plub9Qyz0X1vY1tGGuH7quPqx3K89MTPCUtAPuTd3G74su7esZCacFMJ0BtcqdxnMWzItrnX86EdWES+V83CIlRyqsKcbMHePJIBEcAi19HYyGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4778,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4778,"ephemeral_1h_input_tokens":0},"output_tokens":39,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"99a8b111-bfa2-441d-b51b-5152cca61866"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01KMmt6vkDprV9CWLBuQ8NdH","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VQSDDrRejTAQovQoZAF2qV","name":"Bash","input":{"command":"ls /tmp/loop-bench-t77na7cp","description":"List files in current directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4778,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4778,"ephemeral_1h_input_tokens":0},"output_tokens":39,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"cd6d7a2b-06e6-47be-a9d3-05cf2a32d332"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VQSDDrRejTAQovQoZAF2qV","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"f48a7000-4226-46a5-b563-6104e041b8c7","timestamp":"2026-04-04T08:28:09.939Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01MynQecKGpnxHiNdnqVYCw4","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Bb8LmVo67kj5RxLNWBWFay","name":"Read","input":{"file_path":"/tmp/loop-bench-t77na7cp/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":173,"cache_read_input_tokens":4778,"cache_creation":{"ephemeral_5m_input_tokens":173,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"399c3229-677c-44dc-987b-f524fce00261"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Bb8LmVo67kj5RxLNWBWFay","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-t77na7cp\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"f53da77d-7aac-4b34-8e2d-9e533f5a0547","timestamp":"2026-04-04T08:28:14.195Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-t77na7cp/package.json","content":"{\n \"name\": \"loop-bench-t77na7cp\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01J4YjN2AXuZeFrCshNsVQaN","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WcCEJeNemmC4corNqQdfrf","name":"Bash","input":{"command":"ls /tmp/loop-bench-t77na7cp/node_modules/.bin/tsc && npx tsc --version","description":"Check TypeScript compiler availability"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":313,"cache_read_input_tokens":4951,"cache_creation":{"ephemeral_5m_input_tokens":313,"ephemeral_1h_input_tokens":0},"output_tokens":49,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"9cf85cc7-4c12-482c-8292-2ed1931c30d4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WcCEJeNemmC4corNqQdfrf","type":"tool_result","content":"/tmp/loop-bench-t77na7cp/node_modules/.bin/tsc\nVersion 6.0.2","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"59c668fd-5f5d-4f2e-8398-c239fe4a6244","timestamp":"2026-04-04T08:28:17.658Z","tool_use_result":{"stdout":"/tmp/loop-bench-t77na7cp/node_modules/.bin/tsc\nVersion 6.0.2","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01UZcWv7nyXan4s7hrBAc4H7","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me build the complete Tetris game. I'll create the project structure with a clean architecture:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":141,"cache_read_input_tokens":5264,"cache_creation":{"ephemeral_5m_input_tokens":141,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"c5e8ba8c-8337-4787-b5d8-03e40b521877"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01UZcWv7nyXan4s7hrBAc4H7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01N7haHz4recoAm7Vu7RWwRn","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-t77na7cp/src","description":"Create src directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":141,"cache_read_input_tokens":5264,"cache_creation":{"ephemeral_5m_input_tokens":141,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"8d53e8a9-e415-4ce1-9bf7-5f9f38ad119f"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01N7haHz4recoAm7Vu7RWwRn","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"179c7082-47c6-488e-ad10-4e063678a1b2","timestamp":"2026-04-04T08:28:21.888Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01U2B3Fu4DM96MAAxSRPqpk6","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016KZqy2kiF7oGXaJ9Qw5TDi","name":"Write","input":{"file_path":"/tmp/loop-bench-t77na7cp/tsconfig.json","content":"{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"strict\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"sourceMap\": true,\n \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"]\n },\n \"include\": [\"src/**/*.ts\"]\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":128,"cache_read_input_tokens":5405,"cache_creation":{"ephemeral_5m_input_tokens":128,"ephemeral_1h_input_tokens":0},"output_tokens":60,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"5d70662f-834a-41cd-8fd0-45bf1f28031e"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"<tool_use_error>Error: No such tool available: Write</tool_use_error>","is_error":true,"tool_use_id":"toolu_016KZqy2kiF7oGXaJ9Qw5TDi"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"be0ef165-bdc6-44cf-8c0a-bd04c560dbcb","timestamp":"2026-04-04T08:28:25.927Z","tool_use_result":"Error: No such tool available: Write"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_017ciYkttXMm5yjJ9mkmS2gX","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017kuhYioE7Da5k1FRZALoiX","name":"Bash","input":{"command":"cat > /tmp/loop-bench-t77na7cp/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"strict\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"sourceMap\": true,\n \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"]\n },\n \"include\": [\"src/**/*.ts\"]\n}\nEOF","description":"Create tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":224,"cache_read_input_tokens":5533,"cache_creation":{"ephemeral_5m_input_tokens":224,"ephemeral_1h_input_tokens":0},"output_tokens":73,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"18f78728-b8e3-4cdf-b0a4-a0323f1bdc9f"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017kuhYioE7Da5k1FRZALoiX","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"c6a3edf2-8774-44ba-bd89-26d2f655ef26","timestamp":"2026-04-04T08:28:30.314Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01NxsSwtb66CWjNjYVeuGwpv","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me create the main game TypeScript file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":215,"cache_read_input_tokens":5757,"cache_creation":{"ephemeral_5m_input_tokens":215,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"2cae0bb6-744c-447e-abf1-35cada67604a"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01NxsSwtb66CWjNjYVeuGwpv","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MLt8N8GmQpzkTyt9w2xZvQ","name":"Bash","input":{"command":"cat > /tmp/loop-bench-t77na7cp/src/tetris.ts << 'TSEOF'\n// ============================================================\n// Tetris – full browser game in a single TypeScript file\n// ============================================================\n\n// ----- Constants --------------------------------------------\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 32;\nconst PREVIEW_BLOCK = 20;\n\nconst COLORS: Record<string, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\nconst GHOST_ALPHA = 0.25;\n\n// Shapes stored as [row][col] offsets for each rotation state\n// Using the Super Rotation System (SRS) shapes\ntype Shape = number[][];\n\nconst SHAPES: Record<string, Shape[]> = {\n I: [\n [[0,0],[0,1],[0,2],[0,3]],\n [[0,2],[1,2],[2,2],[3,2]],\n [[2,0],[2,1],[2,2],[2,3]],\n [[0,1],[1,1],[2,1],[3,1]],\n ],\n O: [\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n ],\n T: [\n [[0,1],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[1,2],[2,1]],\n [[0,1],[1,0],[1,1],[2,1]],\n ],\n S: [\n [[0,1],[0,2],[1,0],[1,1]],\n [[0,0],[1,0],[1,1],[2,1]],\n [[1,1],[1,2],[2,0],[2,1]],\n [[0,0],[1,0],[1,1],[2,1]],\n ],\n Z: [\n [[0,0],[0,1],[1,1],[1,2]],\n [[0,2],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[2,1],[2,2]],\n [[0,1],[1,0],[1,1],[2,0]],\n ],\n J: [\n [[0,0],[1,0],[1,1],[1,2]],\n [[0,1],[0,2],[1,1],[2,1]],\n [[1,0],[1,1],[1,2],[2,2]],\n [[0,1],[1,1],[2,0],[2,1]],\n ],\n L: [\n [[0,2],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[2,1],[2,2]],\n [[1,0],[1,1],[1,2],[2,0]],\n [[0,0],[0,1],[1,1],[2,1]],\n ],\n};\n\n// SRS wall‐kick data (non‐I pieces)\nconst WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n \"1>0\": [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n \"1>2\": [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n \"2>1\": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n \"2>3\": [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n \"3>2\": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n \"3>0\": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n \"0>3\": [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n};\n\n// SRS wall‐kick data for I piece\nconst WALL_KICKS_I: Record<string, [number, number][]> = {\n \"0>1\": [[0,0],[-2,0],[1,0],[-2,-1],[1,2]],\n \"1>0\": [[0,0],[2,0],[-1,0],[2,1],[-1,-2]],\n \"1>2\": [[0,0],[-1,0],[2,0],[-1,2],[2,-1]],\n \"2>1\": [[0,0],[1,0],[-2,0],[1,-2],[-2,1]],\n \"2>3\": [[0,0],[2,0],[-1,0],[2,1],[-1,-2]],\n \"3>2\": [[0,0],[-2,0],[1,0],[-2,-1],[1,2]],\n \"3>0\": [[0,0],[1,0],[-2,0],[1,-2],[-2,1]],\n \"0>3\": [[0,0],[-1,0],[2,0],[-1,2],[2,-1]],\n};\n\n// Points per lines cleared (original Nintendo scoring × level multiplier)\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n\n// ----- Types ------------------------------------------------\n\ninterface Piece {\n type: string;\n rotation: number;\n row: number;\n col: number;\n}\n\ntype Board = (string | null)[][];\n\n// ----- Game State -------------------------------------------\n\nlet board: Board;\nlet current: Piece;\nlet nextPiece: Piece;\nlet heldType: string | null;\nlet canHold: boolean;\nlet score: number;\nlet level: number;\nlet lines: number;\nlet gameOver: boolean;\nlet paused: boolean;\nlet dropInterval: number;\nlet lastDrop: number;\nlet bag: string[];\nlet animatingRows: number[];\nlet animationStart: number;\nconst ANIMATION_DURATION = 300; // ms\nlet lockDelay: number;\nlet lockTimer: number;\nconst LOCK_DELAY = 500; // ms before piece locks after landing\n\n// DAS (Delayed Auto Shift) state\nlet dasDirection: number = 0; // -1 left, 1 right, 0 none\nlet dasTimer: number = 0;\nlet dasActive: boolean = false;\nconst DAS_DELAY = 170; // ms before auto-repeat starts\nconst DAS_REPEAT = 50; // ms between repeats\n\nlet softDropping: boolean = false;\n\n// ----- Canvas setup -----------------------------------------\n\nconst canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\nconst ctx = canvas.getContext(\"2d\")!;\ncanvas.width = COLS * BLOCK_SIZE;\ncanvas.height = ROWS * BLOCK_SIZE;\n\nconst previewCanvas = document.getElementById(\"preview-canvas\") as HTMLCanvasElement;\nconst previewCtx = previewCanvas.getContext(\"2d\")!;\n\nconst holdCanvas = document.getElementById(\"hold-canvas\") as HTMLCanvasElement;\nconst holdCtx = holdCanvas.getContext(\"2d\")!;\n\nconst scoreEl = document.getElementById(\"score\")!;\nconst levelEl = document.getElementById(\"level\")!;\nconst linesEl = document.getElementById(\"lines\")!;\nconst overlayEl = document.getElementById(\"overlay\")!;\nconst overlayTextEl = document.getElementById(\"overlay-text\")!;\n\n// ----- Bag randomiser (7‐bag) --------------------------------\n\nfunction fillBag(): void {\n const types = [\"I\", \"O\", \"T\", \"S\", \"Z\", \"J\", \"L\"];\n // Fisher‑Yates shuffle\n for (let i = types.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [types[i], types[j]] = [types[j], types[i]];\n }\n bag = bag.concat(types);\n}\n\nfunction nextFromBag(): string {\n if (bag.length < 7) fillBag();\n return bag.shift()!;\n}\n\n// ----- Piece helpers ----------------------------------------\n\nfunction createPiece(type: string): Piece {\n return {\n type,\n rotation: 0,\n row: type === \"I\" ? -1 : 0,\n col: Math.floor((COLS - (type === \"I\" ? 4 : type === \"O\" ? 2 : 3)) / 2),\n };\n}\n\nfunction getCells(p: Piece): [number, number][] {\n return SHAPES[p.type][p.rotation].map(([r, c]) => [p.row + r, p.col + c]);\n}\n\nfunction isValid(p: Piece): boolean {\n return getCells(p).every(\n ([r, c]) => c >= 0 && c < COLS && r < ROWS && (r < 0 || board[r][c] === null)\n );\n}\n\n// ----- Board helpers ----------------------------------------\n\nfunction createBoard(): Board {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n}\n\nfunction lockPiece(): void {\n const cells = getCells(current);\n for (const [r, c] of cells) {\n if (r < 0) {\n endGame();\n return;\n }\n board[r][c] = current.type;\n }\n clearLines();\n spawnNext();\n}\n\nfunction clearLines(): void {\n const fullRows: number[] = [];\n for (let r = 0; r < ROWS; r++) {\n if (board[r].every((cell) => cell !== null)) {\n fullRows.push(r);\n }\n }\n if (fullRows.length === 0) return;\n\n // Start animation\n animatingRows = fullRows;\n animationStart = performance.now();\n\n // We'll actually remove the rows after the animation completes\n setTimeout(() => {\n // Remove full rows and add empty rows at top\n for (const r of fullRows.sort((a, b) => b - a)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(null));\n }\n animatingRows = [];\n\n const count = fullRows.length;\n score += LINE_POINTS[count] * (level + 1);\n lines += count;\n const newLevel = Math.floor(lines / 10);\n if (newLevel > level) {\n level = newLevel;\n dropInterval = getDropInterval(level);\n }\n updateHUD();\n }, ANIMATION_DURATION);\n}\n\nfunction getDropInterval(lvl: number): number {\n // Speeds up as level increases, minimum 50ms\n return Math.max(50, 1000 - lvl * 80);\n}\n\n// ----- Spawn / hold -----------------------------------------\n\nfunction spawnNext(): void {\n current = nextPiece;\n nextPiece = createPiece(nextFromBag());\n canHold = true;\n lockTimer = 0;\n if (!isValid(current)) {\n endGame();\n }\n}\n\nfunction holdPiece(): void {\n if (!canHold) return;\n canHold = false;\n const type = current.type;\n if (heldType) {\n current = createPiece(heldType);\n } else {\n current = nextPiece;\n nextPiece = createPiece(nextFromBag());\n }\n heldType = type;\n lockTimer = 0;\n}\n\n// ----- Movement / rotation ----------------------------------\n\nfunction movePiece(dCol: number, dRow: number): boolean {\n const test: Piece = { ...current, row: current.row + dRow, col: current.col + dCol };\n if (isValid(test)) {\n current = test;\n return true;\n }\n return false;\n}\n\nfunction rotatePiece(dir: 1 | -1): boolean {\n const oldRot = current.rotation;\n const newRot = (oldRot + dir + 4) % 4;\n const kicks =\n current.type === \"I\"\n ? WALL_KICKS_I[`${oldRot}>${newRot}`]\n : WALL_KICKS[`${oldRot}>${newRot}`];\n\n for (const [dx, dy] of kicks) {\n const test: Piece = { ...current, rotation: newRot, col: current.col + dx, row: current.row - dy };\n if (isValid(test)) {\n current = test;\n return true;\n }\n }\n return false;\n}\n\nfunction hardDrop(): void {\n let dropped = 0;\n while (movePiece(0, 1)) dropped++;\n score += dropped * 2;\n updateHUD();\n lockPiece();\n lastDrop = performance.now();\n}\n\nfunction getGhostRow(): number {\n let ghostRow = current.row;\n while (true) {\n const test: Piece = { ...current, row: ghostRow + 1 };\n if (!isValid(test)) break;\n ghostRow++;\n }\n return ghostRow;\n}\n\n// ----- Drawing ----------------------------------------------\n\nfunction drawBlock(\n context: CanvasRenderingContext2D,\n x: number,\n y: number,\n size: number,\n color: string,\n alpha: number = 1\n): void {\n context.globalAlpha = alpha;\n context.fillStyle = color;\n context.fillRect(x, y, size, size);\n\n // Highlight (top-left)\n context.fillStyle = \"rgba(255,255,255,0.3)\";\n context.fillRect(x, y, size, 2);\n context.fillRect(x, y, 2, size);\n\n // Shadow (bottom-right)\n context.fillStyle = \"rgba(0,0,0,0.3)\";\n context.fillRect(x, y + size - 2, size, 2);\n context.fillRect(x + size - 2, y, 2, size);\n\n // Grid line\n context.strokeStyle = \"rgba(0,0,0,0.15)\";\n context.strokeRect(x, y, size, size);\n\n context.globalAlpha = 1;\n}\n\nfunction drawBoard(): void {\n // Background\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n ctx.strokeRect(c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);\n }\n }\n\n // Locked cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n const cell = board[r][c];\n if (cell) {\n // Check if this row is animating\n if (animatingRows.includes(r)) {\n const elapsed = performance.now() - animationStart;\n const progress = Math.min(elapsed / ANIMATION_DURATION, 1);\n const alpha = 1 - progress;\n drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[cell], alpha);\n // Flash effect\n ctx.fillStyle = `rgba(255,255,255,${(1 - progress) * 0.5})`;\n ctx.fillRect(c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, BLOCK_SIZE);\n } else {\n drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[cell]);\n }\n }\n }\n }\n\n if (gameOver) return;\n\n // Ghost piece\n const ghostRow = getGhostRow();\n const ghostCells = SHAPES[current.type][current.rotation].map(\n ([r, c]): [number, number] => [ghostRow + r, current.col + c]\n );\n for (const [r, c] of ghostCells) {\n if (r >= 0) {\n drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[current.type], GHOST_ALPHA);\n }\n }\n\n // Current piece\n for (const [r, c] of getCells(current)) {\n if (r >= 0) {\n drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[current.type]);\n }\n }\n}\n\nfunction drawPreview(\n context: CanvasRenderingContext2D,\n cvs: HTMLCanvasElement,\n type: string | null\n): void {\n context.fillStyle = \"#1a1a2e\";\n context.fillRect(0, 0, cvs.width, cvs.height);\n if (!type) return;\n const shape = SHAPES[type][0];\n // Compute bounding box\n let minR = Infinity, maxR = -Infinity, minC = Infinity, maxC = -Infinity;\n for (const [r, c] of shape) {\n minR = Math.min(minR, r);\n maxR = Math.max(maxR, r);\n minC = Math.min(minC, c);\n maxC = Math.max(maxC, c);\n }\n const w = maxC - minC + 1;\n const h = maxR - minR + 1;\n const offsetX = (cvs.width - w * PREVIEW_BLOCK) / 2;\n const offsetY = (cvs.height - h * PREVIEW_BLOCK) / 2;\n for (const [r, c] of shape) {\n drawBlock(\n context,\n offsetX + (c - minC) * PREVIEW_BLOCK,\n offsetY + (r - minR) * PREVIEW_BLOCK,\n PREVIEW_BLOCK,\n COLORS[type]\n );\n }\n}\n\nfunction updateHUD(): void {\n scoreEl.textContent = score.toLocaleString();\n levelEl.textContent = String(level);\n linesEl.textContent = String(lines);\n}\n\n// ----- Game lifecycle ---------------------------------------\n\nfunction initGame(): void {\n board = createBoard();\n bag = [];\n fillBag();\n score = 0;\n level = 0;\n lines = 0;\n gameOver = false;\n paused = false;\n heldType = null;\n canHold = true;\n animatingRows = [];\n animationStart = 0;\n lockTimer = 0;\n dropInterval = getDropInterval(0);\n lastDrop = performance.now();\n softDropping = false;\n dasDirection = 0;\n dasTimer = 0;\n dasActive = false;\n\n nextPiece = createPiece(nextFromBag());\n spawnNext();\n updateHUD();\n overlayEl.classList.add(\"hidden\");\n}\n\nfunction endGame(): void {\n gameOver = true;\n overlayTextEl.textContent = \"GAME OVER\";\n const sub = overlayEl.querySelector(\".overlay-sub\") as HTMLElement;\n sub.textContent = \"Press R to restart\";\n overlayEl.classList.remove(\"hidden\");\n}\n\nfunction togglePause(): void {\n if (gameOver) return;\n paused = !paused;\n if (paused) {\n overlayTextEl.textContent = \"PAUSED\";\n const sub = overlayEl.querySelector(\".overlay-sub\") as HTMLElement;\n sub.textContent = \"Press P to resume\";\n overlayEl.classList.remove(\"hidden\");\n } else {\n overlayEl.classList.add(\"hidden\");\n lastDrop = performance.now();\n }\n}\n\n// ----- Input ------------------------------------------------\n\nconst keysDown = new Set<string>();\n\ndocument.addEventListener(\"keydown\", (e) => {\n if (e.repeat && (e.key === \"ArrowUp\" || e.key === \" \" || e.key === \"z\" || e.key === \"x\" || e.key === \"c\")) return;\n\n if (e.key === \"r\" || e.key === \"R\") {\n initGame();\n return;\n }\n if (e.key === \"p\" || e.key === \"P\") {\n togglePause();\n return;\n }\n if (gameOver || paused) return;\n\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n movePiece(-1, 0);\n dasDirection = -1;\n dasTimer = performance.now();\n dasActive = false;\n break;\n case \"ArrowRight\":\n e.preventDefault();\n movePiece(1, 0);\n dasDirection = 1;\n dasTimer = performance.now();\n dasActive = false;\n break;\n case \"ArrowDown\":\n e.preventDefault();\n softDropping = true;\n break;\n case \"ArrowUp\":\n case \"x\":\n e.preventDefault();\n rotatePiece(1);\n break;\n case \"z\":\n rotatePiece(-1);\n break;\n case \" \":\n e.preventDefault();\n hardDrop();\n break;\n case \"c\":\n case \"Shift\":\n holdPiece();\n break;\n }\n keysDown.add(e.key);\n});\n\ndocument.addEventListener(\"keyup\", (e) => {\n keysDown.delete(e.key);\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n // If the other arrow is still held, switch DAS to it\n if (e.key === \"ArrowLeft\" && keysDown.has(\"ArrowRight\")) {\n dasDirection = 1;\n dasTimer = performance.now();\n dasActive = false;\n } else if (e.key === \"ArrowRight\" && keysDown.has(\"ArrowLeft\")) {\n dasDirection = -1;\n dasTimer = performance.now();\n dasActive = false;\n } else {\n dasDirection = 0;\n }\n }\n if (e.key === \"ArrowDown\") {\n softDropping = false;\n }\n});\n\n// ----- Game loop --------------------------------------------\n\nfunction update(now: number): void {\n if (gameOver || paused) return;\n\n // DAS (auto-repeat horizontal movement)\n if (dasDirection !== 0) {\n const elapsed = now - dasTimer;\n if (!dasActive && elapsed >= DAS_DELAY) {\n dasActive = true;\n dasTimer = now;\n movePiece(dasDirection, 0);\n } else if (dasActive && elapsed >= DAS_REPEAT) {\n dasTimer = now;\n movePiece(dasDirection, 0);\n }\n }\n\n // Determine effective drop interval\n const effectiveInterval = softDropping ? Math.min(dropInterval, 50) : dropInterval;\n\n if (now - lastDrop >= effectiveInterval) {\n if (!movePiece(0, 1)) {\n // Piece can't move down — engage lock delay\n lockTimer += now - lastDrop;\n if (lockTimer >= LOCK_DELAY) {\n lockPiece();\n lockTimer = 0;\n }\n } else {\n lockTimer = 0;\n if (softDropping) {\n score += 1;\n updateHUD();\n }\n }\n lastDrop = now;\n }\n}\n\nfunction gameLoop(now: number): void {\n update(now);\n drawBoard();\n drawPreview(previewCtx, previewCanvas, nextPiece?.type ?? null);\n drawPreview(holdCtx, holdCanvas, heldType);\n requestAnimationFrame(gameLoop);\n}\n\n// ----- Start ------------------------------------------------\n\ninitGame();\nrequestAnimationFrame(gameLoop);\nTSEOF","description":"Create main Tetris TypeScript source file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":215,"cache_read_input_tokens":5757,"cache_creation":{"ephemeral_5m_input_tokens":215,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"7c513a44-399f-40de-8aa2-12d597b818cf"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MLt8N8GmQpzkTyt9w2xZvQ","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"15296b5f-7dea-4d56-b716-d8aa60586bf1","timestamp":"2026-04-04T08:29:47.794Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Kzmsv5MHL5tterzZcCCYsA","type":"message","role":"assistant","content":[{"type":"text","text":"Now create the HTML file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":6365,"cache_read_input_tokens":5972,"cache_creation":{"ephemeral_5m_input_tokens":6365,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"2cee5804-2144-42a5-8a45-75a2b46fb7d8"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Kzmsv5MHL5tterzZcCCYsA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TLxeEw1m3LLsYLDzYmyjhw","name":"Bash","input":{"command":"cat > /tmp/loop-bench-t77na7cp/index.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n body {\n background: #0a0a1a;\n color: #e0e0e0;\n font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n overflow: hidden;\n }\n\n .game-wrapper {\n display: flex;\n gap: 24px;\n align-items: flex-start;\n }\n\n /* Side panels */\n .side-panel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n min-width: 120px;\n }\n\n .panel-box {\n background: #1a1a2e;\n border: 2px solid #333;\n border-radius: 8px;\n padding: 12px;\n text-align: center;\n }\n\n .panel-box h3 {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 2px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .panel-box .value {\n font-size: 22px;\n font-weight: 700;\n color: #fff;\n font-variant-numeric: tabular-nums;\n }\n\n .preview-box canvas {\n display: block;\n margin: 0 auto;\n }\n\n /* Main board */\n .board-container {\n position: relative;\n border: 3px solid #444;\n border-radius: 4px;\n line-height: 0;\n box-shadow: 0 0 40px rgba(0, 150, 255, 0.08);\n }\n\n #game-canvas {\n display: block;\n }\n\n /* Overlay */\n #overlay {\n position: absolute;\n inset: 0;\n background: rgba(0, 0, 0, 0.75);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n border-radius: 2px;\n z-index: 10;\n transition: opacity 0.2s;\n }\n\n #overlay.hidden {\n display: none;\n }\n\n #overlay-text {\n font-size: 36px;\n font-weight: 800;\n letter-spacing: 4px;\n color: #fff;\n text-shadow: 0 0 20px rgba(0, 150, 255, 0.6);\n }\n\n .overlay-sub {\n margin-top: 12px;\n font-size: 14px;\n color: #aaa;\n }\n\n /* Controls help */\n .controls {\n font-size: 11px;\n color: #666;\n line-height: 1.8;\n }\n\n .controls kbd {\n display: inline-block;\n background: #222;\n border: 1px solid #444;\n border-radius: 3px;\n padding: 1px 6px;\n font-family: inherit;\n font-size: 10px;\n color: #ccc;\n }\n </style>\n</head>\n<body>\n <div class=\"game-wrapper\">\n <!-- Left panel -->\n <div class=\"side-panel\">\n <div class=\"panel-box preview-box\">\n <h3>Hold</h3>\n <canvas id=\"hold-canvas\" width=\"100\" height=\"60\"></canvas>\n </div>\n <div class=\"panel-box\">\n <h3>Score</h3>\n <div class=\"value\" id=\"score\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Level</h3>\n <div class=\"value\" id=\"level\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Lines</h3>\n <div class=\"value\" id=\"lines\">0</div>\n </div>\n <div class=\"controls\">\n <kbd>←</kbd> <kbd>→</kbd> Move<br/>\n <kbd>↓</kbd> Soft drop<br/>\n <kbd>↑</kbd> / <kbd>X</kbd> Rotate CW<br/>\n <kbd>Z</kbd> Rotate CCW<br/>\n <kbd>Space</kbd> Hard drop<br/>\n <kbd>C</kbd> / <kbd>Shift</kbd> Hold<br/>\n <kbd>P</kbd> Pause<br/>\n <kbd>R</kbd> Restart\n </div>\n </div>\n\n <!-- Board -->\n <div class=\"board-container\">\n <canvas id=\"game-canvas\"></canvas>\n <div id=\"overlay\" class=\"hidden\">\n <div id=\"overlay-text\"></div>\n <div class=\"overlay-sub\"></div>\n </div>\n </div>\n\n <!-- Right panel -->\n <div class=\"side-panel\">\n <div class=\"panel-box preview-box\">\n <h3>Next</h3>\n <canvas id=\"preview-canvas\" width=\"100\" height=\"60\"></canvas>\n </div>\n </div>\n </div>\n\n <script type=\"module\" src=\"./dist/tetris.js\"></script>\n</body>\n</html>\nHTMLEOF","description":"Create HTML file for Tetris game"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":6365,"cache_read_input_tokens":5972,"cache_creation":{"ephemeral_5m_input_tokens":6365,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"23a2323f-7454-4b61-b551-3371ce26e36c"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TLxeEw1m3LLsYLDzYmyjhw","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"75b9fa4c-c353-4096-be44-4e6ac7d84f4d","timestamp":"2026-04-04T08:30:08.672Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01XRZhcMTpBxidScSBs8CUii","type":"message","role":"assistant","content":[{"type":"text","text":"Now compile the TypeScript and verify there are no errors:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1592,"cache_read_input_tokens":12337,"cache_creation":{"ephemeral_5m_input_tokens":1592,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"38ed9dd1-297e-4053-acb1-ef320769c6a5"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01XRZhcMTpBxidScSBs8CUii","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01H6rrYooJcYmvNnABBQ5kht","name":"Bash","input":{"command":"npx tsc 2>&1","description":"Compile TypeScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1592,"cache_read_input_tokens":12337,"cache_creation":{"ephemeral_5m_input_tokens":1592,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"015574bf-b120-469c-b584-1a86c93d17bd"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01H6rrYooJcYmvNnABBQ5kht","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"f478c68f-ce5b-4c03-9c6b-dd1d0216b5db","timestamp":"2026-04-04T08:30:13.057Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01E5vYeDJRUupvroeobDUta9","type":"message","role":"assistant","content":[{"type":"text","text":"Clean compile. Let me verify the output was generated:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":110,"cache_read_input_tokens":13929,"cache_creation":{"ephemeral_5m_input_tokens":110,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"9abef414-5716-412a-b374-06424bb1653d"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01E5vYeDJRUupvroeobDUta9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JdAyjuddjPRQgUg2WwJ7kq","name":"Bash","input":{"command":"ls -la /tmp/loop-bench-t77na7cp/dist/","description":"Verify compiled output exists"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":110,"cache_read_input_tokens":13929,"cache_creation":{"ephemeral_5m_input_tokens":110,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"0cfb651e-b90e-4416-aefc-c1e236df2dc1"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JdAyjuddjPRQgUg2WwJ7kq","type":"tool_result","content":"total 52\ndrwxr-xr-x 2 root root 4096 Apr 4 10:30 .\ndrwx------ 5 root root 4096 Apr 4 10:30 ..\n-rw-r--r-- 1 root root 17043 Apr 4 10:30 tetris.js\n-rw-r--r-- 1 root root 23478 Apr 4 10:30 tetris.js.map","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"eb60d7aa-e211-4e65-9f0a-2b854b00217c","timestamp":"2026-04-04T08:30:16.859Z","tool_use_result":{"stdout":"total 52\ndrwxr-xr-x 2 root root 4096 Apr 4 10:30 .\ndrwx------ 5 root root 4096 Apr 4 10:30 ..\n-rw-r--r-- 1 root root 17043 Apr 4 10:30 tetris.js\n-rw-r--r-- 1 root root 23478 Apr 4 10:30 tetris.js.map","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_016TvrD4EYtJtv31GcTsHeVF","type":"message","role":"assistant","content":[{"type":"text","text":"Let me also verify the generated JS looks correct by checking the top and bottom:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":341,"cache_read_input_tokens":13929,"cache_creation":{"ephemeral_5m_input_tokens":341,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"6e646e39-0568-4068-90d0-223af2473bd6"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_016TvrD4EYtJtv31GcTsHeVF","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_018pMXtisUnLHEhicNx1cGTk","name":"Read","input":{"file_path":"/tmp/loop-bench-t77na7cp/dist/tetris.js","limit":20},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":341,"cache_read_input_tokens":13929,"cache_creation":{"ephemeral_5m_input_tokens":341,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"965ef163-09b8-4b45-8ea7-c370fe4f174f"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_018pMXtisUnLHEhicNx1cGTk","type":"tool_result","content":"1\t\"use strict\";\n2\t// ============================================================\n3\t// Tetris – full browser game in a single TypeScript file\n4\t// ============================================================\n5\t// ----- Constants --------------------------------------------\n6\tconst COLS = 10;\n7\tconst ROWS = 20;\n8\tconst BLOCK_SIZE = 32;\n9\tconst PREVIEW_BLOCK = 20;\n10\tconst COLORS = {\n11\t I: \"#00f0f0\",\n12\t O: \"#f0f000\",\n13\t T: \"#a000f0\",\n14\t S: \"#00f000\",\n15\t Z: \"#f00000\",\n16\t J: \"#0000f0\",\n17\t L: \"#f0a000\",\n18\t};\n19\tconst GHOST_ALPHA = 0.25;\n20\tconst SHAPES = {"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"8f0cb640-03c1-4349-8dad-2fdc74c96536","timestamp":"2026-04-04T08:30:23.617Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-t77na7cp/dist/tetris.js","content":"\"use strict\";\n// ============================================================\n// Tetris – full browser game in a single TypeScript file\n// ============================================================\n// ----- Constants --------------------------------------------\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 32;\nconst PREVIEW_BLOCK = 20;\nconst COLORS = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\nconst GHOST_ALPHA = 0.25;\nconst SHAPES = {","numLines":20,"startLine":1,"totalLines":543}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_016TvrD4EYtJtv31GcTsHeVF","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TAAtWWi6sWi6Gptv5oumtz","name":"Read","input":{"file_path":"/tmp/loop-bench-t77na7cp/dist/tetris.js","offset":430},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":341,"cache_read_input_tokens":13929,"cache_creation":{"ephemeral_5m_input_tokens":341,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"50f564de-463a-4c6c-a8b3-b01ce2a78e6d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TAAtWWi6sWi6Gptv5oumtz","type":"tool_result","content":"430\t togglePause();\n431\t return;\n432\t }\n433\t if (gameOver || paused)\n434\t return;\n435\t switch (e.key) {\n436\t case \"ArrowLeft\":\n437\t e.preventDefault();\n438\t movePiece(-1, 0);\n439\t dasDirection = -1;\n440\t dasTimer = performance.now();\n441\t dasActive = false;\n442\t break;\n443\t case \"ArrowRight\":\n444\t e.preventDefault();\n445\t movePiece(1, 0);\n446\t dasDirection = 1;\n447\t dasTimer = performance.now();\n448\t dasActive = false;\n449\t break;\n450\t case \"ArrowDown\":\n451\t e.preventDefault();\n452\t softDropping = true;\n453\t break;\n454\t case \"ArrowUp\":\n455\t case \"x\":\n456\t e.preventDefault();\n457\t rotatePiece(1);\n458\t break;\n459\t case \"z\":\n460\t rotatePiece(-1);\n461\t break;\n462\t case \" \":\n463\t e.preventDefault();\n464\t hardDrop();\n465\t break;\n466\t case \"c\":\n467\t case \"Shift\":\n468\t holdPiece();\n469\t break;\n470\t }\n471\t keysDown.add(e.key);\n472\t});\n473\tdocument.addEventListener(\"keyup\", (e) => {\n474\t keysDown.delete(e.key);\n475\t if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n476\t // If the other arrow is still held, switch DAS to it\n477\t if (e.key === \"ArrowLeft\" && keysDown.has(\"ArrowRight\")) {\n478\t dasDirection = 1;\n479\t dasTimer = performance.now();\n480\t dasActive = false;\n481\t }\n482\t else if (e.key === \"ArrowRight\" && keysDown.has(\"ArrowLeft\")) {\n483\t dasDirection = -1;\n484\t dasTimer = performance.now();\n485\t dasActive = false;\n486\t }\n487\t else {\n488\t dasDirection = 0;\n489\t }\n490\t }\n491\t if (e.key === \"ArrowDown\") {\n492\t softDropping = false;\n493\t }\n494\t});\n495\t// ----- Game loop --------------------------------------------\n496\tfunction update(now) {\n497\t if (gameOver || paused)\n498\t return;\n499\t // DAS (auto-repeat horizontal movement)\n500\t if (dasDirection !== 0) {\n501\t const elapsed = now - dasTimer;\n502\t if (!dasActive && elapsed >= DAS_DELAY) {\n503\t dasActive = true;\n504\t dasTimer = now;\n505\t movePiece(dasDirection, 0);\n506\t }\n507\t else if (dasActive && elapsed >= DAS_REPEAT) {\n508\t dasTimer = now;\n509\t movePiece(dasDirection, 0);\n510\t }\n511\t }\n512\t // Determine effective drop interval\n513\t const effectiveInterval = softDropping ? Math.min(dropInterval, 50) : dropInterval;\n514\t if (now - lastDrop >= effectiveInterval) {\n515\t if (!movePiece(0, 1)) {\n516\t // Piece can't move down — engage lock delay\n517\t lockTimer += now - lastDrop;\n518\t if (lockTimer >= LOCK_DELAY) {\n519\t lockPiece();\n520\t lockTimer = 0;\n521\t }\n522\t }\n523\t else {\n524\t lockTimer = 0;\n525\t if (softDropping) {\n526\t score += 1;\n527\t updateHUD();\n528\t }\n529\t }\n530\t lastDrop = now;\n531\t }\n532\t}\n533\tfunction gameLoop(now) {\n534\t update(now);\n535\t drawBoard();\n536\t drawPreview(previewCtx, previewCanvas, nextPiece?.type ?? null);\n537\t drawPreview(holdCtx, holdCanvas, heldType);\n538\t requestAnimationFrame(gameLoop);\n539\t}\n540\t// ----- Start ------------------------------------------------\n541\tinitGame();\n542\trequestAnimationFrame(gameLoop);\n543\t//# sourceMappingURL=tetris.js.map"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"8e2cc304-816c-4eeb-9ef2-5f8bbc648b1c","timestamp":"2026-04-04T08:30:23.834Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-t77na7cp/dist/tetris.js","content":" togglePause();\n return;\n }\n if (gameOver || paused)\n return;\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n movePiece(-1, 0);\n dasDirection = -1;\n dasTimer = performance.now();\n dasActive = false;\n break;\n case \"ArrowRight\":\n e.preventDefault();\n movePiece(1, 0);\n dasDirection = 1;\n dasTimer = performance.now();\n dasActive = false;\n break;\n case \"ArrowDown\":\n e.preventDefault();\n softDropping = true;\n break;\n case \"ArrowUp\":\n case \"x\":\n e.preventDefault();\n rotatePiece(1);\n break;\n case \"z\":\n rotatePiece(-1);\n break;\n case \" \":\n e.preventDefault();\n hardDrop();\n break;\n case \"c\":\n case \"Shift\":\n holdPiece();\n break;\n }\n keysDown.add(e.key);\n});\ndocument.addEventListener(\"keyup\", (e) => {\n keysDown.delete(e.key);\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowRight\") {\n // If the other arrow is still held, switch DAS to it\n if (e.key === \"ArrowLeft\" && keysDown.has(\"ArrowRight\")) {\n dasDirection = 1;\n dasTimer = performance.now();\n dasActive = false;\n }\n else if (e.key === \"ArrowRight\" && keysDown.has(\"ArrowLeft\")) {\n dasDirection = -1;\n dasTimer = performance.now();\n dasActive = false;\n }\n else {\n dasDirection = 0;\n }\n }\n if (e.key === \"ArrowDown\") {\n softDropping = false;\n }\n});\n// ----- Game loop --------------------------------------------\nfunction update(now) {\n if (gameOver || paused)\n return;\n // DAS (auto-repeat horizontal movement)\n if (dasDirection !== 0) {\n const elapsed = now - dasTimer;\n if (!dasActive && elapsed >= DAS_DELAY) {\n dasActive = true;\n dasTimer = now;\n movePiece(dasDirection, 0);\n }\n else if (dasActive && elapsed >= DAS_REPEAT) {\n dasTimer = now;\n movePiece(dasDirection, 0);\n }\n }\n // Determine effective drop interval\n const effectiveInterval = softDropping ? Math.min(dropInterval, 50) : dropInterval;\n if (now - lastDrop >= effectiveInterval) {\n if (!movePiece(0, 1)) {\n // Piece can't move down — engage lock delay\n lockTimer += now - lastDrop;\n if (lockTimer >= LOCK_DELAY) {\n lockPiece();\n lockTimer = 0;\n }\n }\n else {\n lockTimer = 0;\n if (softDropping) {\n score += 1;\n updateHUD();\n }\n }\n lastDrop = now;\n }\n}\nfunction gameLoop(now) {\n update(now);\n drawBoard();\n drawPreview(previewCtx, previewCanvas, nextPiece?.type ?? null);\n drawPreview(holdCtx, holdCanvas, heldType);\n requestAnimationFrame(gameLoop);\n}\n// ----- Start ------------------------------------------------\ninitGame();\nrequestAnimationFrame(gameLoop);\n//# sourceMappingURL=tetris.js.map","numLines":114,"startLine":430,"totalLines":543}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_016NS9Er6px5Yzi1yca1KFiD","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me run the Playwright tests to verify the game works in a browser:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1606,"cache_read_input_tokens":14270,"cache_creation":{"ephemeral_5m_input_tokens":1606,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"a8e76a14-3d60-4fea-a5c1-df31ad9437c8"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_016NS9Er6px5Yzi1yca1KFiD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011qdnc79EVkLH9PeVYandak","name":"Bash","input":{"command":"cat > /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts << 'TESTEOF'\nimport { test, expect } from \"@playwright/test\";\nimport { readFileSync } from \"fs\";\nimport { join } from \"path\";\n\nconst htmlPath = join(__dirname, \"..\", \"index.html\");\n\ntest.describe(\"Tetris Game\", () => {\n test.beforeEach(async ({ page }) => {\n // Serve the game from a file URL\n await page.goto(`file://${htmlPath}`);\n // Wait for the canvas to be rendered\n await page.waitForSelector(\"#game-canvas\");\n // Give the game loop a moment to start\n await page.waitForTimeout(200);\n });\n\n test(\"renders the game canvas\", async ({ page }) => {\n const canvas = page.locator(\"#game-canvas\");\n await expect(canvas).toBeVisible();\n const box = await canvas.boundingBox();\n expect(box).not.toBeNull();\n expect(box!.width).toBe(320); // 10 cols * 32px\n expect(box!.height).toBe(640); // 20 rows * 32px\n });\n\n test(\"renders preview and hold canvases\", async ({ page }) => {\n await expect(page.locator(\"#preview-canvas\")).toBeVisible();\n await expect(page.locator(\"#hold-canvas\")).toBeVisible();\n });\n\n test(\"displays initial score, level, and lines as 0\", async ({ page }) => {\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n await expect(page.locator(\"#level\")).toHaveText(\"0\");\n await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n });\n\n test(\"overlay is hidden on start\", async ({ page }) => {\n const overlay = page.locator(\"#overlay\");\n await expect(overlay).toHaveClass(/hidden/);\n });\n\n test(\"pause toggles with P key\", async ({ page }) => {\n const overlay = page.locator(\"#overlay\");\n await expect(overlay).toHaveClass(/hidden/);\n\n await page.keyboard.press(\"p\");\n await expect(overlay).not.toHaveClass(/hidden/);\n await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n\n await page.keyboard.press(\"p\");\n await expect(overlay).toHaveClass(/hidden/);\n });\n\n test(\"arrow keys move pieces without errors\", async ({ page }) => {\n // Just verify no JS errors are thrown when pressing movement keys\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n await page.keyboard.press(\"ArrowLeft\");\n await page.keyboard.press(\"ArrowRight\");\n await page.keyboard.press(\"ArrowDown\");\n await page.keyboard.press(\"ArrowUp\");\n await page.waitForTimeout(100);\n\n expect(errors).toHaveLength(0);\n });\n\n test(\"hard drop with Space increases score\", async ({ page }) => {\n // Initial score is 0\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n\n // Hard drop gives 2 points per row dropped\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n\n const scoreText = await page.locator(\"#score\").textContent();\n const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n expect(score).toBeGreaterThan(0);\n });\n\n test(\"hold piece with C key works\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n await page.keyboard.press(\"c\");\n await page.waitForTimeout(100);\n\n expect(errors).toHaveLength(0);\n // Hold canvas should now be drawing something (the held piece)\n // We can at least verify no crash occurred\n });\n\n test(\"restart with R key resets score\", async ({ page }) => {\n // Drop a piece to get some score\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n\n const scoreText = await page.locator(\"#score\").textContent();\n const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n expect(score).toBeGreaterThan(0);\n\n // Restart\n await page.keyboard.press(\"r\");\n await page.waitForTimeout(100);\n\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n await expect(page.locator(\"#level\")).toHaveText(\"0\");\n await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n });\n\n test(\"rotation keys work without errors\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n // CW rotation\n await page.keyboard.press(\"x\");\n await page.waitForTimeout(50);\n // CCW rotation\n await page.keyboard.press(\"z\");\n await page.waitForTimeout(50);\n // ArrowUp rotation\n await page.keyboard.press(\"ArrowUp\");\n await page.waitForTimeout(50);\n\n expect(errors).toHaveLength(0);\n });\n\n test(\"game over triggers after filling the board\", async ({ page }) => {\n // Rapidly hard drop pieces to fill the board and trigger game over\n for (let i = 0; i < 50; i++) {\n await page.keyboard.press(\" \");\n await page.waitForTimeout(60);\n }\n\n // Check if game over overlay appeared\n // (May or may not be game over depending on RNG, so we just check it doesn't crash)\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n await page.waitForTimeout(200);\n expect(errors).toHaveLength(0);\n });\n\n test(\"multiple hard drops track scoring correctly\", async ({ page }) => {\n let prevScore = 0;\n for (let i = 0; i < 5; i++) {\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n const text = await page.locator(\"#score\").textContent();\n const current = parseInt(text!.replace(/,/g, \"\"), 10);\n expect(current).toBeGreaterThanOrEqual(prevScore);\n prevScore = current;\n }\n });\n});\nTESTEOF","description":"Create Playwright test file for Tetris"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1606,"cache_read_input_tokens":14270,"cache_creation":{"ephemeral_5m_input_tokens":1606,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"6fb23650-f096-4526-a4b4-a18ac43dd7f5"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"Exit code 1\n/bin/bash: line 156: /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts: No such file or directory","is_error":true,"tool_use_id":"toolu_011qdnc79EVkLH9PeVYandak"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"ff8cf1a6-8066-4f99-b76a-5ff58ea7a090","timestamp":"2026-04-04T08:30:47.381Z","tool_use_result":"Error: Exit code 1\n/bin/bash: line 156: /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts: No such file or directory"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01UQ73Gh3SBDZZiq11H8Bdch","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LJagAtRgMWMgwc68BPw2W4","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-t77na7cp/tests && cat > /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts << 'TESTEOF'\nimport { test, expect } from \"@playwright/test\";\nimport { join } from \"path\";\n\nconst htmlPath = join(__dirname, \"..\", \"index.html\");\n\ntest.describe(\"Tetris Game\", () => {\n test.beforeEach(async ({ page }) => {\n await page.goto(`file://${htmlPath}`);\n await page.waitForSelector(\"#game-canvas\");\n await page.waitForTimeout(200);\n });\n\n test(\"renders the game canvas\", async ({ page }) => {\n const canvas = page.locator(\"#game-canvas\");\n await expect(canvas).toBeVisible();\n const box = await canvas.boundingBox();\n expect(box).not.toBeNull();\n expect(box!.width).toBe(320);\n expect(box!.height).toBe(640);\n });\n\n test(\"renders preview and hold canvases\", async ({ page }) => {\n await expect(page.locator(\"#preview-canvas\")).toBeVisible();\n await expect(page.locator(\"#hold-canvas\")).toBeVisible();\n });\n\n test(\"displays initial score, level, and lines as 0\", async ({ page }) => {\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n await expect(page.locator(\"#level\")).toHaveText(\"0\");\n await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n });\n\n test(\"overlay is hidden on start\", async ({ page }) => {\n const overlay = page.locator(\"#overlay\");\n await expect(overlay).toHaveClass(/hidden/);\n });\n\n test(\"pause toggles with P key\", async ({ page }) => {\n const overlay = page.locator(\"#overlay\");\n await expect(overlay).toHaveClass(/hidden/);\n\n await page.keyboard.press(\"p\");\n await expect(overlay).not.toHaveClass(/hidden/);\n await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n\n await page.keyboard.press(\"p\");\n await expect(overlay).toHaveClass(/hidden/);\n });\n\n test(\"arrow keys move pieces without errors\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n await page.keyboard.press(\"ArrowLeft\");\n await page.keyboard.press(\"ArrowRight\");\n await page.keyboard.press(\"ArrowDown\");\n await page.keyboard.press(\"ArrowUp\");\n await page.waitForTimeout(100);\n\n expect(errors).toHaveLength(0);\n });\n\n test(\"hard drop with Space increases score\", async ({ page }) => {\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n\n const scoreText = await page.locator(\"#score\").textContent();\n const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n expect(score).toBeGreaterThan(0);\n });\n\n test(\"hold piece with C key works\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n await page.keyboard.press(\"c\");\n await page.waitForTimeout(100);\n\n expect(errors).toHaveLength(0);\n });\n\n test(\"restart with R key resets score\", async ({ page }) => {\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n\n const scoreText = await page.locator(\"#score\").textContent();\n const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n expect(score).toBeGreaterThan(0);\n\n await page.keyboard.press(\"r\");\n await page.waitForTimeout(100);\n\n await expect(page.locator(\"#score\")).toHaveText(\"0\");\n await expect(page.locator(\"#level\")).toHaveText(\"0\");\n await expect(page.locator(\"#lines\")).toHaveText(\"0\");\n });\n\n test(\"rotation keys work without errors\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n await page.keyboard.press(\"x\");\n await page.waitForTimeout(50);\n await page.keyboard.press(\"z\");\n await page.waitForTimeout(50);\n await page.keyboard.press(\"ArrowUp\");\n await page.waitForTimeout(50);\n\n expect(errors).toHaveLength(0);\n });\n\n test(\"game over triggers after filling the board\", async ({ page }) => {\n const errors: string[] = [];\n page.on(\"pageerror\", (err) => errors.push(err.message));\n\n for (let i = 0; i < 50; i++) {\n await page.keyboard.press(\" \");\n await page.waitForTimeout(60);\n }\n\n await page.waitForTimeout(200);\n expect(errors).toHaveLength(0);\n });\n\n test(\"multiple hard drops track scoring correctly\", async ({ page }) => {\n let prevScore = 0;\n for (let i = 0; i < 5; i++) {\n await page.keyboard.press(\" \");\n await page.waitForTimeout(100);\n const text = await page.locator(\"#score\").textContent();\n const current = parseInt(text!.replace(/,/g, \"\"), 10);\n expect(current).toBeGreaterThanOrEqual(prevScore);\n prevScore = current;\n }\n });\n});\nTESTEOF","description":"Create Playwright test file for Tetris"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1792,"cache_read_input_tokens":15876,"cache_creation":{"ephemeral_5m_input_tokens":1792,"ephemeral_1h_input_tokens":0},"output_tokens":71,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"c7cbcbdf-d6f8-47d1-b05f-e2006b40dffc"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LJagAtRgMWMgwc68BPw2W4","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"47c76d1e-c13e-4af9-ad6f-64bf4fd45691","timestamp":"2026-04-04T08:31:01.276Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_014NupgtwfVgNfDBUXuuxjJh","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0135YgH2ZRbwEPkk7Gk4sne8","name":"Bash","input":{"command":"npx playwright test tests/tetris.spec.ts 2>&1","description":"Run Playwright tests","timeout":120000},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1542,"cache_read_input_tokens":17668,"cache_creation":{"ephemeral_5m_input_tokens":1542,"ephemeral_1h_input_tokens":0},"output_tokens":60,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"026346ea-ac5e-4fbb-8282-a0adecd7f6b7"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"Exit code 1\n\nRunning 12 tests using 1 worker\n\n ✘ 1 tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas (288ms)\n ✓ 2 tests/tetris.spec.ts:22:7 › Tetris Game › renders preview and hold canvases (266ms)\n ✓ 3 tests/tetris.spec.ts:27:7 › Tetris Game › displays initial score, level, and lines as 0 (266ms)\n ✓ 4 tests/tetris.spec.ts:33:7 › Tetris Game › overlay is hidden on start (246ms)\n ✘ 5 tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key (5.3s)\n ✓ 6 tests/tetris.spec.ts:50:7 › Tetris Game › arrow keys move pieces without errors (372ms)\n ✘ 7 tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score (371ms)\n ✓ 8 tests/tetris.spec.ts:74:7 › Tetris Game › hold piece with C key works (371ms)\n ✘ 9 tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score (364ms)\n ✓ 10 tests/tetris.spec.ts:100:7 › Tetris Game › rotation keys work without errors (418ms)\n ✓ 11 tests/tetris.spec.ts:114:7 › Tetris Game › game over triggers after filling the board (3.5s)\n ✓ 12 tests/tetris.spec.ts:127:7 › Tetris Game › multiple hard drops track scoring correctly (759ms)\n\n\n 1) tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas ─────────────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\n Expected: \u001b[32m320\u001b[39m\n Received: \u001b[31m300\u001b[39m\n\n 16 | const box = await canvas.boundingBox();\n 17 | expect(box).not.toBeNull();\n > 18 | expect(box!.width).toBe(320);\n | ^\n 19 | expect(box!.height).toBe(640);\n 20 | });\n 21 |\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:18:24\n\n Error Context: test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md\n\n 2) tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key ────────────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).not.\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\n Locator: locator('#overlay')\n Expected pattern: not \u001b[32m/hidden/\u001b[39m\n Received string: \u001b[31m\"\u001b[7mhidden\u001b[27m\"\u001b[39m\n Timeout: 5000ms\n\n Call log:\n \u001b[2m - Expect \"not toHaveClass\" with timeout 5000ms\u001b[22m\n \u001b[2m - waiting for locator('#overlay')\u001b[22m\n \u001b[2m 9 × locator resolved to <div id=\"overlay\" class=\"hidden\">…</div>\u001b[22m\n \u001b[2m - unexpected value \"hidden\"\u001b[22m\n\n\n 41 |\n 42 | await page.keyboard.press(\"p\");\n > 43 | await expect(overlay).not.toHaveClass(/hidden/);\n | ^\n 44 | await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n 45 |\n 46 | await page.keyboard.press(\"p\");\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:43:31\n\n Error Context: test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md\n\n 3) tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score ────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: > \u001b[32m0\u001b[39m\n Received: \u001b[31m0\u001b[39m\n\n 69 | const scoreText = await page.locator(\"#score\").textContent();\n 70 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n > 71 | expect(score).toBeGreaterThan(0);\n | ^\n 72 | });\n 73 |\n 74 | test(\"hold piece with C key works\", async ({ page }) => {\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:71:19\n\n Error Context: test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md\n\n 4) tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score ─────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: > \u001b[32m0\u001b[39m\n Received: \u001b[31m0\u001b[39m\n\n 88 | const scoreText = await page.locator(\"#score\").textContent();\n 89 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n > 90 | expect(score).toBeGreaterThan(0);\n | ^\n 91 |\n 92 | await page.keyboard.press(\"r\");\n 93 | await page.waitForTimeout(100);\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:90:19\n\n Error Context: test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md\n\n 4 failed\n tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas ──────────────────────────────\n tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key ─────────────────────────────\n tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score ─────────────────\n tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score ──────────────────────\n 8 passed (14.5s)","is_error":true,"tool_use_id":"toolu_0135YgH2ZRbwEPkk7Gk4sne8"}]},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"591ef765-797f-4ce4-a394-42b826ca554d","timestamp":"2026-04-04T08:31:20.314Z","tool_use_result":"Error: Exit code 1\n\nRunning 12 tests using 1 worker\n\n ✘ 1 tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas (288ms)\n ✓ 2 tests/tetris.spec.ts:22:7 › Tetris Game › renders preview and hold canvases (266ms)\n ✓ 3 tests/tetris.spec.ts:27:7 › Tetris Game › displays initial score, level, and lines as 0 (266ms)\n ✓ 4 tests/tetris.spec.ts:33:7 › Tetris Game › overlay is hidden on start (246ms)\n ✘ 5 tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key (5.3s)\n ✓ 6 tests/tetris.spec.ts:50:7 › Tetris Game › arrow keys move pieces without errors (372ms)\n ✘ 7 tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score (371ms)\n ✓ 8 tests/tetris.spec.ts:74:7 › Tetris Game › hold piece with C key works (371ms)\n ✘ 9 tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score (364ms)\n ✓ 10 tests/tetris.spec.ts:100:7 › Tetris Game › rotation keys work without errors (418ms)\n ✓ 11 tests/tetris.spec.ts:114:7 › Tetris Game › game over triggers after filling the board (3.5s)\n ✓ 12 tests/tetris.spec.ts:127:7 › Tetris Game › multiple hard drops track scoring correctly (759ms)\n\n\n 1) tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas ─────────────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBe\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m) // Object.is equality\u001b[22m\n\n Expected: \u001b[32m320\u001b[39m\n Received: \u001b[31m300\u001b[39m\n\n 16 | const box = await canvas.boundingBox();\n 17 | expect(box).not.toBeNull();\n > 18 | expect(box!.width).toBe(320);\n | ^\n 19 | expect(box!.height).toBe(640);\n 20 | });\n 21 |\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:18:24\n\n Error Context: test-results/tests-tetris-Tetris-Game-renders-the-game-canvas/error-context.md\n\n 2) tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key ────────────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mlocator\u001b[39m\u001b[2m).not.\u001b[22mtoHaveClass\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m failed\n\n Locator: locator('#overlay')\n Expected pattern: not \u001b[32m/hidden/\u001b[39m\n Received string: \u001b[31m\"\u001b[7mhidden\u001b[27m\"\u001b[39m\n Timeout: 5000ms\n\n Call log:\n \u001b[2m - Expect \"not toHaveClass\" with timeout 5000ms\u001b[22m\n \u001b[2m - waiting for locator('#overlay')\u001b[22m\n \u001b[2m 9 × locator resolved to <div id=\"overlay\" class=\"hidden\">…</div>\u001b[22m\n \u001b[2m - unexpected value \"hidden\"\u001b[22m\n\n\n 41 |\n 42 | await page.keyboard.press(\"p\");\n > 43 | await expect(overlay).not.toHaveClass(/hidden/);\n | ^\n 44 | await expect(page.locator(\"#overlay-text\")).toHaveText(\"PAUSED\");\n 45 |\n 46 | await page.keyboard.press(\"p\");\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:43:31\n\n Error Context: test-results/tests-tetris-Tetris-Game-pause-toggles-with-P-key/error-context.md\n\n 3) tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score ────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: > \u001b[32m0\u001b[39m\n Received: \u001b[31m0\u001b[39m\n\n 69 | const scoreText = await page.locator(\"#score\").textContent();\n 70 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n > 71 | expect(score).toBeGreaterThan(0);\n | ^\n 72 | });\n 73 |\n 74 | test(\"hold piece with C key works\", async ({ page }) => {\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:71:19\n\n Error Context: test-results/tests-tetris-Tetris-Game-h-5e001--with-Space-increases-score/error-context.md\n\n 4) tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score ─────────────────────\n\n Error: \u001b[2mexpect(\u001b[22m\u001b[31mreceived\u001b[39m\u001b[2m).\u001b[22mtoBeGreaterThan\u001b[2m(\u001b[22m\u001b[32mexpected\u001b[39m\u001b[2m)\u001b[22m\n\n Expected: > \u001b[32m0\u001b[39m\n Received: \u001b[31m0\u001b[39m\n\n 88 | const scoreText = await page.locator(\"#score\").textContent();\n 89 | const score = parseInt(scoreText!.replace(/,/g, \"\"), 10);\n > 90 | expect(score).toBeGreaterThan(0);\n | ^\n 91 |\n 92 | await page.keyboard.press(\"r\");\n 93 | await page.waitForTimeout(100);\n at /tmp/loop-bench-t77na7cp/tests/tetris.spec.ts:90:19\n\n Error Context: test-results/tests-tetris-Tetris-Game-restart-with-R-key-resets-score/error-context.md\n\n 4 failed\n tests/tetris.spec.ts:13:7 › Tetris Game › renders the game canvas ──────────────────────────────\n tests/tetris.spec.ts:38:7 › Tetris Game › pause toggles with P key ─────────────────────────────\n tests/tetris.spec.ts:63:7 › Tetris Game › hard drop with Space increases score ─────────────────\n tests/tetris.spec.ts:84:7 › Tetris Game › restart with R key resets score ──────────────────────\n 8 passed (14.5s)"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_015mdJymTe9wmfu1caxixvcj","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me analyze the failures:\n\n1. Canvas size: 300 instead of 320 - likely the canvas's CSS default size. The canvas HTML attribute is set properly but the bounding box might report CSS pixels. Actually, looking at it: `canvas.width = COLS * BLOCK_SIZE` = 10 * 32 = 320. But the bounding box says 300. This could be because the canvas's intrinsic size (set via JS) is 320 but the CSS display size might differ. Let me check - actually, `canvas.width` is set in JS which should set the attribute. Maybe the canvas element has a default CSS width. Let me fix the test to be more flexible.\n\n\n2. The pause functionality isn't responding to the `p` key press in the test, even though the event listener checks for both lowercase and uppercase variants. The script loads as a module, so I need to verify the event listener is actually attached and firing when Playwright sends the key event.\n\nThe module scope shouldn't be an issue since `document.addEventListener` is still global, and keyboard events should propagate to the document level regardless of focus. Let me trace through the actual key handler logic to see where the pause check happens. The pause toggle function returns early if the game is over, but the game just started so that shouldn't be the issue. I'm wondering if the script isn't even loading, or if there's something about how Playwright dispatches the keyboard event that's preventing the handler from firing. The hard drop test with Space also isn't working as expected, which suggests the keyboard input handling might be broken across the board. So the Space handler isn't working either. But the \"multiple hard drops\" test passes! That's contradictory.\n\nWait, let me re-read: test 12 (multiple hard drops) passes and test 7 (hard drop with Space) fails. The difference is... test 12 doesn't check that score > 0, it just checks `toBeGreaterThanOrEqual(prevScore)` starting from 0. So if score stays 0, it still passes.\n\nSo maybe the issue is that hard drop doesn't actually add to score when the piece spawns at the top. Let me think... when a piece spawns at row -1 or 0, and we hard drop, it moves down. For the I piece spawning at row -1, it needs to move to row 19 (since the piece occupies 4 columns at row 0 of the piece shape, meaning the blocks are at actual row -1 initially). Moving from -1 to 19 would be 20 steps, earning 40 points.\n\nThe hard drop function counts how many times the piece moves down and multiplies by 2 for the score, then locks the piece. This logic looks correct, so maybe the script isn't loading properly or there's an issue with how the Space key is being handled. The canvas defaulting to 300x150 means the JavaScript isn't running at all. The issue is likely that `type=\"module\"` on a `file://` URL triggers CORS restrictions in Playwright, blocking the script execution. I should remove the module type and adjust the TypeScript compilation settings accordingly. I need to reconsider the module configuration—the compiled output already has `\"use strict\";` at the top and no import/export statements, so it should work fine as a regular script without the module type attribute. I'll remove `type=\"module\"` from the HTML and adjust the TypeScript module setting to avoid unnecessary module semantics.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1985,"cache_read_input_tokens":19210,"cache_creation":{"ephemeral_5m_input_tokens":1985,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"03b485c3-2d1d-41f9-9c9a-c21c946d42f0"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_015mdJymTe9wmfu1caxixvcj","type":"message","role":"assistant","content":[{"type":"text","text":"The tests reveal the JS isn't executing — the canvas is default 300x150 because `file://` protocol blocks ES module loading (CORS). Let me fix the module setup and the tests:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1985,"cache_read_input_tokens":19210,"cache_creation":{"ephemeral_5m_input_tokens":1985,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"44d95183-0e4b-4578-8ca9-65e5223d9cbc"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_015mdJymTe9wmfu1caxixvcj","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RMUPc5LKAUnJ55CEZaytbV","name":"Read","input":{"file_path":"/tmp/loop-bench-t77na7cp/index.html"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1985,"cache_read_input_tokens":19210,"cache_creation":{"ephemeral_5m_input_tokens":1985,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","uuid":"0f6f7899-c8c0-4722-86b9-1cc24162810e"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":238504,"duration_api_ms":178518,"is_error":true,"num_turns":16,"stop_reason":"tool_use","session_id":"71b58218-87de-4a0a-a6b9-eafb2369b912","total_cost_usd":0.5706807500000001,"usage":{"input_tokens":16,"cache_creation_input_tokens":19320,"cache_read_input_tokens":125669,"output_tokens":12486,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":19320},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":17,"outputTokens":14600,"cacheReadInputTokens":144879,"cacheCreationInputTokens":21305,"webSearchRequests":0,"costUSD":0.5706807500000001,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"51cfc997-5f5f-4f2e-b1ea-8ddbbc0300a1","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":213662,"duration_api_ms":204889,"is_error":true,"num_turns":8,"stop_reason":"tool_use","session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","total_cost_usd":0.5378575,"usage":{"input_tokens":10,"cache_creation_input_tokens":6274,"cache_read_input_tokens":37742,"output_tokens":16577,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":6274},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":11,"outputTokens":17150,"cacheReadInputTokens":43805,"cacheCreationInputTokens":13944,"webSearchRequests":0,"costUSD":0.5378575,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"1a15f4ce-4afb-4d03-958b-cc6755214b60","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,251 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "tsc --noEmit failed" - } - ], - "score": 0.75 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 2 - }, - "performance": { - "bundle_size_bytes": 55511, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 5, - "code": 2, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 764, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 26, - "excessive": true - }, - "function_length": { - "count": 45, - "average": 5.4, - "max": 25, - "long_functions": 0 - }, - "max_nesting_depth": 5, - "global_declarations": 10, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 281, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 47, - "source_lines": 579, - "ratio_pct": 8.1 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 1, - "files_with_logic": 1, - "files_with_both": 1 - }, - "html_validation": { - "valid": false, - "errors": 2 - }, - "duplication_percentage": 0.0, - "score": 0.9 - }, - "transcript_analysis": { - "total_events": 25, - "tool_calls": { - "total": 8, - "bash": 6, - "write": 1, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 4, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0, - "total": 15, - "passed": 0, - "failed": 15, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": false, - "detail": "1 console error(s): Unexpected token '<'" - }, - { - "name": "game_starts", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_left", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_right", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_down", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "rotate", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "line_clear", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "score_changes", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "game_over", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "playable_30s", - "pass": false, - "detail": "skipped: page did not load" - } - ], - "summary": { - "total": 15, - "passed": 0, - "failed": 15, - "score": 0 - }, - "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 17 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role" - ], - "issue_count": 1, - "pass": false - } - } - }, - "score": 0.566 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,116 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": false, - "detail": "1 console error(s): Unexpected token '<'" - }, - { - "name": "game_starts", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_left", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_right", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "move_down", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "rotate", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "line_clear", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "score_changes", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "game_over", - "pass": false, - "detail": "skipped: page did not load" - }, - { - "name": "playable_30s", - "pass": false, - "detail": "skipped: page did not load" - } - ], - "summary": { - "total": 15, - "passed": 0, - "failed": 15, - "score": 0 - }, - "gameplay": { - "pieces_placed": 0, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 17 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role" - ], - "issue_count": 1, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "opus", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T19:43:18.885293+00:00", - "wall_time_seconds": 214, - "exit_code": 1, - "completed_at": "2026-04-03T19:46:58.211270+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,25 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "opus", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-uihc72su","session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-opus-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"46d2e2f1-8abb-46bd-89f8-af64bb0e5d1a","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01CBfZarqsWsd3gB5gPwkUqk","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that runs in a browser using TypeScript. Let me create a complete implementation with all standard mechanics.\n\nLet me first check what's in the current working directory.","signature":"EpgDClkIDBgCKkDRsgZHaiUFdHThTH2cSWRvnHz7rUbJrSFTtnRQ7oYEcriNgK3VnPRyb6ioBM2kS4k6DKWCW/oDcXX8Li1TKseXMg9jbGF1ZGUtb3B1cy00LTY4ABIMjX7dNT5PM0UmLXRYGgzLJvBMPX8TQ+V+RBgiMFfYEqZxnzHOs2SPYmilVDYmwWkIoL7OVKUv6YQjdeg5ArBYBPzZAklcJ0k15QRUQirsAQn7ZwfX93WaKIXAwAfJOEk53zrYug7fQux8D+ABNq3OD5vfif9ODI4+PA1bqUKtoqPD9A0DsAToXLPeKZsrExUFJ8bCJX7Su5ML5npJirRwRz9FekhTmfSzd4jRJK7R1fB7RBBmB1fXpVZ5Zlm0oU6S/zv06jktY0RQ5Qfe+omkeXfL+WIXZ4Air/TiZD97E0ljMXGLxrnSxFhJ23Pnlrevf89N14OhYnVEyDzWcOK2+Qgwf1NZtvc5SxgVexlh6PX4ru6p/e6wS1DxlHLiK7b+C87PrT4pbbFppDGVUnUU5Av+vO+ehm3Q06xBGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4778,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4778,"ephemeral_1h_input_tokens":0},"output_tokens":40,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"ab3b2b9a-7ac2-40db-bbae-7b3e926bf50d"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01CBfZarqsWsd3gB5gPwkUqk","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VLZqeUXJig7QeKhFk37zYF","name":"Bash","input":{"command":"ls /tmp/loop-bench-uihc72su","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4778,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4778,"ephemeral_1h_input_tokens":0},"output_tokens":40,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"e0ec2f20-8c27-4e2a-9f4e-024a380572ab"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VLZqeUXJig7QeKhFk37zYF","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"53c48350-f618-4df0-8dcd-676ade335d5a","timestamp":"2026-04-03T19:43:27.883Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01U9zVbmCgU485RSmb9z3UcG","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01FWvjcfaQKYjTwaaroDmhBP","name":"Read","input":{"file_path":"/tmp/loop-bench-uihc72su/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":173,"cache_read_input_tokens":4778,"cache_creation":{"ephemeral_5m_input_tokens":173,"ephemeral_1h_input_tokens":0},"output_tokens":59,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"648d4111-3394-4527-b09c-120548fe4b3e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01FWvjcfaQKYjTwaaroDmhBP","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-uihc72su\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.1.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"c00b22b5-094f-481c-93ac-5d9ee6b3e3fa","timestamp":"2026-04-03T19:43:30.248Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-uihc72su/package.json","content":"{\n \"name\": \"loop-bench-uihc72su\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.1.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01BybLYNArhPHyz7N5ZX98bZ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01K7kSnjUoheWyBnJL9sjfwU","name":"Bash","input":{"command":"ls /tmp/loop-bench-uihc72su/node_modules/.bin/ | grep -E \"tsc|esbuild|vite|webpack\"","description":"Check available build tools"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":313,"cache_read_input_tokens":4951,"cache_creation":{"ephemeral_5m_input_tokens":313,"ephemeral_1h_input_tokens":0},"output_tokens":50,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"050e66c0-23d8-4a34-b7b6-c74a8ba87801"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01K7kSnjUoheWyBnJL9sjfwU","type":"tool_result","content":"tsc","is_error":false}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"9fed5d0e-435b-4411-8fa6-2e2e343fde80","timestamp":"2026-04-03T19:43:36.771Z","tool_use_result":{"stdout":"tsc","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01549PP1h4GiLPfdrjP6og6w","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I have TypeScript available. Let me build a Tetris game. I'll create:\n\n1. `index.html` - The HTML page with canvas\n2. `src/tetris.ts` - The main game logic in TypeScript\n3. `tsconfig.json` - TypeScript configuration\n\nSince I only have `tsc` and no bundler, I'll compile to a single JS file. I'll structure the TypeScript code so it compiles cleanly to a single output file.\n\nLet me create a comprehensive Tetris implementation.","signature":"EuUEClkIDBgCKkAGwOVOgFzAIvs2PfpYYU5QLcGG9vfduNtAoUjnDjcVVmwy3R0g04KINa1uTlArhHnLlO71Uq6ZECaPscEZbhCDMg9jbGF1ZGUtb3B1cy00LTY4ABIMc74t+khrssus4Si1Ggx2ce/5/iR0as+J1DUiMJDPNu6M4ZpX/cz+jcPBQFq9zE8cZ566mBg40C7R4C9fODffcVv27Gxt9LiwgrBWiyq5A/kiJvqqJBON3bISNn09/l/JzewYyMedvbpygNa0OUJqL+rFAri1NSavv8gJtbqUoXoKFnGg9B8XLZ9riDsc8WYsysfPnKUH6F7YsSsP45z/KnwVWRw/0GIpQ18nPpti/MtwEFA8aNIaEzYZVmS8SEJk2P5yuVVQPCXCAJzagm3od/3s4IIIlJh++HSfIudNiyfWvYKW/Sp+m3qRUaJHw6Es445Fr27AhtmAu1/0bFE4UsAvj/uek3saVPPS37vH3e9aU89dEvLokKnvABPJNUgC1XwsCfJSJbA0kjgBoEHaBBzx1cc+Q5omUmq/YFd5B7O72AXlXITpee9Hd9WO9awv9tTy0xDNl/TSosefa3dqauJ2AzpXlanJ5aJtdWiwIqvFuUoV1bAuwETu3FICu86zMeW+dGbv7BmGf0dq8slAztJB918hrfUcNrK4IJyfFyFyoMrm/MbeApBMoaM64Ch0/OKsN+OTDBdrVqKDVndke3RaGrd7SpDIkJC1/c839XfEFAh6zgkKzT+31b4k5C1xexfPHa0s1ehcIEZPxvyv2aqbIbtQQSxMExjwGD+fo8hyG6XuhilgOxgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":122,"cache_read_input_tokens":5264,"cache_creation":{"ephemeral_5m_input_tokens":122,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"915dad0f-440b-4060-bce1-5485db006aea"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01549PP1h4GiLPfdrjP6og6w","type":"message","role":"assistant","content":[{"type":"text","text":"I'll build a full-featured Tetris game with TypeScript. Let me set up the project structure and implement everything."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":122,"cache_read_input_tokens":5264,"cache_creation":{"ephemeral_5m_input_tokens":122,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"64981dd2-629c-42ef-a38c-278d75b1c6c3"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01549PP1h4GiLPfdrjP6og6w","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WNGSU6tgy1jHZy4fG5btyi","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-uihc72su/src","description":"Create src directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":122,"cache_read_input_tokens":5264,"cache_creation":{"ephemeral_5m_input_tokens":122,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"5469d0dd-4bb5-4a4a-bfea-b94b414841c7"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WNGSU6tgy1jHZy4fG5btyi","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"68b70b1b-a34e-46b0-81ca-4cc70a23b8c5","timestamp":"2026-04-03T19:43:43.208Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_017DCJMMBa8BkhWPQge6oyz8","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016jtPYxWuLDGVEf9Eu4fPpn","name":"Write","input":{"file_path":"/tmp/loop-bench-uihc72su/tsconfig.json","content":"{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"none\",\n \"strict\": true,\n \"outFile\": \"dist/tetris.js\",\n \"sourceMap\": true,\n \"lib\": [\"ES2020\", \"DOM\"]\n },\n \"include\": [\"src/**/*.ts\"]\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":264,"cache_read_input_tokens":5386,"cache_creation":{"ephemeral_5m_input_tokens":264,"ephemeral_1h_input_tokens":0},"output_tokens":62,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"5159dcb2-2624-4128-bf80-cbc2569378f6"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"<tool_use_error>Error: No such tool available: Write</tool_use_error>","is_error":true,"tool_use_id":"toolu_016jtPYxWuLDGVEf9Eu4fPpn"}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"39dd1a4d-9f5a-40d5-a718-aec9324f4b33","timestamp":"2026-04-03T19:43:47.098Z","tool_use_result":"Error: No such tool available: Write"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01EwWwDFHJfwWEtNcELJPtZA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_014GgNRNrtJJk7YKNoJu73Fy","name":"Bash","input":{"command":"cat > /tmp/loop-bench-uihc72su/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"none\",\n \"strict\": true,\n \"outFile\": \"dist/tetris.js\",\n \"sourceMap\": true,\n \"lib\": [\"ES2020\", \"DOM\"]\n },\n \"include\": [\"src/**/*.ts\"]\n}\nEOF","description":"Create tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":211,"cache_read_input_tokens":5650,"cache_creation":{"ephemeral_5m_input_tokens":211,"ephemeral_1h_input_tokens":0},"output_tokens":70,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"01a60fd4-1a85-4e7d-bec0-891f4c455a49"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_014GgNRNrtJJk7YKNoJu73Fy","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"d66d85a7-1743-44e5-858d-9963806611a3","timestamp":"2026-04-03T19:43:50.587Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Eajzx16bznr7TEuSzQ2RK4","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me create the main TypeScript game file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":413,"cache_read_input_tokens":5650,"cache_creation":{"ephemeral_5m_input_tokens":413,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"0a4625fa-2768-4acd-91b0-37f59b705e0d"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_017F4L8BrGJ5M6dHNdrk6J1k","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me create the main TypeScript game file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":6063,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"54c17055-f21f-4f45-bc93-1b56194a17f8"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_017F4L8BrGJ5M6dHNdrk6J1k","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01BB4EExqyPQfmdMQshdsDcN","name":"Bash","input":{"command":"cat > /tmp/loop-bench-uihc72su/src/tetris.ts << 'TSEOF'\n// ============================================================\n// Tetris — A fully playable browser Tetris in TypeScript\n// ============================================================\n\n// ---- Constants ------------------------------------------------\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 30;\nconst PREVIEW_BLOCK = 20;\n\nconst COLORS: Record<string, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\nconst GHOST_ALPHA = 0.25;\n\n// Points per number of lines cleared at once (classic BPS scoring)\nconst LINE_POINTS: Record<number, number> = {\n 1: 100,\n 2: 300,\n 3: 500,\n 4: 800,\n};\n\n// Frames-per-drop at each level (speeds up as level increases)\nfunction getDropInterval(level: number): number {\n // Starts at 800ms, floors at 50ms\n return Math.max(50, 800 - (level - 1) * 70);\n}\n\n// ---- Piece Definitions (SRS) -----------------------------------\n\ntype PieceType = \"I\" | \"O\" | \"T\" | \"S\" | \"Z\" | \"J\" | \"L\";\n\n// Each shape defined as 4 rotation states (matrices of coords relative to pivot)\nconst SHAPES: Record<PieceType, number[][][]> = {\n I: [\n [[0,0],[1,0],[2,0],[3,0]],\n [[2,-1],[2,0],[2,1],[2,2]],\n [[0,1],[1,1],[2,1],[3,1]],\n [[1,-1],[1,0],[1,1],[1,2]],\n ],\n O: [\n [[0,0],[1,0],[0,1],[1,1]],\n [[0,0],[1,0],[0,1],[1,1]],\n [[0,0],[1,0],[0,1],[1,1]],\n [[0,0],[1,0],[0,1],[1,1]],\n ],\n T: [\n [[0,0],[1,0],[2,0],[1,1]],\n [[1,-1],[1,0],[1,1],[0,0]],\n [[0,1],[1,1],[2,1],[1,0]],\n [[1,-1],[1,0],[1,1],[2,0]],\n ],\n S: [\n [[1,0],[2,0],[0,1],[1,1]],\n [[1,-1],[1,0],[2,0],[2,1]],\n [[1,0],[2,0],[0,1],[1,1]],\n [[1,-1],[1,0],[2,0],[2,1]],\n ],\n Z: [\n [[0,0],[1,0],[1,1],[2,1]],\n [[2,-1],[2,0],[1,0],[1,1]],\n [[0,0],[1,0],[1,1],[2,1]],\n [[2,-1],[2,0],[1,0],[1,1]],\n ],\n J: [\n [[0,0],[1,0],[2,0],[0,1]],\n [[1,-1],[1,0],[1,1],[2,1]],\n [[2,0],[0,1],[1,1],[2,1]],\n [[0,-1],[1,-1],[1,0],[1,1]],\n ],\n L: [\n [[0,0],[1,0],[2,0],[2,1]],\n [[1,-1],[1,0],[1,1],[2,-1]],\n [[0,0],[0,1],[1,1],[2,1]],\n [[0,1],[1,-1],[1,0],[1,1]],\n ],\n};\n\n// SRS wall kick data (non-I pieces)\nconst WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n \"1>0\": [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n \"1>2\": [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n \"2>1\": [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n \"2>3\": [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n \"3>2\": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n \"3>0\": [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n \"0>3\": [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n};\n\n// SRS wall kick data for I piece\nconst I_WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0,0],[-2,0],[1,0],[-2,1],[1,-2]],\n \"1>0\": [[0,0],[2,0],[-1,0],[2,-1],[-1,2]],\n \"1>2\": [[0,0],[-1,0],[2,0],[-1,-2],[2,1]],\n \"2>1\": [[0,0],[1,0],[-2,0],[1,2],[-2,-1]],\n \"2>3\": [[0,0],[2,0],[-1,0],[2,-1],[-1,2]],\n \"3>2\": [[0,0],[-2,0],[1,0],[-2,1],[1,-2]],\n \"3>0\": [[0,0],[1,0],[-2,0],[1,2],[-2,-1]],\n \"0>3\": [[0,0],[-1,0],[2,0],[-1,-2],[2,1]],\n};\n\n// ---- Board / Grid -----------------------------------------------\n\ntype Cell = string | null; // color string or null\n\nfunction createGrid(): Cell[][] {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n}\n\n// ---- Piece State -------------------------------------------------\n\ninterface Piece {\n type: PieceType;\n rotation: number; // 0-3\n x: number; // board column of origin\n y: number; // board row of origin\n}\n\nfunction spawnPiece(type: PieceType): Piece {\n return { type, rotation: 0, x: 3, y: 0 };\n}\n\nfunction getCells(p: Piece): [number, number][] {\n return SHAPES[p.type][p.rotation].map(([dx, dy]) => [p.x + dx, p.y + dy]);\n}\n\n// ---- Collision Detection -----------------------------------------\n\nfunction isValid(grid: Cell[][], p: Piece): boolean {\n for (const [cx, cy] of getCells(p)) {\n if (cx < 0 || cx >= COLS || cy >= ROWS) return false;\n if (cy >= 0 && grid[cy][cx] !== null) return false;\n }\n return true;\n}\n\n// ---- Random Bag Generator ----------------------------------------\n\nfunction createBag(): PieceType[] {\n const bag: PieceType[] = [\"I\", \"O\", \"T\", \"S\", \"Z\", \"J\", \"L\"];\n // Fisher-Yates shuffle\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n return bag;\n}\n\n// ---- Game State --------------------------------------------------\n\ninterface GameState {\n grid: Cell[][];\n current: Piece;\n bag: PieceType[];\n nextPiece: PieceType;\n heldPiece: PieceType | null;\n canHold: boolean;\n score: number;\n level: number;\n lines: number;\n gameOver: boolean;\n paused: boolean;\n dropTimer: number;\n lockTimer: number;\n lockDelay: number; // ms before piece locks after landing\n lastTime: number;\n started: boolean;\n flashRows: number[];\n flashTimer: number;\n}\n\nfunction nextFromBag(bag: PieceType[]): PieceType {\n if (bag.length === 0) {\n bag.push(...createBag());\n }\n return bag.pop()!;\n}\n\nfunction initGame(): GameState {\n const bag = createBag();\n const first = bag.pop()!;\n const second = bag.pop()!;\n return {\n grid: createGrid(),\n current: spawnPiece(first),\n bag,\n nextPiece: second,\n heldPiece: null,\n canHold: true,\n score: 0,\n level: 1,\n lines: 0,\n gameOver: false,\n paused: false,\n dropTimer: 0,\n lockTimer: 0,\n lockDelay: 500,\n lastTime: 0,\n started: false,\n flashRows: [],\n flashTimer: 0,\n };\n}\n\n// ---- Core Mechanics -----------------------------------------------\n\nfunction tryMove(grid: Cell[][], p: Piece, dx: number, dy: number): Piece | null {\n const moved: Piece = { ...p, x: p.x + dx, y: p.y + dy };\n return isValid(grid, moved) ? moved : null;\n}\n\nfunction tryRotate(grid: Cell[][], p: Piece, dir: 1 | -1): Piece | null {\n const newRot = ((p.rotation + dir) % 4 + 4) % 4;\n const key = `${p.rotation}>${newRot}`;\n const kicks = p.type === \"I\" ? I_WALL_KICKS[key] : WALL_KICKS[key];\n if (!kicks) return null;\n for (const [kx, ky] of kicks) {\n const candidate: Piece = { ...p, rotation: newRot, x: p.x + kx, y: p.y - ky };\n if (isValid(grid, candidate)) return candidate;\n }\n return null;\n}\n\nfunction ghostY(grid: Cell[][], p: Piece): number {\n let ghost = { ...p };\n while (true) {\n const next = tryMove(grid, ghost, 0, 1);\n if (!next) break;\n ghost = next;\n }\n return ghost.y;\n}\n\nfunction lockPiece(state: GameState): void {\n const color = COLORS[state.current.type];\n for (const [cx, cy] of getCells(state.current)) {\n if (cy >= 0 && cy < ROWS && cx >= 0 && cx < COLS) {\n state.grid[cy][cx] = color;\n }\n }\n state.canHold = true;\n\n // Check for cleared lines\n const cleared: number[] = [];\n for (let r = 0; r < ROWS; r++) {\n if (state.grid[r].every(c => c !== null)) {\n cleared.push(r);\n }\n }\n\n if (cleared.length > 0) {\n state.flashRows = cleared;\n state.flashTimer = 300; // flash for 300ms\n } else {\n spawnNext(state);\n }\n}\n\nfunction clearLines(state: GameState): void {\n const cleared = state.flashRows;\n if (cleared.length === 0) return;\n\n // Remove cleared rows and add empty ones at top\n for (const r of cleared.sort((a, b) => b - a)) {\n state.grid.splice(r, 1);\n state.grid.unshift(Array(COLS).fill(null));\n }\n\n const n = cleared.length;\n const pts = (LINE_POINTS[n] || n * 200) * state.level;\n state.score += pts;\n state.lines += n;\n state.level = Math.floor(state.lines / 10) + 1;\n\n state.flashRows = [];\n state.flashTimer = 0;\n}\n\nfunction spawnNext(state: GameState): void {\n const next = spawnPiece(state.nextPiece);\n state.nextPiece = nextFromBag(state.bag);\n state.current = next;\n state.dropTimer = 0;\n state.lockTimer = 0;\n\n if (!isValid(state.grid, state.current)) {\n state.gameOver = true;\n }\n}\n\nfunction hardDrop(state: GameState): void {\n const gy = ghostY(state.grid, state.current);\n const dist = gy - state.current.y;\n state.score += dist * 2;\n state.current.y = gy;\n lockPiece(state);\n}\n\nfunction holdPiece(state: GameState): void {\n if (!state.canHold) return;\n state.canHold = false;\n const curType = state.current.type;\n if (state.heldPiece !== null) {\n state.current = spawnPiece(state.heldPiece);\n state.heldPiece = curType;\n } else {\n state.heldPiece = curType;\n state.current = spawnPiece(state.nextPiece);\n state.nextPiece = nextFromBag(state.bag);\n }\n state.dropTimer = 0;\n state.lockTimer = 0;\n}\n\nfunction isOnGround(grid: Cell[][], p: Piece): boolean {\n return tryMove(grid, p, 0, 1) === null;\n}\n\n// ---- Rendering ----------------------------------------------------\n\nfunction drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number, y: number,\n size: number,\n color: string,\n alpha: number = 1\n): void {\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x * size, y * size, size, size);\n\n // Highlight (top-left bevel)\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size, y * size, size, 2);\n ctx.fillRect(x * size, y * size, 2, size);\n\n // Shadow (bottom-right bevel)\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size, (y + 1) * size - 2, size, 2);\n ctx.fillRect((x + 1) * size - 2, y * size, 2, size);\n\n // Grid outline\n ctx.strokeStyle = \"rgba(0,0,0,0.15)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(x * size + 0.5, y * size + 0.5, size - 1, size - 1);\n\n ctx.globalAlpha = 1;\n}\n\nfunction drawBoard(ctx: CanvasRenderingContext2D, state: GameState): void {\n const { grid, current, flashRows, flashTimer } = state;\n const w = COLS * BLOCK_SIZE;\n const h = ROWS * BLOCK_SIZE;\n\n // Background\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, w, h);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n ctx.lineWidth = 1;\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * BLOCK_SIZE);\n ctx.lineTo(w, r * BLOCK_SIZE);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * BLOCK_SIZE, 0);\n ctx.lineTo(c * BLOCK_SIZE, h);\n ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (grid[r][c]) {\n const flashing = flashRows.includes(r);\n if (flashing) {\n // Flash white/original alternately\n const flashOn = Math.floor(flashTimer / 75) % 2 === 0;\n drawBlock(ctx, c, r, BLOCK_SIZE, flashOn ? \"#fff\" : grid[r][c]!);\n } else {\n drawBlock(ctx, c, r, BLOCK_SIZE, grid[r][c]!);\n }\n }\n }\n }\n\n if (state.gameOver || state.flashRows.length > 0) return;\n\n // Ghost piece\n const gy = ghostY(grid, current);\n const ghostPiece: Piece = { ...current, y: gy };\n const ghostColor = COLORS[current.type];\n for (const [cx, cy] of getCells(ghostPiece)) {\n if (cy >= 0) {\n drawBlock(ctx, cx, cy, BLOCK_SIZE, ghostColor, GHOST_ALPHA);\n }\n }\n\n // Current piece\n const color = COLORS[current.type];\n for (const [cx, cy] of getCells(current)) {\n if (cy >= 0) {\n drawBlock(ctx, cx, cy, BLOCK_SIZE, color);\n }\n }\n}\n\nfunction drawPreviewPiece(\n ctx: CanvasRenderingContext2D,\n type: PieceType,\n offsetX: number,\n offsetY: number\n): void {\n const cells = SHAPES[type][0];\n const color = COLORS[type];\n // Center the preview\n let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;\n for (const [dx, dy] of cells) {\n minX = Math.min(minX, dx);\n maxX = Math.max(maxX, dx);\n minY = Math.min(minY, dy);\n maxY = Math.max(maxY, dy);\n }\n const pw = (maxX - minX + 1) * PREVIEW_BLOCK;\n const ph = (maxY - minY + 1) * PREVIEW_BLOCK;\n const cx = offsetX + (4 * PREVIEW_BLOCK - pw) / 2;\n const cy = offsetY + (3 * PREVIEW_BLOCK - ph) / 2;\n\n ctx.save();\n ctx.translate(cx - minX * PREVIEW_BLOCK, cy - minY * PREVIEW_BLOCK);\n for (const [dx, dy] of cells) {\n drawBlock(ctx, dx, dy, PREVIEW_BLOCK, color);\n }\n ctx.restore();\n}\n\nfunction drawSidebar(ctx: CanvasRenderingContext2D, state: GameState): void {\n const x = COLS * BLOCK_SIZE + 20;\n\n ctx.fillStyle = \"#ccc\";\n ctx.font = \"bold 16px monospace\";\n\n // Hold\n ctx.fillText(\"HOLD\", x, 30);\n ctx.strokeStyle = \"rgba(255,255,255,0.1)\";\n ctx.strokeRect(x, 38, 4 * PREVIEW_BLOCK + 10, 3 * PREVIEW_BLOCK + 10);\n if (state.heldPiece) {\n drawPreviewPiece(ctx, state.heldPiece, x + 5, 43);\n }\n\n // Next\n ctx.fillStyle = \"#ccc\";\n ctx.fillText(\"NEXT\", x, 130);\n ctx.strokeStyle = \"rgba(255,255,255,0.1)\";\n ctx.strokeRect(x, 138, 4 * PREVIEW_BLOCK + 10, 3 * PREVIEW_BLOCK + 10);\n drawPreviewPiece(ctx, state.nextPiece, x + 5, 143);\n\n // Score\n ctx.fillStyle = \"#ccc\";\n ctx.fillText(\"SCORE\", x, 240);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 20px monospace\";\n ctx.fillText(state.score.toLocaleString(), x, 265);\n\n // Level\n ctx.fillStyle = \"#ccc\";\n ctx.font = \"bold 16px monospace\";\n ctx.fillText(\"LEVEL\", x, 305);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 20px monospace\";\n ctx.fillText(String(state.level), x, 330);\n\n // Lines\n ctx.fillStyle = \"#ccc\";\n ctx.font = \"bold 16px monospace\";\n ctx.fillText(\"LINES\", x, 370);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 20px monospace\";\n ctx.fillText(String(state.lines), x, 395);\n}\n\nfunction drawOverlay(ctx: CanvasRenderingContext2D, text: string, sub: string): void {\n const w = COLS * BLOCK_SIZE;\n const h = ROWS * BLOCK_SIZE;\n ctx.fillStyle = \"rgba(0,0,0,0.6)\";\n ctx.fillRect(0, 0, w, h);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 28px monospace\";\n ctx.textAlign = \"center\";\n ctx.fillText(text, w / 2, h / 2 - 10);\n ctx.font = \"16px monospace\";\n ctx.fillStyle = \"#aaa\";\n ctx.fillText(sub, w / 2, h / 2 + 25);\n ctx.textAlign = \"left\";\n}\n\n// ---- Main Entry Point ---------------------------------------------\n\n(function main() {\n // Create canvas\n const canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n const ctx = canvas.getContext(\"2d\")!;\n const totalWidth = COLS * BLOCK_SIZE + 160;\n const totalHeight = ROWS * BLOCK_SIZE;\n canvas.width = totalWidth;\n canvas.height = totalHeight;\n\n let state = initGame();\n\n // ---- Input Handling -------------------------------------------\n\n const keysDown: Set<string> = new Set();\n const DAS_DELAY = 170; // initial delay before auto-repeat\n const DAS_RATE = 50; // repeat interval\n let dasKey: string | null = null;\n let dasTimer = 0;\n let dasRepeating = false;\n\n function handleAction(action: string): void {\n if (state.gameOver) {\n if (action === \"Enter\") {\n state = initGame();\n state.started = true;\n }\n return;\n }\n if (!state.started) {\n if (action === \"Enter\") {\n state.started = true;\n }\n return;\n }\n if (action === \"KeyP\" || action === \"Escape\") {\n state.paused = !state.paused;\n return;\n }\n if (state.paused) return;\n if (state.flashRows.length > 0) return;\n\n switch (action) {\n case \"ArrowLeft\": {\n const moved = tryMove(state.grid, state.current, -1, 0);\n if (moved) { state.current = moved; state.lockTimer = 0; }\n break;\n }\n case \"ArrowRight\": {\n const moved = tryMove(state.grid, state.current, 1, 0);\n if (moved) { state.current = moved; state.lockTimer = 0; }\n break;\n }\n case \"ArrowDown\": {\n const moved = tryMove(state.grid, state.current, 0, 1);\n if (moved) { state.current = moved; state.score += 1; state.dropTimer = 0; }\n break;\n }\n case \"ArrowUp\":\n case \"KeyX\": {\n const rotated = tryRotate(state.grid, state.current, 1);\n if (rotated) { state.current = rotated; state.lockTimer = 0; }\n break;\n }\n case \"KeyZ\": {\n const rotated = tryRotate(state.grid, state.current, -1);\n if (rotated) { state.current = rotated; state.lockTimer = 0; }\n break;\n }\n case \"Space\": {\n hardDrop(state);\n break;\n }\n case \"KeyC\":\n case \"ShiftLeft\":\n case \"ShiftRight\": {\n holdPiece(state);\n break;\n }\n }\n }\n\n document.addEventListener(\"keydown\", (e) => {\n if ([\"ArrowLeft\",\"ArrowRight\",\"ArrowDown\",\"ArrowUp\",\"Space\"].includes(e.code)) {\n e.preventDefault();\n }\n\n if (!keysDown.has(e.code)) {\n keysDown.add(e.code);\n handleAction(e.code);\n\n // Start DAS for left/right/down\n if ([\"ArrowLeft\", \"ArrowRight\", \"ArrowDown\"].includes(e.code)) {\n dasKey = e.code;\n dasTimer = 0;\n dasRepeating = false;\n }\n }\n });\n\n document.addEventListener(\"keyup\", (e) => {\n keysDown.delete(e.code);\n if (e.code === dasKey) {\n dasKey = null;\n dasTimer = 0;\n dasRepeating = false;\n }\n });\n\n // ---- Game Loop --------------------------------------------------\n\n function update(dt: number): void {\n if (!state.started || state.paused || state.gameOver) return;\n\n // Handle line clear flash\n if (state.flashRows.length > 0) {\n state.flashTimer -= dt;\n if (state.flashTimer <= 0) {\n clearLines(state);\n spawnNext(state);\n }\n return;\n }\n\n // DAS (Delayed Auto Shift)\n if (dasKey && keysDown.has(dasKey)) {\n dasTimer += dt;\n if (!dasRepeating && dasTimer >= DAS_DELAY) {\n dasRepeating = true;\n dasTimer = 0;\n handleAction(dasKey);\n } else if (dasRepeating && dasTimer >= DAS_RATE) {\n dasTimer = 0;\n handleAction(dasKey);\n }\n }\n\n // Gravity\n state.dropTimer += dt;\n const interval = getDropInterval(state.level);\n if (state.dropTimer >= interval) {\n state.dropTimer -= interval;\n const moved = tryMove(state.grid, state.current, 0, 1);\n if (moved) {\n state.current = moved;\n state.lockTimer = 0;\n }\n }\n\n // Lock delay\n if (isOnGround(state.grid, state.current)) {\n state.lockTimer += dt;\n if (state.lockTimer >= state.lockDelay) {\n lockPiece(state);\n }\n } else {\n state.lockTimer = 0;\n }\n }\n\n function render(): void {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // Dark background for entire canvas\n ctx.fillStyle = \"#1a1a2e\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n drawBoard(ctx, state);\n drawSidebar(ctx, state);\n\n if (!state.started) {\n drawOverlay(ctx, \"TETRIS\", \"Press ENTER to start\");\n } else if (state.gameOver) {\n drawOverlay(ctx, \"GAME OVER\", `Score: ${state.score.toLocaleString()} — ENTER to restart`);\n } else if (state.paused) {\n drawOverlay(ctx, \"PAUSED\", \"Press P or ESC to resume\");\n }\n }\n\n function gameLoop(timestamp: number): void {\n const dt = state.lastTime ? timestamp - state.lastTime : 0;\n state.lastTime = timestamp;\n\n update(Math.min(dt, 100)); // cap dt to avoid spiral of death\n render();\n requestAnimationFrame(gameLoop);\n }\n\n requestAnimationFrame(gameLoop);\n\n // ---- Controls legend (injected into DOM) -------------------------\n const controls = document.getElementById(\"controls\");\n if (controls) {\n controls.innerHTML = `\n <strong>Controls:</strong>\n ← → Move | \n ↑ / X Rotate CW | \n Z Rotate CCW | \n ↓ Soft Drop | \n Space Hard Drop | \n C / Shift Hold | \n P / Esc Pause\n `;\n }\n})();\nTSEOF","description":"Create the main Tetris TypeScript source file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":6063,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"170b1913-acf3-4b96-90c9-b14a3b9394e1"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01BB4EExqyPQfmdMQshdsDcN","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"10b86fd9-e953-421c-9f55-9522dc54b7cf","timestamp":"2026-04-03T19:46:48.900Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Bjwog2LsVNT6ZpD7YPR8kw","type":"message","role":"assistant","content":[{"type":"text","text":"Now create the HTML page:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7670,"cache_read_input_tokens":6063,"cache_creation":{"ephemeral_5m_input_tokens":7670,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"579cafbe-56e0-44c5-a74b-9372ac512b19"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Bjwog2LsVNT6ZpD7YPR8kw","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01A9mTRZD9ssv5Qm2EC8AV4S","name":"Bash","input":{"command":"cat > /tmp/loop-bench-uihc72su/index.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n background: #0f0f23;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n font-family: 'Segoe UI', monospace, sans-serif;\n color: #ccc;\n }\n h1 {\n font-size: 2rem;\n margin-bottom: 12px;\n letter-spacing: 0.3em;\n color: #e0e0ff;\n text-shadow: 0 0 20px rgba(100,100,255,0.4);\n }\n #game-canvas {\n border: 2px solid #333;\n border-radius: 4px;\n box-shadow: 0 0 40px rgba(0,0,0,0.6);\n }\n #controls {\n margin-top: 16px;\n font-size: 0.85rem;\n color: #888;\n text-align: center;\n max-width: 500px;\n line-height: 1.7;\n }\n #controls strong { color: #aaa; }\n </style>\n</head>\n<body>\n <h1>TETRIS</h1>\n <canvas id=\"game-canvas\"></canvas>\n <div id=\"controls\"></div>\n <script src=\"dist/tetris.js\"></script>\n</body>\n</html>\nHTMLEOF","description":"Create the HTML page for the Tetris game"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7670,"cache_read_input_tokens":6063,"cache_creation":{"ephemeral_5m_input_tokens":7670,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","uuid":"b0779b1e-aafe-4c24-8a48-f8300e2fe7e5"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":213662,"duration_api_ms":204889,"is_error":true,"num_turns":8,"stop_reason":"tool_use","session_id":"0fdb3a03-4299-47b8-a281-2570bceb7e41","total_cost_usd":0.5378575,"usage":{"input_tokens":10,"cache_creation_input_tokens":6274,"cache_read_input_tokens":37742,"output_tokens":16577,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":6274},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":11,"outputTokens":17150,"cacheReadInputTokens":43805,"cacheCreationInputTokens":13944,"webSearchRequests":0,"costUSD":0.5378575,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"1a15f4ce-4afb-4d03-958b-cc6755214b60","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":151813,"duration_api_ms":145303,"is_error":true,"num_turns":15,"stop_reason":"tool_use","session_id":"716ab261-d168-4db8-be33-df6b5303992c","total_cost_usd":0.5103989999999999,"usage":{"input_tokens":16,"cache_creation_input_tokens":24859,"cache_read_input_tokens":145893,"output_tokens":10591,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":24859},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":17,"outputTokens":10749,"cacheReadInputTokens":170578,"cacheCreationInputTokens":25008,"webSearchRequests":0,"costUSD":0.5103989999999999,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"6547f31a-58b1-4bf3-b610-0891d920b0cb","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,261 +0,0 @@ -{ - "structural": { - "pass": true, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "npm run build completed successfully" - }, - { - "name": "typescript_compiles", - "pass": true, - "detail": "tsc --noEmit passed" - } - ], - "score": 1.0 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true - }, - "performance": { - "bundle_size_bytes": 46584, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 7, - "code": 3, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1443, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 20, - "excessive": false - }, - "function_length": { - "count": 63, - "average": 7.7, - "max": 37, - "long_functions": 0 - }, - "max_nesting_depth": 14, - "global_declarations": 30, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 577, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 63, - "source_lines": 1135, - "ratio_pct": 5.6 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 8 - }, - "duplication_percentage": 0.0, - "score": 0.9 - }, - "transcript_analysis": { - "total_events": 45, - "tool_calls": { - "total": 15, - "bash": 9, - "write": 1, - "edit": 2, - "read": 3 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 10, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.94, - "total": 16, - "passed": 15, - "failed": 1, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "enter", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via enter" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 16 -> 44" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 80 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 131, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 21 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } - } - }, - "score": 0.753 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,127 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "enter", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via enter" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 16 -> 44" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 80 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 131, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 21 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "opus", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T19:43:18.885375+00:00", - "wall_time_seconds": 152, - "exit_code": 1, - "completed_at": "2026-04-03T19:45:56.829277+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=opus_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,45 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "opus", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-kx4unxjg","session_id":"716ab261-d168-4db8-be33-df6b5303992c","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-opus-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"e9b0fb1e-3f30-4ff4-9f19-0c6fcd0ad819","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01MBeAj8FCtn9HFYQSj9Xhvz","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game in TypeScript that runs in a browser. Let me create a complete implementation with all standard mechanics.\n\nLet me first check what's in the current directory.","signature":"Eo0DClkIDBgCKkA0sTeGcab/se0cQFfqwIkr0QQR3E/gy0FPRgdavWt/VcByctTexbADqfn/qnPIl1FK9LGeuht59D9kiZAaNaNFMg9jbGF1ZGUtb3B1cy00LTY4ABIMwIhnihHB4/j+8IngGgzirnJb1QLnowQqcHIiMBuqtPWc95C1ZN+0sbp9kuGXGbRK3TwPSQbxkCRjbUO+pF0bfaenyJ2BjJpLOIq1zyrhAU7W3vv4/OxKMRnUYGzaJV1wss48yjiVZ2j1VEsi8zp51TvVjJ11Bbzr/Lzz4xSY3l0n/EZLJ6JSyPKXReTHpDpqD+8Qs9tFVeHUzpZ6W3FRXXrNSKLuHcTc0W2cOSwxkTqeyMVdD5zpI8HUmXt7UoKbh87P4ZCv+ciAQPplVUX633CmNZpC72UMpJh+sKPseW5B+efW3UGbP3MHUwxzDgZhNzxkx8heR0ef27eKrN6qcL9/GXH2FlgjgC6qqKQ1DNdTXl4TO3Y2wVss2t2lCkYFNBaARnwbLtVvG/hhVs7N8BgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4780,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4780,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"26c9eafa-30bc-4e5e-b5c0-a8ad480b53e4"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01MBeAj8FCtn9HFYQSj9Xhvz","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LeyvHR6zEDp2fcEyQ2nuoN","name":"Bash","input":{"command":"ls /tmp/loop-bench-kx4unxjg","description":"List files in current directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4780,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4780,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"75c523eb-1188-4052-9f6d-2cdb39f0fd44"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LeyvHR6zEDp2fcEyQ2nuoN","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"ccb37569-b1a0-4f10-81b9-197a9c8aa16b","timestamp":"2026-04-03T19:43:27.429Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01RXSANZWoEbY4PKJqN8JSdd","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TyX2rN9NCXkJTyMgupSfc5","name":"Read","input":{"file_path":"/tmp/loop-bench-kx4unxjg/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":174,"cache_read_input_tokens":4780,"cache_creation":{"ephemeral_5m_input_tokens":174,"ephemeral_1h_input_tokens":0},"output_tokens":70,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"fd5ac619-7e7e-489f-a220-5f9206dba99a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TyX2rN9NCXkJTyMgupSfc5","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-kx4unxjg\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.1.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"0cf7bf16-9116-4aa7-9316-466c14742384","timestamp":"2026-04-03T19:43:28.982Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-kx4unxjg/package.json","content":"{\n \"name\": \"loop-bench-kx4unxjg\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.1.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01SckEWheVwf1h5ds6NzNrNf","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me set up a proper TypeScript project for a browser-based Tetris game. I'll need:\n\n1. `tsconfig.json` for TypeScript configuration\n2. `index.html` - the HTML page\n3. `src/tetris.ts` - the main game logic\n\nSince this is a browser game, I'll compile the TypeScript to JavaScript and serve it. Let me use a simple approach - compile TypeScript to a bundle that can be loaded in the browser.\n\nLet me create the project structure:\n- `index.html` - main page with canvas\n- `src/tetris.ts` - all game logic in one file\n\n\n- `tsconfig.json` to configure the TypeScript compiler to output a single JavaScript file that the HTML can load directly","signature":"EpwGClkIDBgCKkDdHP+Q8UpHIuqKosWx+GeNiC7+wXd2SdSgerqm/59y84AzJSxUFo4DoGLcc6s+b9vkq1tHrg54oxF75KxWCJ+xMg9jbGF1ZGUtb3B1cy00LTY4ABIMiJaUxUmW3XNs5AcMGgwR9UXEO7RZtAo4TfEiMKe/zj6H5Yt2W37QDRfDJmTpEHf/vdIt3LGcO2LjudMp4tOdinneed9yqHabU6BOVSrwBDDFJLJk9oYl3I9OI6ZUXrwW8W80uO65utUzo02Qd4O/CeofQi90o02RIA20tvSNU5/TUcC0TgkgDc+x6K25PvNlFyQKXWUZDMOduzXYwG0g9e2hlztN83fYq45lxqbXInHxzjPsoF3S0I/K80UEnW6scWowpqxlcx0mW8fh4CPV/QaLprfk6wak8yWEeZFimSofiWxVFIrUhMyX+SWHEeJq8LMMX/FREiq9HekaMtV/oSG+W3bTvzXgzmZw3Tvw3lso5mWZEoYRlxqi7kK31LE0oZgXAwTvv2XvL4hntjicY8HzrC6jk5qOgytCnnlr3JJS57toz+sxK8N0oJmCDRabsqdwZitlEozKdN/R21FUDz1rQRQa1rwBUi5oJ7Uxa5bB56Jpjoq6NMJY63mBj/gQLNHrV456Kd3G1tabJFv6aVZOLXVVKyZAiqRld9PEwm3zDVNa1q7rzE5YQ++wqZZtL8LLHbieIaOoMnmkhz44Mqjk/pvBEsJJpPX1kSY+k8lry+M95Tu5a2gEy9LHkRFhNHY0p8v8sSrVczBlJPoqPagZntfrJx14JE+OCsI8ULpjGxjZwekLcqgweevCIv09QUxtE5bAKTd6ZUWqXjCeBYN7jtv7pbRbD6V98f6wYGdUQ+YSZ+cHZ72rEr0KZ4Lz55Lk7MhpFAyYnMNUSAchRm/BJf2JPvIJVPAlab8SJoGNfUPjVcrTnCfZkhOwWTG3xO6ESBhXjKhqthbTr936ZdUyWPPz0U798V1JIRiRMtBKgvAq18BqCsRgqwCrbhrIweKva9FPRqiuUD1eeIpZzJBq8vr4g/2YUVuciXKYoxgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":491,"cache_read_input_tokens":4780,"cache_creation":{"ephemeral_5m_input_tokens":491,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"27fb7e8c-49e1-4d8d-9dcd-d7d033e55144"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01SckEWheVwf1h5ds6NzNrNf","type":"message","role":"assistant","content":[{"type":"text","text":"I'll build a complete Tetris game with TypeScript. Let me set up the project structure and implement everything."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":491,"cache_read_input_tokens":4780,"cache_creation":{"ephemeral_5m_input_tokens":491,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"3b983d5e-d850-46e0-b09d-793a0db5868e"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01SckEWheVwf1h5ds6NzNrNf","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JAteGyehaPhjmJpm8t4VrY","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-kx4unxjg/src","description":"Create src directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":491,"cache_read_input_tokens":4780,"cache_creation":{"ephemeral_5m_input_tokens":491,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"466f0717-1f84-4873-85a7-d46c76d88208"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JAteGyehaPhjmJpm8t4VrY","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"cd85c8e5-0444-4ec4-ba49-aa463f673cfb","timestamp":"2026-04-03T19:43:34.481Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01MJfeQpsvSP4psEpruceMwq","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HN5gtGpESD3rsRR63oHu8A","name":"Write","input":{"file_path":"/tmp/loop-bench-kx4unxjg/tsconfig.json","content":"{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"sourceMap\": true\n },\n \"include\": [\"src/**/*.ts\"]\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":315,"cache_read_input_tokens":5271,"cache_creation":{"ephemeral_5m_input_tokens":315,"ephemeral_1h_input_tokens":0},"output_tokens":54,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"01a14dd5-5072-4325-8059-4e93caf9148a"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"<tool_use_error>Error: No such tool available: Write</tool_use_error>","is_error":true,"tool_use_id":"toolu_01HN5gtGpESD3rsRR63oHu8A"}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"72fa9237-9a95-49fb-abbf-1eb9f0ae134d","timestamp":"2026-04-03T19:43:38.131Z","tool_use_result":"Error: No such tool available: Write"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01D2EFJLtfqiUSjCJMbd2UAs","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01J8eNBn3EsHjXKHywAaqDNt","name":"Bash","input":{"command":"cat > /tmp/loop-bench-kx4unxjg/tsconfig.json << 'TSEOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\"],\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"sourceMap\": true\n },\n \"include\": [\"src/**/*.ts\"]\n}\nTSEOF","description":"Create tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":262,"cache_read_input_tokens":5586,"cache_creation":{"ephemeral_5m_input_tokens":262,"ephemeral_1h_input_tokens":0},"output_tokens":56,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"1c48af52-addd-4ae2-898c-146fceaffcb4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01J8eNBn3EsHjXKHywAaqDNt","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"de878e90-fcbc-4324-b7f6-60e863ecc19d","timestamp":"2026-04-03T19:43:41.066Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01RvR9hjLDDtg6Tyzyta3RhD","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me create the main game TypeScript file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":257,"cache_read_input_tokens":5848,"cache_creation":{"ephemeral_5m_input_tokens":257,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"2f2d6f4c-d61c-4e0d-8695-d368b86ac70d"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01RvR9hjLDDtg6Tyzyta3RhD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WqUB3uW5ShMd2TDKtoeUW1","name":"Bash","input":{"command":"cat > /tmp/loop-bench-kx4unxjg/src/tetris.ts << 'TSEOF'\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype Cell = string | null;\ntype Grid = Cell[][];\ntype Shape = number[][];\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Piece {\n shape: Shape;\n color: string;\n pos: Position;\n}\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 30;\nconst PREVIEW_BLOCK_SIZE = 20;\n\nconst COLORS: Record<string, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\nconst SHAPES: Record<string, Shape> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [1, 1],\n [1, 1],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n// SRS wall kick data for J, L, S, T, Z pieces\nconst WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"1>0\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"1>2\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"2>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"2>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n \"3>2\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"3>0\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"0>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n};\n\n// SRS wall kick data for I piece\nconst WALL_KICKS_I: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"1>0\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"1>2\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n \"2>1\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"2>3\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"3>2\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"3>0\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"0>3\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n};\n\nconst POINTS = [0, 100, 300, 500, 800];\nconst LINES_PER_LEVEL = 10;\nconst BASE_DROP_INTERVAL = 1000;\nconst MIN_DROP_INTERVAL = 50;\nconst SOFT_DROP_INTERVAL = 50;\nconst LOCK_DELAY = 500;\n\nconst PIECE_NAMES = Object.keys(SHAPES);\n\n// ─── Game State ──────────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private grid: Grid;\n private currentPiece: Piece | null = null;\n private currentPieceType: string = \"\";\n private currentRotation: number = 0;\n private nextPieceType: string = \"\";\n private score: number = 0;\n private lines: number = 0;\n private level: number = 1;\n private gameOver: boolean = false;\n private paused: boolean = false;\n private started: boolean = false;\n\n private lastDropTime: number = 0;\n private dropInterval: number = BASE_DROP_INTERVAL;\n private softDropping: boolean = false;\n private lockTimer: number | null = null;\n private lockStartTime: number = 0;\n\n private animatingRows: number[] = [];\n private animationStart: number = 0;\n private readonly ANIMATION_DURATION = 300;\n\n private bag: string[] = [];\n\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private previewCanvas: HTMLCanvasElement;\n private previewCtx: CanvasRenderingContext2D;\n private scoreEl: HTMLElement;\n private linesEl: HTMLElement;\n private levelEl: HTMLElement;\n private messageEl: HTMLElement;\n\n constructor() {\n this.canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n this.ctx = this.canvas.getContext(\"2d\")!;\n this.previewCanvas = document.getElementById(\"preview-canvas\") as HTMLCanvasElement;\n this.previewCtx = this.previewCanvas.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.messageEl = document.getElementById(\"message\")!;\n\n this.canvas.width = COLS * BLOCK_SIZE;\n this.canvas.height = ROWS * BLOCK_SIZE;\n this.previewCanvas.width = 4 * PREVIEW_BLOCK_SIZE + 20;\n this.previewCanvas.height = 4 * PREVIEW_BLOCK_SIZE + 20;\n\n this.grid = this.createGrid();\n\n this.setupInput();\n this.showMessage(\"Press ENTER to start\");\n this.draw();\n }\n\n // ─── Grid Helpers ────────────────────────────────────────────────────────\n\n private createGrid(): Grid {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n }\n\n private isInsideGrid(x: number, y: number): boolean {\n return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n }\n\n private isCellOccupied(x: number, y: number): boolean {\n return y >= 0 && this.grid[y][x] !== null;\n }\n\n // ─── Bag Randomizer (7-bag) ──────────────────────────────────────────────\n\n private fillBag(): void {\n const bag = [...PIECE_NAMES];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n this.bag = bag;\n }\n\n private getNextPieceType(): string {\n if (this.bag.length === 0) this.fillBag();\n return this.bag.pop()!;\n }\n\n // ─── Piece Mechanics ─────────────────────────────────────────────────────\n\n private spawnPiece(): void {\n const type = this.nextPieceType || this.getNextPieceType();\n this.nextPieceType = this.getNextPieceType();\n\n const shape = SHAPES[type].map((row) => [...row]);\n const pieceWidth = shape[0].length;\n const x = Math.floor((COLS - pieceWidth) / 2);\n const y = 0;\n\n this.currentPiece = { shape, color: COLORS[type], pos: { x, y } };\n this.currentPieceType = type;\n this.currentRotation = 0;\n this.lockTimer = null;\n\n if (!this.isValidPosition(shape, x, y)) {\n this.endGame();\n }\n }\n\n private isValidPosition(shape: Shape, px: number, py: number): boolean {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = px + c;\n const y = py + r;\n if (x < 0 || x >= COLS || y >= ROWS) return false;\n if (y >= 0 && this.grid[y][x] !== null) return false;\n }\n }\n }\n return true;\n }\n\n private rotateCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[c][n - 1 - r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private rotateCCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[n - 1 - c][r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private tryRotation(clockwise: boolean): boolean {\n if (!this.currentPiece) return false;\n\n const newShape = clockwise\n ? this.rotateCW(this.currentPiece.shape)\n : this.rotateCCW(this.currentPiece.shape);\n\n const oldRot = this.currentRotation;\n const newRot = clockwise\n ? (this.currentRotation + 1) % 4\n : (this.currentRotation + 3) % 4;\n\n const kickKey = `${oldRot}>${newRot}`;\n const kicks = this.currentPieceType === \"I\" ? WALL_KICKS_I : WALL_KICKS;\n const tests = kicks[kickKey] || [[0, 0]];\n\n for (const [dx, dy] of tests) {\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y - dy; // SRS uses y-up, our grid is y-down\n if (this.isValidPosition(newShape, nx, ny)) {\n this.currentPiece.shape = newShape;\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n this.currentRotation = newRot;\n this.resetLockTimerOnAction();\n return true;\n }\n }\n return false;\n }\n\n private movePiece(dx: number, dy: number): boolean {\n if (!this.currentPiece) return false;\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y + dy;\n if (this.isValidPosition(this.currentPiece.shape, nx, ny)) {\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n if (dx !== 0) this.resetLockTimerOnAction();\n return true;\n }\n return false;\n }\n\n private hardDrop(): void {\n if (!this.currentPiece) return;\n let dropDistance = 0;\n while (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.currentPiece.pos.y++;\n dropDistance++;\n }\n this.score += dropDistance * 2;\n this.lockPiece();\n }\n\n private getGhostY(): number {\n if (!this.currentPiece) return 0;\n let gy = this.currentPiece.pos.y;\n while (\n this.isValidPosition(this.currentPiece.shape, this.currentPiece.pos.x, gy + 1)\n ) {\n gy++;\n }\n return gy;\n }\n\n private lockPiece(): void {\n if (!this.currentPiece) return;\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0 && y < ROWS && x >= 0 && x < COLS) {\n this.grid[y][x] = color;\n }\n }\n }\n }\n this.currentPiece = null;\n this.lockTimer = null;\n this.clearLines();\n }\n\n private resetLockTimerOnAction(): void {\n if (this.lockTimer !== null) {\n this.lockStartTime = performance.now();\n }\n }\n\n // ─── Line Clearing ──────────────────────────────────────────────────────\n\n private clearLines(): void {\n const fullRows: number[] = [];\n for (let r = 0; r < ROWS; r++) {\n if (this.grid[r].every((cell) => cell !== null)) {\n fullRows.push(r);\n }\n }\n\n if (fullRows.length > 0) {\n this.animatingRows = fullRows;\n this.animationStart = performance.now();\n } else {\n this.spawnPiece();\n }\n }\n\n private finishClearLines(): void {\n const fullRows = this.animatingRows;\n const cleared = fullRows.length;\n\n // Remove full rows from bottom to top\n for (const row of fullRows.sort((a, b) => b - a)) {\n this.grid.splice(row, 1);\n this.grid.unshift(Array(COLS).fill(null));\n }\n\n this.lines += cleared;\n this.score += POINTS[cleared] * this.level;\n this.level = Math.floor(this.lines / LINES_PER_LEVEL) + 1;\n this.dropInterval = Math.max(\n MIN_DROP_INTERVAL,\n BASE_DROP_INTERVAL - (this.level - 1) * 75\n );\n\n this.animatingRows = [];\n this.updateUI();\n this.spawnPiece();\n }\n\n // ─── Gravity / Tick ──────────────────────────────────────────────────────\n\n private tick(now: number): void {\n if (this.gameOver || this.paused || !this.started) return;\n\n // Handle line-clear animation\n if (this.animatingRows.length > 0) {\n if (now - this.animationStart >= this.ANIMATION_DURATION) {\n this.finishClearLines();\n }\n return;\n }\n\n if (!this.currentPiece) return;\n\n const interval = this.softDropping ? SOFT_DROP_INTERVAL : this.dropInterval;\n\n if (now - this.lastDropTime >= interval) {\n const moved = this.movePiece(0, 1);\n if (moved) {\n if (this.softDropping) this.score += 1;\n this.lastDropTime = now;\n // If piece can still move down, cancel lock timer\n if (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockTimer = null;\n }\n } else {\n // Piece can't move down — start lock delay\n if (this.lockTimer === null) {\n this.lockTimer = 1;\n this.lockStartTime = now;\n }\n }\n if (moved) this.lastDropTime = now;\n }\n\n // Lock delay check\n if (this.lockTimer !== null && now - this.lockStartTime >= LOCK_DELAY) {\n // Double-check piece is still grounded\n if (\n !this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockPiece();\n } else {\n this.lockTimer = null;\n }\n }\n }\n\n // ─── Drawing ─────────────────────────────────────────────────────────────\n\n private drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n color: string,\n size: number,\n alpha: number = 1\n ): void {\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n\n // Highlight\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, 3);\n ctx.fillRect(x * size + 1, y * size + 1, 3, size - 2);\n\n // Shadow\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size + 1, y * size + size - 4, size - 2, 3);\n ctx.fillRect(x * size + size - 4, y * size + 1, 3, size - 2);\n\n ctx.globalAlpha = 1;\n }\n\n private draw(): void {\n const ctx = this.ctx;\n const bs = BLOCK_SIZE;\n\n // Background\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"#222\";\n ctx.lineWidth = 0.5;\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * bs);\n ctx.lineTo(COLS * bs, r * bs);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * bs, 0);\n ctx.lineTo(c * bs, ROWS * bs);\n ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.grid[r][c]) {\n let alpha = 1;\n if (this.animatingRows.includes(r)) {\n const progress =\n (performance.now() - this.animationStart) / this.ANIMATION_DURATION;\n alpha = 1 - progress;\n }\n this.drawBlock(ctx, c, r, this.grid[r][c]!, bs, alpha);\n }\n }\n }\n\n // Ghost piece\n if (this.currentPiece && !this.gameOver) {\n const ghostY = this.getGhostY();\n const { shape, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = ghostY + r;\n if (y >= 0) {\n ctx.strokeStyle = this.currentPiece.color;\n ctx.lineWidth = 1.5;\n ctx.globalAlpha = 0.35;\n ctx.strokeRect(\n x * bs + 2,\n y * bs + 2,\n bs - 4,\n bs - 4\n );\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n }\n\n // Current piece\n if (this.currentPiece && !this.gameOver) {\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0) {\n this.drawBlock(ctx, x, y, color, bs);\n }\n }\n }\n }\n }\n\n // Preview piece\n this.drawPreview();\n }\n\n private drawPreview(): void {\n const ctx = this.previewCtx;\n const bs = PREVIEW_BLOCK_SIZE;\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.previewCanvas.width, this.previewCanvas.height);\n\n if (!this.nextPieceType) return;\n const shape = SHAPES[this.nextPieceType];\n const color = COLORS[this.nextPieceType];\n\n // Center the piece in the preview\n const pieceW = shape[0].length;\n const pieceH = shape.length;\n const offsetX = (this.previewCanvas.width - pieceW * bs) / 2 / bs;\n const offsetY = (this.previewCanvas.height - pieceH * bs) / 2 / bs;\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n this.drawBlock(ctx, offsetX + c, offsetY + r, color, bs);\n }\n }\n }\n }\n\n // ─── UI Updates ──────────────────────────────────────────────────────────\n\n private updateUI(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.linesEl.textContent = this.lines.toString();\n this.levelEl.textContent = this.level.toString();\n }\n\n private showMessage(msg: string): void {\n this.messageEl.textContent = msg;\n this.messageEl.style.display = \"flex\";\n }\n\n private hideMessage(): void {\n this.messageEl.style.display = \"none\";\n }\n\n // ─── Game Flow ───────────────────────────────────────────────────────────\n\n startGame(): void {\n this.grid = this.createGrid();\n this.score = 0;\n this.lines = 0;\n this.level = 1;\n this.dropInterval = BASE_DROP_INTERVAL;\n this.gameOver = false;\n this.paused = false;\n this.started = true;\n this.bag = [];\n this.animatingRows = [];\n this.nextPieceType = \"\";\n this.currentPiece = null;\n this.softDropping = false;\n\n this.updateUI();\n this.hideMessage();\n this.spawnPiece();\n this.lastDropTime = performance.now();\n }\n\n private endGame(): void {\n this.gameOver = true;\n this.started = false;\n this.showMessage(`Game Over! Score: ${this.score.toLocaleString()}\\nPress ENTER to restart`);\n }\n\n private togglePause(): void {\n if (!this.started || this.gameOver) return;\n this.paused = !this.paused;\n if (this.paused) {\n this.showMessage(\"Paused\\nPress P to resume\");\n } else {\n this.hideMessage();\n this.lastDropTime = performance.now();\n }\n }\n\n // ─── Input ───────────────────────────────────────────────────────────────\n\n private setupInput(): void {\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n if (!this.started || this.gameOver) {\n this.startGame();\n }\n return;\n }\n\n if (e.key === \"p\" || e.key === \"P\") {\n this.togglePause();\n return;\n }\n\n if (this.gameOver || this.paused || !this.started || !this.currentPiece) return;\n if (this.animatingRows.length > 0) return;\n\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n this.movePiece(-1, 0);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n this.movePiece(1, 0);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n this.softDropping = true;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.tryRotation(true);\n break;\n case \"z\":\n case \"Z\":\n this.tryRotation(false);\n break;\n case \"x\":\n case \"X\":\n this.tryRotation(true);\n break;\n case \" \":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n });\n\n document.addEventListener(\"keyup\", (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n this.softDropping = false;\n }\n });\n }\n\n // ─── Main Loop ───────────────────────────────────────────────────────────\n\n run(): void {\n const loop = (now: number): void => {\n this.tick(now);\n this.draw();\n requestAnimationFrame(loop);\n };\n requestAnimationFrame(loop);\n }\n}\n\n// ─── Bootstrap ───────────────────────────────────────────────────────────────\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n const game = new TetrisGame();\n game.run();\n});\nTSEOF","description":"Create main Tetris game TypeScript source file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":257,"cache_read_input_tokens":5848,"cache_creation":{"ephemeral_5m_input_tokens":257,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"5e17921c-d633-4792-b53a-fab4691fcb1c"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WqUB3uW5ShMd2TDKtoeUW1","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"8c7f0d28-b5c0-4749-adf3-b0d88294a3e9","timestamp":"2026-04-03T19:45:00.155Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_019nYgjmrCvvksHkAEChMLvD","type":"message","role":"assistant","content":[{"type":"text","text":"Now create the HTML file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7388,"cache_read_input_tokens":6105,"cache_creation":{"ephemeral_5m_input_tokens":7388,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"51243a07-a116-4bc3-a7ea-f0df4b0c3b59"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_019nYgjmrCvvksHkAEChMLvD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Y2hzDfnM7ya4UCrmWCRmtf","name":"Bash","input":{"command":"cat > /tmp/loop-bench-kx4unxjg/index.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n * {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n }\n\n body {\n background: #0a0a0a;\n color: #eee;\n font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n overflow: hidden;\n }\n\n #game-wrapper {\n display: flex;\n gap: 24px;\n align-items: flex-start;\n }\n\n #game-container {\n position: relative;\n border: 2px solid #444;\n border-radius: 4px;\n background: #111;\n }\n\n #game-canvas {\n display: block;\n }\n\n #message {\n position: absolute;\n inset: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n background: rgba(0, 0, 0, 0.8);\n color: #fff;\n font-size: 20px;\n font-weight: bold;\n text-align: center;\n white-space: pre-line;\n line-height: 1.6;\n z-index: 10;\n border-radius: 4px;\n }\n\n #sidebar {\n display: flex;\n flex-direction: column;\n gap: 20px;\n min-width: 140px;\n }\n\n .panel {\n background: #1a1a1a;\n border: 1px solid #333;\n border-radius: 6px;\n padding: 14px;\n }\n\n .panel h3 {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 2px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .panel .value {\n font-size: 24px;\n font-weight: bold;\n color: #fff;\n font-variant-numeric: tabular-nums;\n }\n\n #preview-panel {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n #preview-canvas {\n display: block;\n }\n\n #controls {\n font-size: 11px;\n color: #666;\n line-height: 1.8;\n }\n\n #controls kbd {\n background: #222;\n border: 1px solid #444;\n border-radius: 3px;\n padding: 1px 5px;\n font-family: inherit;\n font-size: 10px;\n color: #aaa;\n }\n </style>\n</head>\n<body>\n <div id=\"game-wrapper\">\n <div id=\"game-container\">\n <canvas id=\"game-canvas\"></canvas>\n <div id=\"message\"></div>\n </div>\n <div id=\"sidebar\">\n <div class=\"panel\" id=\"preview-panel\">\n <h3>Next</h3>\n <canvas id=\"preview-canvas\"></canvas>\n </div>\n <div class=\"panel\">\n <h3>Score</h3>\n <div class=\"value\" id=\"score\">0</div>\n </div>\n <div class=\"panel\">\n <h3>Lines</h3>\n <div class=\"value\" id=\"lines\">0</div>\n </div>\n <div class=\"panel\">\n <h3>Level</h3>\n <div class=\"value\" id=\"level\">1</div>\n </div>\n <div class=\"panel\" id=\"controls\">\n <h3>Controls</h3>\n <kbd>←</kbd> <kbd>→</kbd> Move<br />\n <kbd>↑</kbd> / <kbd>X</kbd> Rotate CW<br />\n <kbd>Z</kbd> Rotate CCW<br />\n <kbd>↓</kbd> Soft drop<br />\n <kbd>Space</kbd> Hard drop<br />\n <kbd>P</kbd> Pause<br />\n <kbd>Enter</kbd> Start\n </div>\n </div>\n </div>\n <script type=\"module\" src=\"./dist/tetris.js\"></script>\n</body>\n</html>\nHTMLEOF","description":"Create index.html with game layout and styling"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7388,"cache_read_input_tokens":6105,"cache_creation":{"ephemeral_5m_input_tokens":7388,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"a2f30dc1-61f1-45a3-8a03-cbc51f80c50e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Y2hzDfnM7ya4UCrmWCRmtf","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"b79b47cc-8b34-497b-8f79-f8e18ba2e4f7","timestamp":"2026-04-03T19:45:17.449Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01WpK4i3EotcytSEEaUbxb1t","type":"message","role":"assistant","content":[{"type":"text","text":"Now let's compile the TypeScript and add a serve script:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1314,"cache_read_input_tokens":13493,"cache_creation":{"ephemeral_5m_input_tokens":1314,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"c4188282-e961-4f1c-ba8f-38c87c889ffa"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01WpK4i3EotcytSEEaUbxb1t","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LVP2K92YAsD1FNC7PeJCyD","name":"Bash","input":{"command":"npx tsc 2>&1","description":"Compile TypeScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1314,"cache_read_input_tokens":13493,"cache_creation":{"ephemeral_5m_input_tokens":1314,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"ae5b9455-1cab-40f5-ab07-74a3175d96b3"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LVP2K92YAsD1FNC7PeJCyD","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"fcb909bd-c821-4933-9eab-153b5d5747af","timestamp":"2026-04-03T19:45:22.551Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Y4p7XFVYuTnjUWrs3pB7rf","type":"message","role":"assistant","content":[{"type":"text","text":"Clean compilation. Let me verify the output:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":111,"cache_read_input_tokens":14807,"cache_creation":{"ephemeral_5m_input_tokens":111,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"bc761a32-1c34-45ad-8167-33b8b11a7a87"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Y4p7XFVYuTnjUWrs3pB7rf","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01DWyfYDCu3nPrzZC5rH7RUu","name":"Bash","input":{"command":"ls -la /tmp/loop-bench-kx4unxjg/dist/","description":"Verify compiled output"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":111,"cache_read_input_tokens":14807,"cache_creation":{"ephemeral_5m_input_tokens":111,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"e4c27e53-a036-467c-afb8-9fd006111836"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01DWyfYDCu3nPrzZC5rH7RUu","type":"tool_result","content":"total 60\ndrwxr-xr-x 2 root root 4096 Apr 3 21:45 .\ndrwx------ 5 root root 4096 Apr 3 21:45 ..\n-rw-r--r-- 1 root root 22289 Apr 3 21:45 tetris.js\n-rw-r--r-- 1 root root 24731 Apr 3 21:45 tetris.js.map","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"6d06fc61-5abf-4bc6-86ee-b04f53b2bde0","timestamp":"2026-04-03T19:45:29.525Z","tool_use_result":{"stdout":"total 60\ndrwxr-xr-x 2 root root 4096 Apr 3 21:45 .\ndrwx------ 5 root root 4096 Apr 3 21:45 ..\n-rw-r--r-- 1 root root 22289 Apr 3 21:45 tetris.js\n-rw-r--r-- 1 root root 24731 Apr 3 21:45 tetris.js.map","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_0174ioW4X9ykkpupPf6RHfhS","type":"message","role":"assistant","content":[{"type":"text","text":"Let me also update the `package.json` with useful scripts:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":230,"cache_read_input_tokens":14918,"cache_creation":{"ephemeral_5m_input_tokens":230,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"99f35cf5-14d1-4912-a07a-479c8ac77ba9"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_0174ioW4X9ykkpupPf6RHfhS","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WZ4iSkG2C97sFUWLKVMZmJ","name":"Read","input":{"file_path":"/tmp/loop-bench-kx4unxjg/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":230,"cache_read_input_tokens":14918,"cache_creation":{"ephemeral_5m_input_tokens":230,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"0f63797a-4b6b-433e-b352-e2a99e2fd57e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WZ4iSkG2C97sFUWLKVMZmJ","type":"tool_result","content":"File unchanged since last read. The content from the earlier Read tool_result in this conversation is still current — refer to that instead of re-reading."}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"fe9d6c05-bdd1-4ba8-bdb4-8a2776a7a5cd","timestamp":"2026-04-03T19:45:32.753Z","tool_use_result":{"type":"file_unchanged","file":{"filePath":"/tmp/loop-bench-kx4unxjg/package.json"}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_018ihKjvqcF92qcrbJJJy3he","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JUBDPKzQfX2yuywZXZmiSX","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-kx4unxjg/package.json","old_string":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","new_string":" \"scripts\": {\n \"build\": \"tsc\",\n \"serve\": \"npx serve .\",\n \"test\": \"npx playwright test\"\n },"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":127,"cache_read_input_tokens":15148,"cache_creation":{"ephemeral_5m_input_tokens":127,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"f064583f-5429-44e7-b158-345cdf2bc3f7"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JUBDPKzQfX2yuywZXZmiSX","type":"tool_result","content":"The file /tmp/loop-bench-kx4unxjg/package.json has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"04487f97-489c-41f6-9384-8f7138ac9ded","timestamp":"2026-04-03T19:45:36.694Z","tool_use_result":{"filePath":"/tmp/loop-bench-kx4unxjg/package.json","oldString":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","newString":" \"scripts\": {\n \"build\": \"tsc\",\n \"serve\": \"npx serve .\",\n \"test\": \"npx playwright test\"\n },","originalFile":"{\n \"name\": \"loop-bench-kx4unxjg\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.1.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","structuredPatch":[{"oldStart":4,"oldLines":7,"newStart":4,"newLines":9,"lines":[" \"description\": \"\","," \"main\": \"index.js\","," \"scripts\": {","- \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"","+ \"build\": \"tsc\",","+ \"serve\": \"npx serve .\",","+ \"test\": \"npx playwright test\""," },"," \"keywords\": [],"," \"author\": \"\","]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01AaJdRTX74t7ndu94Cgskx6","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me verify the final source to make sure everything looks right:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":227,"cache_read_input_tokens":15275,"cache_creation":{"ephemeral_5m_input_tokens":227,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"d8f0f994-8c7e-4543-a524-11effc78002b"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01AaJdRTX74t7ndu94Cgskx6","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01BnpfKsnQqLDYTbCF1Ek5UL","name":"Read","input":{"file_path":"/tmp/loop-bench-kx4unxjg/src/tetris.ts"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":227,"cache_read_input_tokens":15275,"cache_creation":{"ephemeral_5m_input_tokens":227,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"0c3b852e-1915-42ea-9a1f-cd0b2ed046c9"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01BnpfKsnQqLDYTbCF1Ek5UL","type":"tool_result","content":"1\t// ─── Types ───────────────────────────────────────────────────────────────────\n2\t\n3\ttype Cell = string | null;\n4\ttype Grid = Cell[][];\n5\ttype Shape = number[][];\n6\t\n7\tinterface Position {\n8\t x: number;\n9\t y: number;\n10\t}\n11\t\n12\tinterface Piece {\n13\t shape: Shape;\n14\t color: string;\n15\t pos: Position;\n16\t}\n17\t\n18\t// ─── Constants ───────────────────────────────────────────────────────────────\n19\t\n20\tconst COLS = 10;\n21\tconst ROWS = 20;\n22\tconst BLOCK_SIZE = 30;\n23\tconst PREVIEW_BLOCK_SIZE = 20;\n24\t\n25\tconst COLORS: Record<string, string> = {\n26\t I: \"#00f0f0\",\n27\t O: \"#f0f000\",\n28\t T: \"#a000f0\",\n29\t S: \"#00f000\",\n30\t Z: \"#f00000\",\n31\t J: \"#0000f0\",\n32\t L: \"#f0a000\",\n33\t};\n34\t\n35\tconst SHAPES: Record<string, Shape> = {\n36\t I: [\n37\t [0, 0, 0, 0],\n38\t [1, 1, 1, 1],\n39\t [0, 0, 0, 0],\n40\t [0, 0, 0, 0],\n41\t ],\n42\t O: [\n43\t [1, 1],\n44\t [1, 1],\n45\t ],\n46\t T: [\n47\t [0, 1, 0],\n48\t [1, 1, 1],\n49\t [0, 0, 0],\n50\t ],\n51\t S: [\n52\t [0, 1, 1],\n53\t [1, 1, 0],\n54\t [0, 0, 0],\n55\t ],\n56\t Z: [\n57\t [1, 1, 0],\n58\t [0, 1, 1],\n59\t [0, 0, 0],\n60\t ],\n61\t J: [\n62\t [1, 0, 0],\n63\t [1, 1, 1],\n64\t [0, 0, 0],\n65\t ],\n66\t L: [\n67\t [0, 0, 1],\n68\t [1, 1, 1],\n69\t [0, 0, 0],\n70\t ],\n71\t};\n72\t\n73\t// SRS wall kick data for J, L, S, T, Z pieces\n74\tconst WALL_KICKS: Record<string, [number, number][]> = {\n75\t \"0>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n76\t \"1>0\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n77\t \"1>2\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n78\t \"2>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n79\t \"2>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n80\t \"3>2\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n81\t \"3>0\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n82\t \"0>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n83\t};\n84\t\n85\t// SRS wall kick data for I piece\n86\tconst WALL_KICKS_I: Record<string, [number, number][]> = {\n87\t \"0>1\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n88\t \"1>0\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n89\t \"1>2\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n90\t \"2>1\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n91\t \"2>3\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n92\t \"3>2\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n93\t \"3>0\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n94\t \"0>3\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n95\t};\n96\t\n97\tconst POINTS = [0, 100, 300, 500, 800];\n98\tconst LINES_PER_LEVEL = 10;\n99\tconst BASE_DROP_INTERVAL = 1000;\n100\tconst MIN_DROP_INTERVAL = 50;\n101\tconst SOFT_DROP_INTERVAL = 50;\n102\tconst LOCK_DELAY = 500;\n103\t\n104\tconst PIECE_NAMES = Object.keys(SHAPES);\n105\t\n106\t// ─── Game State ──────────────────────────────────────────────────────────────\n107\t\n108\tclass TetrisGame {\n109\t private grid: Grid;\n110\t private currentPiece: Piece | null = null;\n111\t private currentPieceType: string = \"\";\n112\t private currentRotation: number = 0;\n113\t private nextPieceType: string = \"\";\n114\t private score: number = 0;\n115\t private lines: number = 0;\n116\t private level: number = 1;\n117\t private gameOver: boolean = false;\n118\t private paused: boolean = false;\n119\t private started: boolean = false;\n120\t\n121\t private lastDropTime: number = 0;\n122\t private dropInterval: number = BASE_DROP_INTERVAL;\n123\t private softDropping: boolean = false;\n124\t private lockTimer: number | null = null;\n125\t private lockStartTime: number = 0;\n126\t\n127\t private animatingRows: number[] = [];\n128\t private animationStart: number = 0;\n129\t private readonly ANIMATION_DURATION = 300;\n130\t\n131\t private bag: string[] = [];\n132\t\n133\t private canvas: HTMLCanvasElement;\n134\t private ctx: CanvasRenderingContext2D;\n135\t private previewCanvas: HTMLCanvasElement;\n136\t private previewCtx: CanvasRenderingContext2D;\n137\t private scoreEl: HTMLElement;\n138\t private linesEl: HTMLElement;\n139\t private levelEl: HTMLElement;\n140\t private messageEl: HTMLElement;\n141\t\n142\t constructor() {\n143\t this.canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n144\t this.ctx = this.canvas.getContext(\"2d\")!;\n145\t this.previewCanvas = document.getElementById(\"preview-canvas\") as HTMLCanvasElement;\n146\t this.previewCtx = this.previewCanvas.getContext(\"2d\")!;\n147\t this.scoreEl = document.getElementById(\"score\")!;\n148\t this.linesEl = document.getElementById(\"lines\")!;\n149\t this.levelEl = document.getElementById(\"level\")!;\n150\t this.messageEl = document.getElementById(\"message\")!;\n151\t\n152\t this.canvas.width = COLS * BLOCK_SIZE;\n153\t this.canvas.height = ROWS * BLOCK_SIZE;\n154\t this.previewCanvas.width = 4 * PREVIEW_BLOCK_SIZE + 20;\n155\t this.previewCanvas.height = 4 * PREVIEW_BLOCK_SIZE + 20;\n156\t\n157\t this.grid = this.createGrid();\n158\t\n159\t this.setupInput();\n160\t this.showMessage(\"Press ENTER to start\");\n161\t this.draw();\n162\t }\n163\t\n164\t // ─── Grid Helpers ────────────────────────────────────────────────────────\n165\t\n166\t private createGrid(): Grid {\n167\t return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n168\t }\n169\t\n170\t private isInsideGrid(x: number, y: number): boolean {\n171\t return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n172\t }\n173\t\n174\t private isCellOccupied(x: number, y: number): boolean {\n175\t return y >= 0 && this.grid[y][x] !== null;\n176\t }\n177\t\n178\t // ─── Bag Randomizer (7-bag) ──────────────────────────────────────────────\n179\t\n180\t private fillBag(): void {\n181\t const bag = [...PIECE_NAMES];\n182\t for (let i = bag.length - 1; i > 0; i--) {\n183\t const j = Math.floor(Math.random() * (i + 1));\n184\t [bag[i], bag[j]] = [bag[j], bag[i]];\n185\t }\n186\t this.bag = bag;\n187\t }\n188\t\n189\t private getNextPieceType(): string {\n190\t if (this.bag.length === 0) this.fillBag();\n191\t return this.bag.pop()!;\n192\t }\n193\t\n194\t // ─── Piece Mechanics ─────────────────────────────────────────────────────\n195\t\n196\t private spawnPiece(): void {\n197\t const type = this.nextPieceType || this.getNextPieceType();\n198\t this.nextPieceType = this.getNextPieceType();\n199\t\n200\t const shape = SHAPES[type].map((row) => [...row]);\n201\t const pieceWidth = shape[0].length;\n202\t const x = Math.floor((COLS - pieceWidth) / 2);\n203\t const y = 0;\n204\t\n205\t this.currentPiece = { shape, color: COLORS[type], pos: { x, y } };\n206\t this.currentPieceType = type;\n207\t this.currentRotation = 0;\n208\t this.lockTimer = null;\n209\t\n210\t if (!this.isValidPosition(shape, x, y)) {\n211\t this.endGame();\n212\t }\n213\t }\n214\t\n215\t private isValidPosition(shape: Shape, px: number, py: number): boolean {\n216\t for (let r = 0; r < shape.length; r++) {\n217\t for (let c = 0; c < shape[r].length; c++) {\n218\t if (shape[r][c]) {\n219\t const x = px + c;\n220\t const y = py + r;\n221\t if (x < 0 || x >= COLS || y >= ROWS) return false;\n222\t if (y >= 0 && this.grid[y][x] !== null) return false;\n223\t }\n224\t }\n225\t }\n226\t return true;\n227\t }\n228\t\n229\t private rotateCW(shape: Shape): Shape {\n230\t const n = shape.length;\n231\t const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n232\t for (let r = 0; r < n; r++) {\n233\t for (let c = 0; c < n; c++) {\n234\t rotated[c][n - 1 - r] = shape[r][c];\n235\t }\n236\t }\n237\t return rotated;\n238\t }\n239\t\n240\t private rotateCCW(shape: Shape): Shape {\n241\t const n = shape.length;\n242\t const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n243\t for (let r = 0; r < n; r++) {\n244\t for (let c = 0; c < n; c++) {\n245\t rotated[n - 1 - c][r] = shape[r][c];\n246\t }\n247\t }\n248\t return rotated;\n249\t }\n250\t\n251\t private tryRotation(clockwise: boolean): boolean {\n252\t if (!this.currentPiece) return false;\n253\t\n254\t const newShape = clockwise\n255\t ? this.rotateCW(this.currentPiece.shape)\n256\t : this.rotateCCW(this.currentPiece.shape);\n257\t\n258\t const oldRot = this.currentRotation;\n259\t const newRot = clockwise\n260\t ? (this.currentRotation + 1) % 4\n261\t : (this.currentRotation + 3) % 4;\n262\t\n263\t const kickKey = `${oldRot}>${newRot}`;\n264\t const kicks = this.currentPieceType === \"I\" ? WALL_KICKS_I : WALL_KICKS;\n265\t const tests = kicks[kickKey] || [[0, 0]];\n266\t\n267\t for (const [dx, dy] of tests) {\n268\t const nx = this.currentPiece.pos.x + dx;\n269\t const ny = this.currentPiece.pos.y - dy; // SRS uses y-up, our grid is y-down\n270\t if (this.isValidPosition(newShape, nx, ny)) {\n271\t this.currentPiece.shape = newShape;\n272\t this.currentPiece.pos.x = nx;\n273\t this.currentPiece.pos.y = ny;\n274\t this.currentRotation = newRot;\n275\t this.resetLockTimerOnAction();\n276\t return true;\n277\t }\n278\t }\n279\t return false;\n280\t }\n281\t\n282\t private movePiece(dx: number, dy: number): boolean {\n283\t if (!this.currentPiece) return false;\n284\t const nx = this.currentPiece.pos.x + dx;\n285\t const ny = this.currentPiece.pos.y + dy;\n286\t if (this.isValidPosition(this.currentPiece.shape, nx, ny)) {\n287\t this.currentPiece.pos.x = nx;\n288\t this.currentPiece.pos.y = ny;\n289\t if (dx !== 0) this.resetLockTimerOnAction();\n290\t return true;\n291\t }\n292\t return false;\n293\t }\n294\t\n295\t private hardDrop(): void {\n296\t if (!this.currentPiece) return;\n297\t let dropDistance = 0;\n298\t while (\n299\t this.isValidPosition(\n300\t this.currentPiece.shape,\n301\t this.currentPiece.pos.x,\n302\t this.currentPiece.pos.y + 1\n303\t )\n304\t ) {\n305\t this.currentPiece.pos.y++;\n306\t dropDistance++;\n307\t }\n308\t this.score += dropDistance * 2;\n309\t this.lockPiece();\n310\t }\n311\t\n312\t private getGhostY(): number {\n313\t if (!this.currentPiece) return 0;\n314\t let gy = this.currentPiece.pos.y;\n315\t while (\n316\t this.isValidPosition(this.currentPiece.shape, this.currentPiece.pos.x, gy + 1)\n317\t ) {\n318\t gy++;\n319\t }\n320\t return gy;\n321\t }\n322\t\n323\t private lockPiece(): void {\n324\t if (!this.currentPiece) return;\n325\t const { shape, color, pos } = this.currentPiece;\n326\t for (let r = 0; r < shape.length; r++) {\n327\t for (let c = 0; c < shape[r].length; c++) {\n328\t if (shape[r][c]) {\n329\t const x = pos.x + c;\n330\t const y = pos.y + r;\n331\t if (y >= 0 && y < ROWS && x >= 0 && x < COLS) {\n332\t this.grid[y][x] = color;\n333\t }\n334\t }\n335\t }\n336\t }\n337\t this.currentPiece = null;\n338\t this.lockTimer = null;\n339\t this.clearLines();\n340\t }\n341\t\n342\t private resetLockTimerOnAction(): void {\n343\t if (this.lockTimer !== null) {\n344\t this.lockStartTime = performance.now();\n345\t }\n346\t }\n347\t\n348\t // ─── Line Clearing ──────────────────────────────────────────────────────\n349\t\n350\t private clearLines(): void {\n351\t const fullRows: number[] = [];\n352\t for (let r = 0; r < ROWS; r++) {\n353\t if (this.grid[r].every((cell) => cell !== null)) {\n354\t fullRows.push(r);\n355\t }\n356\t }\n357\t\n358\t if (fullRows.length > 0) {\n359\t this.animatingRows = fullRows;\n360\t this.animationStart = performance.now();\n361\t } else {\n362\t this.spawnPiece();\n363\t }\n364\t }\n365\t\n366\t private finishClearLines(): void {\n367\t const fullRows = this.animatingRows;\n368\t const cleared = fullRows.length;\n369\t\n370\t // Remove full rows from bottom to top\n371\t for (const row of fullRows.sort((a, b) => b - a)) {\n372\t this.grid.splice(row, 1);\n373\t this.grid.unshift(Array(COLS).fill(null));\n374\t }\n375\t\n376\t this.lines += cleared;\n377\t this.score += POINTS[cleared] * this.level;\n378\t this.level = Math.floor(this.lines / LINES_PER_LEVEL) + 1;\n379\t this.dropInterval = Math.max(\n380\t MIN_DROP_INTERVAL,\n381\t BASE_DROP_INTERVAL - (this.level - 1) * 75\n382\t );\n383\t\n384\t this.animatingRows = [];\n385\t this.updateUI();\n386\t this.spawnPiece();\n387\t }\n388\t\n389\t // ─── Gravity / Tick ──────────────────────────────────────────────────────\n390\t\n391\t private tick(now: number): void {\n392\t if (this.gameOver || this.paused || !this.started) return;\n393\t\n394\t // Handle line-clear animation\n395\t if (this.animatingRows.length > 0) {\n396\t if (now - this.animationStart >= this.ANIMATION_DURATION) {\n397\t this.finishClearLines();\n398\t }\n399\t return;\n400\t }\n401\t\n402\t if (!this.currentPiece) return;\n403\t\n404\t const interval = this.softDropping ? SOFT_DROP_INTERVAL : this.dropInterval;\n405\t\n406\t if (now - this.lastDropTime >= interval) {\n407\t const moved = this.movePiece(0, 1);\n408\t if (moved) {\n409\t if (this.softDropping) this.score += 1;\n410\t this.lastDropTime = now;\n411\t // If piece can still move down, cancel lock timer\n412\t if (\n413\t this.isValidPosition(\n414\t this.currentPiece.shape,\n415\t this.currentPiece.pos.x,\n416\t this.currentPiece.pos.y + 1\n417\t )\n418\t ) {\n419\t this.lockTimer = null;\n420\t }\n421\t } else {\n422\t // Piece can't move down — start lock delay\n423\t if (this.lockTimer === null) {\n424\t this.lockTimer = 1;\n425\t this.lockStartTime = now;\n426\t }\n427\t }\n428\t if (moved) this.lastDropTime = now;\n429\t }\n430\t\n431\t // Lock delay check\n432\t if (this.lockTimer !== null && now - this.lockStartTime >= LOCK_DELAY) {\n433\t // Double-check piece is still grounded\n434\t if (\n435\t !this.isValidPosition(\n436\t this.currentPiece.shape,\n437\t this.currentPiece.pos.x,\n438\t this.currentPiece.pos.y + 1\n439\t )\n440\t ) {\n441\t this.lockPiece();\n442\t } else {\n443\t this.lockTimer = null;\n444\t }\n445\t }\n446\t }\n447\t\n448\t // ─── Drawing ─────────────────────────────────────────────────────────────\n449\t\n450\t private drawBlock(\n451\t ctx: CanvasRenderingContext2D,\n452\t x: number,\n453\t y: number,\n454\t color: string,\n455\t size: number,\n456\t alpha: number = 1\n457\t ): void {\n458\t ctx.globalAlpha = alpha;\n459\t ctx.fillStyle = color;\n460\t ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n461\t\n462\t // Highlight\n463\t ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n464\t ctx.fillRect(x * size + 1, y * size + 1, size - 2, 3);\n465\t ctx.fillRect(x * size + 1, y * size + 1, 3, size - 2);\n466\t\n467\t // Shadow\n468\t ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n469\t ctx.fillRect(x * size + 1, y * size + size - 4, size - 2, 3);\n470\t ctx.fillRect(x * size + size - 4, y * size + 1, 3, size - 2);\n471\t\n472\t ctx.globalAlpha = 1;\n473\t }\n474\t\n475\t private draw(): void {\n476\t const ctx = this.ctx;\n477\t const bs = BLOCK_SIZE;\n478\t\n479\t // Background\n480\t ctx.fillStyle = \"#111\";\n481\t ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n482\t\n483\t // Grid lines\n484\t ctx.strokeStyle = \"#222\";\n485\t ctx.lineWidth = 0.5;\n486\t for (let r = 0; r <= ROWS; r++) {\n487\t ctx.beginPath();\n488\t ctx.moveTo(0, r * bs);\n489\t ctx.lineTo(COLS * bs, r * bs);\n490\t ctx.stroke();\n491\t }\n492\t for (let c = 0; c <= COLS; c++) {\n493\t ctx.beginPath();\n494\t ctx.moveTo(c * bs, 0);\n495\t ctx.lineTo(c * bs, ROWS * bs);\n496\t ctx.stroke();\n497\t }\n498\t\n499\t // Placed blocks\n500\t for (let r = 0; r < ROWS; r++) {\n501\t for (let c = 0; c < COLS; c++) {\n502\t if (this.grid[r][c]) {\n503\t let alpha = 1;\n504\t if (this.animatingRows.includes(r)) {\n505\t const progress =\n506\t (performance.now() - this.animationStart) / this.ANIMATION_DURATION;\n507\t alpha = 1 - progress;\n508\t }\n509\t this.drawBlock(ctx, c, r, this.grid[r][c]!, bs, alpha);\n510\t }\n511\t }\n512\t }\n513\t\n514\t // Ghost piece\n515\t if (this.currentPiece && !this.gameOver) {\n516\t const ghostY = this.getGhostY();\n517\t const { shape, pos } = this.currentPiece;\n518\t for (let r = 0; r < shape.length; r++) {\n519\t for (let c = 0; c < shape[r].length; c++) {\n520\t if (shape[r][c]) {\n521\t const x = pos.x + c;\n522\t const y = ghostY + r;\n523\t if (y >= 0) {\n524\t ctx.strokeStyle = this.currentPiece.color;\n525\t ctx.lineWidth = 1.5;\n526\t ctx.globalAlpha = 0.35;\n527\t ctx.strokeRect(\n528\t x * bs + 2,\n529\t y * bs + 2,\n530\t bs - 4,\n531\t bs - 4\n532\t );\n533\t ctx.globalAlpha = 1;\n534\t }\n535\t }\n536\t }\n537\t }\n538\t }\n539\t\n540\t // Current piece\n541\t if (this.currentPiece && !this.gameOver) {\n542\t const { shape, color, pos } = this.currentPiece;\n543\t for (let r = 0; r < shape.length; r++) {\n544\t for (let c = 0; c < shape[r].length; c++) {\n545\t if (shape[r][c]) {\n546\t const x = pos.x + c;\n547\t const y = pos.y + r;\n548\t if (y >= 0) {\n549\t this.drawBlock(ctx, x, y, color, bs);\n550\t }\n551\t }\n552\t }\n553\t }\n554\t }\n555\t\n556\t // Preview piece\n557\t this.drawPreview();\n558\t }\n559\t\n560\t private drawPreview(): void {\n561\t const ctx = this.previewCtx;\n562\t const bs = PREVIEW_BLOCK_SIZE;\n563\t ctx.fillStyle = \"#111\";\n564\t ctx.fillRect(0, 0, this.previewCanvas.width, this.previewCanvas.height);\n565\t\n566\t if (!this.nextPieceType) return;\n567\t const shape = SHAPES[this.nextPieceType];\n568\t const color = COLORS[this.nextPieceType];\n569\t\n570\t // Center the piece in the preview\n571\t const pieceW = shape[0].length;\n572\t const pieceH = shape.length;\n573\t const offsetX = (this.previewCanvas.width - pieceW * bs) / 2 / bs;\n574\t const offsetY = (this.previewCanvas.height - pieceH * bs) / 2 / bs;\n575\t\n576\t for (let r = 0; r < shape.length; r++) {\n577\t for (let c = 0; c < shape[r].length; c++) {\n578\t if (shape[r][c]) {\n579\t this.drawBlock(ctx, offsetX + c, offsetY + r, color, bs);\n580\t }\n581\t }\n582\t }\n583\t }\n584\t\n585\t // ─── UI Updates ──────────────────────────────────────────────────────────\n586\t\n587\t private updateUI(): void {\n588\t this.scoreEl.textContent = this.score.toLocaleString();\n589\t this.linesEl.textContent = this.lines.toString();\n590\t this.levelEl.textContent = this.level.toString();\n591\t }\n592\t\n593\t private showMessage(msg: string): void {\n594\t this.messageEl.textContent = msg;\n595\t this.messageEl.style.display = \"flex\";\n596\t }\n597\t\n598\t private hideMessage(): void {\n599\t this.messageEl.style.display = \"none\";\n600\t }\n601\t\n602\t // ─── Game Flow ───────────────────────────────────────────────────────────\n603\t\n604\t startGame(): void {\n605\t this.grid = this.createGrid();\n606\t this.score = 0;\n607\t this.lines = 0;\n608\t this.level = 1;\n609\t this.dropInterval = BASE_DROP_INTERVAL;\n610\t this.gameOver = false;\n611\t this.paused = false;\n612\t this.started = true;\n613\t this.bag = [];\n614\t this.animatingRows = [];\n615\t this.nextPieceType = \"\";\n616\t this.currentPiece = null;\n617\t this.softDropping = false;\n618\t\n619\t this.updateUI();\n620\t this.hideMessage();\n621\t this.spawnPiece();\n622\t this.lastDropTime = performance.now();\n623\t }\n624\t\n625\t private endGame(): void {\n626\t this.gameOver = true;\n627\t this.started = false;\n628\t this.showMessage(`Game Over! Score: ${this.score.toLocaleString()}\\nPress ENTER to restart`);\n629\t }\n630\t\n631\t private togglePause(): void {\n632\t if (!this.started || this.gameOver) return;\n633\t this.paused = !this.paused;\n634\t if (this.paused) {\n635\t this.showMessage(\"Paused\\nPress P to resume\");\n636\t } else {\n637\t this.hideMessage();\n638\t this.lastDropTime = performance.now();\n639\t }\n640\t }\n641\t\n642\t // ─── Input ───────────────────────────────────────────────────────────────\n643\t\n644\t private setupInput(): void {\n645\t document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n646\t if (e.key === \"Enter\") {\n647\t if (!this.started || this.gameOver) {\n648\t this.startGame();\n649\t }\n650\t return;\n651\t }\n652\t\n653\t if (e.key === \"p\" || e.key === \"P\") {\n654\t this.togglePause();\n655\t return;\n656\t }\n657\t\n658\t if (this.gameOver || this.paused || !this.started || !this.currentPiece) return;\n659\t if (this.animatingRows.length > 0) return;\n660\t\n661\t switch (e.key) {\n662\t case \"ArrowLeft\":\n663\t e.preventDefault();\n664\t this.movePiece(-1, 0);\n665\t break;\n666\t case \"ArrowRight\":\n667\t e.preventDefault();\n668\t this.movePiece(1, 0);\n669\t break;\n670\t case \"ArrowDown\":\n671\t e.preventDefault();\n672\t this.softDropping = true;\n673\t break;\n674\t case \"ArrowUp\":\n675\t e.preventDefault();\n676\t this.tryRotation(true);\n677\t break;\n678\t case \"z\":\n679\t case \"Z\":\n680\t this.tryRotation(false);\n681\t break;\n682\t case \"x\":\n683\t case \"X\":\n684\t this.tryRotation(true);\n685\t break;\n686\t case \" \":\n687\t e.preventDefault();\n688\t this.hardDrop();\n689\t break;\n690\t }\n691\t });\n692\t\n693\t document.addEventListener(\"keyup\", (e: KeyboardEvent) => {\n694\t if (e.key === \"ArrowDown\") {\n695\t this.softDropping = false;\n696\t }\n697\t });\n698\t }\n699\t\n700\t // ─── Main Loop ───────────────────────────────────────────────────────────\n701\t\n702\t run(): void {\n703\t const loop = (now: number): void => {\n704\t this.tick(now);\n705\t this.draw();\n706\t requestAnimationFrame(loop);\n707\t };\n708\t requestAnimationFrame(loop);\n709\t }\n710\t}\n711\t\n712\t// ─── Bootstrap ───────────────────────────────────────────────────────────────\n713\t\n714\twindow.addEventListener(\"DOMContentLoaded\", () => {\n715\t const game = new TetrisGame();\n716\t game.run();\n717\t});\n718\t"}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"69047651-5396-404e-8b78-8bb919166963","timestamp":"2026-04-03T19:45:39.892Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-kx4unxjg/src/tetris.ts","content":"// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype Cell = string | null;\ntype Grid = Cell[][];\ntype Shape = number[][];\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Piece {\n shape: Shape;\n color: string;\n pos: Position;\n}\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 30;\nconst PREVIEW_BLOCK_SIZE = 20;\n\nconst COLORS: Record<string, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\nconst SHAPES: Record<string, Shape> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [1, 1],\n [1, 1],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n// SRS wall kick data for J, L, S, T, Z pieces\nconst WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"1>0\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"1>2\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"2>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"2>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n \"3>2\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"3>0\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"0>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n};\n\n// SRS wall kick data for I piece\nconst WALL_KICKS_I: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"1>0\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"1>2\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n \"2>1\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"2>3\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"3>2\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"3>0\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"0>3\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n};\n\nconst POINTS = [0, 100, 300, 500, 800];\nconst LINES_PER_LEVEL = 10;\nconst BASE_DROP_INTERVAL = 1000;\nconst MIN_DROP_INTERVAL = 50;\nconst SOFT_DROP_INTERVAL = 50;\nconst LOCK_DELAY = 500;\n\nconst PIECE_NAMES = Object.keys(SHAPES);\n\n// ─── Game State ──────────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private grid: Grid;\n private currentPiece: Piece | null = null;\n private currentPieceType: string = \"\";\n private currentRotation: number = 0;\n private nextPieceType: string = \"\";\n private score: number = 0;\n private lines: number = 0;\n private level: number = 1;\n private gameOver: boolean = false;\n private paused: boolean = false;\n private started: boolean = false;\n\n private lastDropTime: number = 0;\n private dropInterval: number = BASE_DROP_INTERVAL;\n private softDropping: boolean = false;\n private lockTimer: number | null = null;\n private lockStartTime: number = 0;\n\n private animatingRows: number[] = [];\n private animationStart: number = 0;\n private readonly ANIMATION_DURATION = 300;\n\n private bag: string[] = [];\n\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private previewCanvas: HTMLCanvasElement;\n private previewCtx: CanvasRenderingContext2D;\n private scoreEl: HTMLElement;\n private linesEl: HTMLElement;\n private levelEl: HTMLElement;\n private messageEl: HTMLElement;\n\n constructor() {\n this.canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n this.ctx = this.canvas.getContext(\"2d\")!;\n this.previewCanvas = document.getElementById(\"preview-canvas\") as HTMLCanvasElement;\n this.previewCtx = this.previewCanvas.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.messageEl = document.getElementById(\"message\")!;\n\n this.canvas.width = COLS * BLOCK_SIZE;\n this.canvas.height = ROWS * BLOCK_SIZE;\n this.previewCanvas.width = 4 * PREVIEW_BLOCK_SIZE + 20;\n this.previewCanvas.height = 4 * PREVIEW_BLOCK_SIZE + 20;\n\n this.grid = this.createGrid();\n\n this.setupInput();\n this.showMessage(\"Press ENTER to start\");\n this.draw();\n }\n\n // ─── Grid Helpers ────────────────────────────────────────────────────────\n\n private createGrid(): Grid {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n }\n\n private isInsideGrid(x: number, y: number): boolean {\n return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n }\n\n private isCellOccupied(x: number, y: number): boolean {\n return y >= 0 && this.grid[y][x] !== null;\n }\n\n // ─── Bag Randomizer (7-bag) ──────────────────────────────────────────────\n\n private fillBag(): void {\n const bag = [...PIECE_NAMES];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n this.bag = bag;\n }\n\n private getNextPieceType(): string {\n if (this.bag.length === 0) this.fillBag();\n return this.bag.pop()!;\n }\n\n // ─── Piece Mechanics ─────────────────────────────────────────────────────\n\n private spawnPiece(): void {\n const type = this.nextPieceType || this.getNextPieceType();\n this.nextPieceType = this.getNextPieceType();\n\n const shape = SHAPES[type].map((row) => [...row]);\n const pieceWidth = shape[0].length;\n const x = Math.floor((COLS - pieceWidth) / 2);\n const y = 0;\n\n this.currentPiece = { shape, color: COLORS[type], pos: { x, y } };\n this.currentPieceType = type;\n this.currentRotation = 0;\n this.lockTimer = null;\n\n if (!this.isValidPosition(shape, x, y)) {\n this.endGame();\n }\n }\n\n private isValidPosition(shape: Shape, px: number, py: number): boolean {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = px + c;\n const y = py + r;\n if (x < 0 || x >= COLS || y >= ROWS) return false;\n if (y >= 0 && this.grid[y][x] !== null) return false;\n }\n }\n }\n return true;\n }\n\n private rotateCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[c][n - 1 - r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private rotateCCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[n - 1 - c][r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private tryRotation(clockwise: boolean): boolean {\n if (!this.currentPiece) return false;\n\n const newShape = clockwise\n ? this.rotateCW(this.currentPiece.shape)\n : this.rotateCCW(this.currentPiece.shape);\n\n const oldRot = this.currentRotation;\n const newRot = clockwise\n ? (this.currentRotation + 1) % 4\n : (this.currentRotation + 3) % 4;\n\n const kickKey = `${oldRot}>${newRot}`;\n const kicks = this.currentPieceType === \"I\" ? WALL_KICKS_I : WALL_KICKS;\n const tests = kicks[kickKey] || [[0, 0]];\n\n for (const [dx, dy] of tests) {\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y - dy; // SRS uses y-up, our grid is y-down\n if (this.isValidPosition(newShape, nx, ny)) {\n this.currentPiece.shape = newShape;\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n this.currentRotation = newRot;\n this.resetLockTimerOnAction();\n return true;\n }\n }\n return false;\n }\n\n private movePiece(dx: number, dy: number): boolean {\n if (!this.currentPiece) return false;\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y + dy;\n if (this.isValidPosition(this.currentPiece.shape, nx, ny)) {\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n if (dx !== 0) this.resetLockTimerOnAction();\n return true;\n }\n return false;\n }\n\n private hardDrop(): void {\n if (!this.currentPiece) return;\n let dropDistance = 0;\n while (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.currentPiece.pos.y++;\n dropDistance++;\n }\n this.score += dropDistance * 2;\n this.lockPiece();\n }\n\n private getGhostY(): number {\n if (!this.currentPiece) return 0;\n let gy = this.currentPiece.pos.y;\n while (\n this.isValidPosition(this.currentPiece.shape, this.currentPiece.pos.x, gy + 1)\n ) {\n gy++;\n }\n return gy;\n }\n\n private lockPiece(): void {\n if (!this.currentPiece) return;\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0 && y < ROWS && x >= 0 && x < COLS) {\n this.grid[y][x] = color;\n }\n }\n }\n }\n this.currentPiece = null;\n this.lockTimer = null;\n this.clearLines();\n }\n\n private resetLockTimerOnAction(): void {\n if (this.lockTimer !== null) {\n this.lockStartTime = performance.now();\n }\n }\n\n // ─── Line Clearing ──────────────────────────────────────────────────────\n\n private clearLines(): void {\n const fullRows: number[] = [];\n for (let r = 0; r < ROWS; r++) {\n if (this.grid[r].every((cell) => cell !== null)) {\n fullRows.push(r);\n }\n }\n\n if (fullRows.length > 0) {\n this.animatingRows = fullRows;\n this.animationStart = performance.now();\n } else {\n this.spawnPiece();\n }\n }\n\n private finishClearLines(): void {\n const fullRows = this.animatingRows;\n const cleared = fullRows.length;\n\n // Remove full rows from bottom to top\n for (const row of fullRows.sort((a, b) => b - a)) {\n this.grid.splice(row, 1);\n this.grid.unshift(Array(COLS).fill(null));\n }\n\n this.lines += cleared;\n this.score += POINTS[cleared] * this.level;\n this.level = Math.floor(this.lines / LINES_PER_LEVEL) + 1;\n this.dropInterval = Math.max(\n MIN_DROP_INTERVAL,\n BASE_DROP_INTERVAL - (this.level - 1) * 75\n );\n\n this.animatingRows = [];\n this.updateUI();\n this.spawnPiece();\n }\n\n // ─── Gravity / Tick ──────────────────────────────────────────────────────\n\n private tick(now: number): void {\n if (this.gameOver || this.paused || !this.started) return;\n\n // Handle line-clear animation\n if (this.animatingRows.length > 0) {\n if (now - this.animationStart >= this.ANIMATION_DURATION) {\n this.finishClearLines();\n }\n return;\n }\n\n if (!this.currentPiece) return;\n\n const interval = this.softDropping ? SOFT_DROP_INTERVAL : this.dropInterval;\n\n if (now - this.lastDropTime >= interval) {\n const moved = this.movePiece(0, 1);\n if (moved) {\n if (this.softDropping) this.score += 1;\n this.lastDropTime = now;\n // If piece can still move down, cancel lock timer\n if (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockTimer = null;\n }\n } else {\n // Piece can't move down — start lock delay\n if (this.lockTimer === null) {\n this.lockTimer = 1;\n this.lockStartTime = now;\n }\n }\n if (moved) this.lastDropTime = now;\n }\n\n // Lock delay check\n if (this.lockTimer !== null && now - this.lockStartTime >= LOCK_DELAY) {\n // Double-check piece is still grounded\n if (\n !this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockPiece();\n } else {\n this.lockTimer = null;\n }\n }\n }\n\n // ─── Drawing ─────────────────────────────────────────────────────────────\n\n private drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n color: string,\n size: number,\n alpha: number = 1\n ): void {\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n\n // Highlight\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, 3);\n ctx.fillRect(x * size + 1, y * size + 1, 3, size - 2);\n\n // Shadow\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size + 1, y * size + size - 4, size - 2, 3);\n ctx.fillRect(x * size + size - 4, y * size + 1, 3, size - 2);\n\n ctx.globalAlpha = 1;\n }\n\n private draw(): void {\n const ctx = this.ctx;\n const bs = BLOCK_SIZE;\n\n // Background\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"#222\";\n ctx.lineWidth = 0.5;\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * bs);\n ctx.lineTo(COLS * bs, r * bs);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * bs, 0);\n ctx.lineTo(c * bs, ROWS * bs);\n ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.grid[r][c]) {\n let alpha = 1;\n if (this.animatingRows.includes(r)) {\n const progress =\n (performance.now() - this.animationStart) / this.ANIMATION_DURATION;\n alpha = 1 - progress;\n }\n this.drawBlock(ctx, c, r, this.grid[r][c]!, bs, alpha);\n }\n }\n }\n\n // Ghost piece\n if (this.currentPiece && !this.gameOver) {\n const ghostY = this.getGhostY();\n const { shape, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = ghostY + r;\n if (y >= 0) {\n ctx.strokeStyle = this.currentPiece.color;\n ctx.lineWidth = 1.5;\n ctx.globalAlpha = 0.35;\n ctx.strokeRect(\n x * bs + 2,\n y * bs + 2,\n bs - 4,\n bs - 4\n );\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n }\n\n // Current piece\n if (this.currentPiece && !this.gameOver) {\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0) {\n this.drawBlock(ctx, x, y, color, bs);\n }\n }\n }\n }\n }\n\n // Preview piece\n this.drawPreview();\n }\n\n private drawPreview(): void {\n const ctx = this.previewCtx;\n const bs = PREVIEW_BLOCK_SIZE;\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.previewCanvas.width, this.previewCanvas.height);\n\n if (!this.nextPieceType) return;\n const shape = SHAPES[this.nextPieceType];\n const color = COLORS[this.nextPieceType];\n\n // Center the piece in the preview\n const pieceW = shape[0].length;\n const pieceH = shape.length;\n const offsetX = (this.previewCanvas.width - pieceW * bs) / 2 / bs;\n const offsetY = (this.previewCanvas.height - pieceH * bs) / 2 / bs;\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n this.drawBlock(ctx, offsetX + c, offsetY + r, color, bs);\n }\n }\n }\n }\n\n // ─── UI Updates ──────────────────────────────────────────────────────────\n\n private updateUI(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.linesEl.textContent = this.lines.toString();\n this.levelEl.textContent = this.level.toString();\n }\n\n private showMessage(msg: string): void {\n this.messageEl.textContent = msg;\n this.messageEl.style.display = \"flex\";\n }\n\n private hideMessage(): void {\n this.messageEl.style.display = \"none\";\n }\n\n // ─── Game Flow ───────────────────────────────────────────────────────────\n\n startGame(): void {\n this.grid = this.createGrid();\n this.score = 0;\n this.lines = 0;\n this.level = 1;\n this.dropInterval = BASE_DROP_INTERVAL;\n this.gameOver = false;\n this.paused = false;\n this.started = true;\n this.bag = [];\n this.animatingRows = [];\n this.nextPieceType = \"\";\n this.currentPiece = null;\n this.softDropping = false;\n\n this.updateUI();\n this.hideMessage();\n this.spawnPiece();\n this.lastDropTime = performance.now();\n }\n\n private endGame(): void {\n this.gameOver = true;\n this.started = false;\n this.showMessage(`Game Over! Score: ${this.score.toLocaleString()}\\nPress ENTER to restart`);\n }\n\n private togglePause(): void {\n if (!this.started || this.gameOver) return;\n this.paused = !this.paused;\n if (this.paused) {\n this.showMessage(\"Paused\\nPress P to resume\");\n } else {\n this.hideMessage();\n this.lastDropTime = performance.now();\n }\n }\n\n // ─── Input ───────────────────────────────────────────────────────────────\n\n private setupInput(): void {\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n if (!this.started || this.gameOver) {\n this.startGame();\n }\n return;\n }\n\n if (e.key === \"p\" || e.key === \"P\") {\n this.togglePause();\n return;\n }\n\n if (this.gameOver || this.paused || !this.started || !this.currentPiece) return;\n if (this.animatingRows.length > 0) return;\n\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n this.movePiece(-1, 0);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n this.movePiece(1, 0);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n this.softDropping = true;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.tryRotation(true);\n break;\n case \"z\":\n case \"Z\":\n this.tryRotation(false);\n break;\n case \"x\":\n case \"X\":\n this.tryRotation(true);\n break;\n case \" \":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n });\n\n document.addEventListener(\"keyup\", (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n this.softDropping = false;\n }\n });\n }\n\n // ─── Main Loop ───────────────────────────────────────────────────────────\n\n run(): void {\n const loop = (now: number): void => {\n this.tick(now);\n this.draw();\n requestAnimationFrame(loop);\n };\n requestAnimationFrame(loop);\n }\n}\n\n// ─── Bootstrap ───────────────────────────────────────────────────────────────\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n const game = new TetrisGame();\n game.run();\n});\n","numLines":718,"startLine":1,"totalLines":718}}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_0142Y7wibPQ4qivYz91H5ymD","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me also remove the unused helper methods to keep things clean, and run lint/type-check to confirm everything is solid:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8878,"cache_read_input_tokens":15502,"cache_creation":{"ephemeral_5m_input_tokens":8878,"ephemeral_1h_input_tokens":0},"output_tokens":3,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"769f8844-fc45-4b1b-b1d3-fd801d1a954a"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_0142Y7wibPQ4qivYz91H5ymD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013QbYJGTtAr8G8CwZUYdGPF","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-kx4unxjg/src/tetris.ts","old_string":" private isInsideGrid(x: number, y: number): boolean {\n return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n }\n\n private isCellOccupied(x: number, y: number): boolean {\n return y >= 0 && this.grid[y][x] !== null;\n }\n\n // ─── Bag Randomizer","new_string":" // ─── Bag Randomizer"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8878,"cache_read_input_tokens":15502,"cache_creation":{"ephemeral_5m_input_tokens":8878,"ephemeral_1h_input_tokens":0},"output_tokens":3,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"50585558-788b-438b-ba67-01415a9ea7f4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013QbYJGTtAr8G8CwZUYdGPF","type":"tool_result","content":"The file /tmp/loop-bench-kx4unxjg/src/tetris.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"b3f7ae1f-2cb3-46af-b7b0-3557683ad697","timestamp":"2026-04-03T19:45:46.195Z","tool_use_result":{"filePath":"/tmp/loop-bench-kx4unxjg/src/tetris.ts","oldString":" private isInsideGrid(x: number, y: number): boolean {\n return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n }\n\n private isCellOccupied(x: number, y: number): boolean {\n return y >= 0 && this.grid[y][x] !== null;\n }\n\n // ─── Bag Randomizer","newString":" // ─── Bag Randomizer","originalFile":"// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype Cell = string | null;\ntype Grid = Cell[][];\ntype Shape = number[][];\n\ninterface Position {\n x: number;\n y: number;\n}\n\ninterface Piece {\n shape: Shape;\n color: string;\n pos: Position;\n}\n\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK_SIZE = 30;\nconst PREVIEW_BLOCK_SIZE = 20;\n\nconst COLORS: Record<string, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00f000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\nconst SHAPES: Record<string, Shape> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [1, 1],\n [1, 1],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n// SRS wall kick data for J, L, S, T, Z pieces\nconst WALL_KICKS: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"1>0\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"1>2\": [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]],\n \"2>1\": [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]],\n \"2>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n \"3>2\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"3>0\": [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]],\n \"0>3\": [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]],\n};\n\n// SRS wall kick data for I piece\nconst WALL_KICKS_I: Record<string, [number, number][]> = {\n \"0>1\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"1>0\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"1>2\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n \"2>1\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"2>3\": [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]],\n \"3>2\": [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]],\n \"3>0\": [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]],\n \"0>3\": [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]],\n};\n\nconst POINTS = [0, 100, 300, 500, 800];\nconst LINES_PER_LEVEL = 10;\nconst BASE_DROP_INTERVAL = 1000;\nconst MIN_DROP_INTERVAL = 50;\nconst SOFT_DROP_INTERVAL = 50;\nconst LOCK_DELAY = 500;\n\nconst PIECE_NAMES = Object.keys(SHAPES);\n\n// ─── Game State ──────────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private grid: Grid;\n private currentPiece: Piece | null = null;\n private currentPieceType: string = \"\";\n private currentRotation: number = 0;\n private nextPieceType: string = \"\";\n private score: number = 0;\n private lines: number = 0;\n private level: number = 1;\n private gameOver: boolean = false;\n private paused: boolean = false;\n private started: boolean = false;\n\n private lastDropTime: number = 0;\n private dropInterval: number = BASE_DROP_INTERVAL;\n private softDropping: boolean = false;\n private lockTimer: number | null = null;\n private lockStartTime: number = 0;\n\n private animatingRows: number[] = [];\n private animationStart: number = 0;\n private readonly ANIMATION_DURATION = 300;\n\n private bag: string[] = [];\n\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private previewCanvas: HTMLCanvasElement;\n private previewCtx: CanvasRenderingContext2D;\n private scoreEl: HTMLElement;\n private linesEl: HTMLElement;\n private levelEl: HTMLElement;\n private messageEl: HTMLElement;\n\n constructor() {\n this.canvas = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n this.ctx = this.canvas.getContext(\"2d\")!;\n this.previewCanvas = document.getElementById(\"preview-canvas\") as HTMLCanvasElement;\n this.previewCtx = this.previewCanvas.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.messageEl = document.getElementById(\"message\")!;\n\n this.canvas.width = COLS * BLOCK_SIZE;\n this.canvas.height = ROWS * BLOCK_SIZE;\n this.previewCanvas.width = 4 * PREVIEW_BLOCK_SIZE + 20;\n this.previewCanvas.height = 4 * PREVIEW_BLOCK_SIZE + 20;\n\n this.grid = this.createGrid();\n\n this.setupInput();\n this.showMessage(\"Press ENTER to start\");\n this.draw();\n }\n\n // ─── Grid Helpers ────────────────────────────────────────────────────────\n\n private createGrid(): Grid {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n }\n\n private isInsideGrid(x: number, y: number): boolean {\n return x >= 0 && x < COLS && y >= 0 && y < ROWS;\n }\n\n private isCellOccupied(x: number, y: number): boolean {\n return y >= 0 && this.grid[y][x] !== null;\n }\n\n // ─── Bag Randomizer (7-bag) ──────────────────────────────────────────────\n\n private fillBag(): void {\n const bag = [...PIECE_NAMES];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n this.bag = bag;\n }\n\n private getNextPieceType(): string {\n if (this.bag.length === 0) this.fillBag();\n return this.bag.pop()!;\n }\n\n // ─── Piece Mechanics ─────────────────────────────────────────────────────\n\n private spawnPiece(): void {\n const type = this.nextPieceType || this.getNextPieceType();\n this.nextPieceType = this.getNextPieceType();\n\n const shape = SHAPES[type].map((row) => [...row]);\n const pieceWidth = shape[0].length;\n const x = Math.floor((COLS - pieceWidth) / 2);\n const y = 0;\n\n this.currentPiece = { shape, color: COLORS[type], pos: { x, y } };\n this.currentPieceType = type;\n this.currentRotation = 0;\n this.lockTimer = null;\n\n if (!this.isValidPosition(shape, x, y)) {\n this.endGame();\n }\n }\n\n private isValidPosition(shape: Shape, px: number, py: number): boolean {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = px + c;\n const y = py + r;\n if (x < 0 || x >= COLS || y >= ROWS) return false;\n if (y >= 0 && this.grid[y][x] !== null) return false;\n }\n }\n }\n return true;\n }\n\n private rotateCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[c][n - 1 - r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private rotateCCW(shape: Shape): Shape {\n const n = shape.length;\n const rotated: Shape = Array.from({ length: n }, () => Array(n).fill(0));\n for (let r = 0; r < n; r++) {\n for (let c = 0; c < n; c++) {\n rotated[n - 1 - c][r] = shape[r][c];\n }\n }\n return rotated;\n }\n\n private tryRotation(clockwise: boolean): boolean {\n if (!this.currentPiece) return false;\n\n const newShape = clockwise\n ? this.rotateCW(this.currentPiece.shape)\n : this.rotateCCW(this.currentPiece.shape);\n\n const oldRot = this.currentRotation;\n const newRot = clockwise\n ? (this.currentRotation + 1) % 4\n : (this.currentRotation + 3) % 4;\n\n const kickKey = `${oldRot}>${newRot}`;\n const kicks = this.currentPieceType === \"I\" ? WALL_KICKS_I : WALL_KICKS;\n const tests = kicks[kickKey] || [[0, 0]];\n\n for (const [dx, dy] of tests) {\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y - dy; // SRS uses y-up, our grid is y-down\n if (this.isValidPosition(newShape, nx, ny)) {\n this.currentPiece.shape = newShape;\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n this.currentRotation = newRot;\n this.resetLockTimerOnAction();\n return true;\n }\n }\n return false;\n }\n\n private movePiece(dx: number, dy: number): boolean {\n if (!this.currentPiece) return false;\n const nx = this.currentPiece.pos.x + dx;\n const ny = this.currentPiece.pos.y + dy;\n if (this.isValidPosition(this.currentPiece.shape, nx, ny)) {\n this.currentPiece.pos.x = nx;\n this.currentPiece.pos.y = ny;\n if (dx !== 0) this.resetLockTimerOnAction();\n return true;\n }\n return false;\n }\n\n private hardDrop(): void {\n if (!this.currentPiece) return;\n let dropDistance = 0;\n while (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.currentPiece.pos.y++;\n dropDistance++;\n }\n this.score += dropDistance * 2;\n this.lockPiece();\n }\n\n private getGhostY(): number {\n if (!this.currentPiece) return 0;\n let gy = this.currentPiece.pos.y;\n while (\n this.isValidPosition(this.currentPiece.shape, this.currentPiece.pos.x, gy + 1)\n ) {\n gy++;\n }\n return gy;\n }\n\n private lockPiece(): void {\n if (!this.currentPiece) return;\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0 && y < ROWS && x >= 0 && x < COLS) {\n this.grid[y][x] = color;\n }\n }\n }\n }\n this.currentPiece = null;\n this.lockTimer = null;\n this.clearLines();\n }\n\n private resetLockTimerOnAction(): void {\n if (this.lockTimer !== null) {\n this.lockStartTime = performance.now();\n }\n }\n\n // ─── Line Clearing ──────────────────────────────────────────────────────\n\n private clearLines(): void {\n const fullRows: number[] = [];\n for (let r = 0; r < ROWS; r++) {\n if (this.grid[r].every((cell) => cell !== null)) {\n fullRows.push(r);\n }\n }\n\n if (fullRows.length > 0) {\n this.animatingRows = fullRows;\n this.animationStart = performance.now();\n } else {\n this.spawnPiece();\n }\n }\n\n private finishClearLines(): void {\n const fullRows = this.animatingRows;\n const cleared = fullRows.length;\n\n // Remove full rows from bottom to top\n for (const row of fullRows.sort((a, b) => b - a)) {\n this.grid.splice(row, 1);\n this.grid.unshift(Array(COLS).fill(null));\n }\n\n this.lines += cleared;\n this.score += POINTS[cleared] * this.level;\n this.level = Math.floor(this.lines / LINES_PER_LEVEL) + 1;\n this.dropInterval = Math.max(\n MIN_DROP_INTERVAL,\n BASE_DROP_INTERVAL - (this.level - 1) * 75\n );\n\n this.animatingRows = [];\n this.updateUI();\n this.spawnPiece();\n }\n\n // ─── Gravity / Tick ──────────────────────────────────────────────────────\n\n private tick(now: number): void {\n if (this.gameOver || this.paused || !this.started) return;\n\n // Handle line-clear animation\n if (this.animatingRows.length > 0) {\n if (now - this.animationStart >= this.ANIMATION_DURATION) {\n this.finishClearLines();\n }\n return;\n }\n\n if (!this.currentPiece) return;\n\n const interval = this.softDropping ? SOFT_DROP_INTERVAL : this.dropInterval;\n\n if (now - this.lastDropTime >= interval) {\n const moved = this.movePiece(0, 1);\n if (moved) {\n if (this.softDropping) this.score += 1;\n this.lastDropTime = now;\n // If piece can still move down, cancel lock timer\n if (\n this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockTimer = null;\n }\n } else {\n // Piece can't move down — start lock delay\n if (this.lockTimer === null) {\n this.lockTimer = 1;\n this.lockStartTime = now;\n }\n }\n if (moved) this.lastDropTime = now;\n }\n\n // Lock delay check\n if (this.lockTimer !== null && now - this.lockStartTime >= LOCK_DELAY) {\n // Double-check piece is still grounded\n if (\n !this.isValidPosition(\n this.currentPiece.shape,\n this.currentPiece.pos.x,\n this.currentPiece.pos.y + 1\n )\n ) {\n this.lockPiece();\n } else {\n this.lockTimer = null;\n }\n }\n }\n\n // ─── Drawing ─────────────────────────────────────────────────────────────\n\n private drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n color: string,\n size: number,\n alpha: number = 1\n ): void {\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n\n // Highlight\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, 3);\n ctx.fillRect(x * size + 1, y * size + 1, 3, size - 2);\n\n // Shadow\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size + 1, y * size + size - 4, size - 2, 3);\n ctx.fillRect(x * size + size - 4, y * size + 1, 3, size - 2);\n\n ctx.globalAlpha = 1;\n }\n\n private draw(): void {\n const ctx = this.ctx;\n const bs = BLOCK_SIZE;\n\n // Background\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"#222\";\n ctx.lineWidth = 0.5;\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * bs);\n ctx.lineTo(COLS * bs, r * bs);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * bs, 0);\n ctx.lineTo(c * bs, ROWS * bs);\n ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.grid[r][c]) {\n let alpha = 1;\n if (this.animatingRows.includes(r)) {\n const progress =\n (performance.now() - this.animationStart) / this.ANIMATION_DURATION;\n alpha = 1 - progress;\n }\n this.drawBlock(ctx, c, r, this.grid[r][c]!, bs, alpha);\n }\n }\n }\n\n // Ghost piece\n if (this.currentPiece && !this.gameOver) {\n const ghostY = this.getGhostY();\n const { shape, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = ghostY + r;\n if (y >= 0) {\n ctx.strokeStyle = this.currentPiece.color;\n ctx.lineWidth = 1.5;\n ctx.globalAlpha = 0.35;\n ctx.strokeRect(\n x * bs + 2,\n y * bs + 2,\n bs - 4,\n bs - 4\n );\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n }\n\n // Current piece\n if (this.currentPiece && !this.gameOver) {\n const { shape, color, pos } = this.currentPiece;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const x = pos.x + c;\n const y = pos.y + r;\n if (y >= 0) {\n this.drawBlock(ctx, x, y, color, bs);\n }\n }\n }\n }\n }\n\n // Preview piece\n this.drawPreview();\n }\n\n private drawPreview(): void {\n const ctx = this.previewCtx;\n const bs = PREVIEW_BLOCK_SIZE;\n ctx.fillStyle = \"#111\";\n ctx.fillRect(0, 0, this.previewCanvas.width, this.previewCanvas.height);\n\n if (!this.nextPieceType) return;\n const shape = SHAPES[this.nextPieceType];\n const color = COLORS[this.nextPieceType];\n\n // Center the piece in the preview\n const pieceW = shape[0].length;\n const pieceH = shape.length;\n const offsetX = (this.previewCanvas.width - pieceW * bs) / 2 / bs;\n const offsetY = (this.previewCanvas.height - pieceH * bs) / 2 / bs;\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n this.drawBlock(ctx, offsetX + c, offsetY + r, color, bs);\n }\n }\n }\n }\n\n // ─── UI Updates ──────────────────────────────────────────────────────────\n\n private updateUI(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.linesEl.textContent = this.lines.toString();\n this.levelEl.textContent = this.level.toString();\n }\n\n private showMessage(msg: string): void {\n this.messageEl.textContent = msg;\n this.messageEl.style.display = \"flex\";\n }\n\n private hideMessage(): void {\n this.messageEl.style.display = \"none\";\n }\n\n // ─── Game Flow ───────────────────────────────────────────────────────────\n\n startGame(): void {\n this.grid = this.createGrid();\n this.score = 0;\n this.lines = 0;\n this.level = 1;\n this.dropInterval = BASE_DROP_INTERVAL;\n this.gameOver = false;\n this.paused = false;\n this.started = true;\n this.bag = [];\n this.animatingRows = [];\n this.nextPieceType = \"\";\n this.currentPiece = null;\n this.softDropping = false;\n\n this.updateUI();\n this.hideMessage();\n this.spawnPiece();\n this.lastDropTime = performance.now();\n }\n\n private endGame(): void {\n this.gameOver = true;\n this.started = false;\n this.showMessage(`Game Over! Score: ${this.score.toLocaleString()}\\nPress ENTER to restart`);\n }\n\n private togglePause(): void {\n if (!this.started || this.gameOver) return;\n this.paused = !this.paused;\n if (this.paused) {\n this.showMessage(\"Paused\\nPress P to resume\");\n } else {\n this.hideMessage();\n this.lastDropTime = performance.now();\n }\n }\n\n // ─── Input ───────────────────────────────────────────────────────────────\n\n private setupInput(): void {\n document.addEventListener(\"keydown\", (e: KeyboardEvent) => {\n if (e.key === \"Enter\") {\n if (!this.started || this.gameOver) {\n this.startGame();\n }\n return;\n }\n\n if (e.key === \"p\" || e.key === \"P\") {\n this.togglePause();\n return;\n }\n\n if (this.gameOver || this.paused || !this.started || !this.currentPiece) return;\n if (this.animatingRows.length > 0) return;\n\n switch (e.key) {\n case \"ArrowLeft\":\n e.preventDefault();\n this.movePiece(-1, 0);\n break;\n case \"ArrowRight\":\n e.preventDefault();\n this.movePiece(1, 0);\n break;\n case \"ArrowDown\":\n e.preventDefault();\n this.softDropping = true;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.tryRotation(true);\n break;\n case \"z\":\n case \"Z\":\n this.tryRotation(false);\n break;\n case \"x\":\n case \"X\":\n this.tryRotation(true);\n break;\n case \" \":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n });\n\n document.addEventListener(\"keyup\", (e: KeyboardEvent) => {\n if (e.key === \"ArrowDown\") {\n this.softDropping = false;\n }\n });\n }\n\n // ─── Main Loop ───────────────────────────────────────────────────────────\n\n run(): void {\n const loop = (now: number): void => {\n this.tick(now);\n this.draw();\n requestAnimationFrame(loop);\n };\n requestAnimationFrame(loop);\n }\n}\n\n// ─── Bootstrap ───────────────────────────────────────────────────────────────\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n const game = new TetrisGame();\n game.run();\n});\n","structuredPatch":[{"oldStart":167,"oldLines":14,"newStart":167,"newLines":6,"lines":[" return Array.from({ length: ROWS }, () => Array(COLS).fill(null));"," }"," ","- private isInsideGrid(x: number, y: number): boolean {","- return x >= 0 && x < COLS && y >= 0 && y < ROWS;","- }","-","- private isCellOccupied(x: number, y: number): boolean {","- return y >= 0 && this.grid[y][x] !== null;","- }","-"," // ─── Bag Randomizer (7-bag) ──────────────────────────────────────────────"," "," private fillBag(): void {"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Qoy8cg4VX5u2nAGDcHApDZ","type":"message","role":"assistant","content":[{"type":"text","text":"Also remove the unused `PIECE_NAMES` reference indirectly used - actually it IS used in `fillBag`. Let me just recompile:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":305,"cache_read_input_tokens":24380,"cache_creation":{"ephemeral_5m_input_tokens":305,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"5e8ce6d3-30d7-4738-96da-3fd01bcc9f49"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_01Qoy8cg4VX5u2nAGDcHApDZ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01M5cB535fWV5LtQR5XpFLUw","name":"Bash","input":{"command":"npx tsc --noUnusedLocals --noUnusedParameters 2>&1","description":"Compile TypeScript with strict unused checks"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":305,"cache_read_input_tokens":24380,"cache_creation":{"ephemeral_5m_input_tokens":305,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"52b4409c-de78-4f46-9bd2-44a33b39c63e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01M5cB535fWV5LtQR5XpFLUw","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"ec454fe4-5658-446d-a00a-7dd8cb4cf9c7","timestamp":"2026-04-03T19:45:51.111Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_014fDtxFFeYwZkqbyjL2tdRN","type":"message","role":"assistant","content":[{"type":"text","text":"Clean build with strict checks. Let me verify all files are in place:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":149,"cache_read_input_tokens":24685,"cache_creation":{"ephemeral_5m_input_tokens":149,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"3c222265-a3ea-4ce7-94f2-22310f248311"} -{"type":"assistant","message":{"model":"claude-opus-4-6","id":"msg_014fDtxFFeYwZkqbyjL2tdRN","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GB4SVphKXCh7ugweFRw1nG","name":"Bash","input":{"command":"ls -la /tmp/loop-bench-kx4unxjg/ && echo \"---\" && ls -la /tmp/loop-bench-kx4unxjg/dist/ && echo \"---\" && ls -la /tmp/loop-bench-kx4unxjg/src/","description":"Verify all project files"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":149,"cache_read_input_tokens":24685,"cache_creation":{"ephemeral_5m_input_tokens":149,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"716ab261-d168-4db8-be33-df6b5303992c","uuid":"af428855-dac5-438d-84b0-92baa2a3cc07"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":151813,"duration_api_ms":145303,"is_error":true,"num_turns":15,"stop_reason":"tool_use","session_id":"716ab261-d168-4db8-be33-df6b5303992c","total_cost_usd":0.5103989999999999,"usage":{"input_tokens":16,"cache_creation_input_tokens":24859,"cache_read_input_tokens":145893,"output_tokens":10591,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":24859},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-opus-4-6":{"inputTokens":17,"outputTokens":10749,"cacheReadInputTokens":170578,"cacheCreationInputTokens":25008,"webSearchRequests":0,"costUSD":0.5103989999999999,"contextWindow":200000,"maxOutputTokens":64000}},"permission_denials":[],"fast_mode_state":"off","uuid":"6547f31a-58b1-4bf3-b610-0891d920b0cb","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":282881,"duration_api_ms":278559,"is_error":true,"num_turns":13,"stop_reason":"tool_use","session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","total_cost_usd":0.51049425,"usage":{"input_tokens":13,"cache_creation_input_tokens":27152,"cache_read_input_tokens":151563,"output_tokens":21751,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":27152},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":14,"outputTokens":21824,"cacheReadInputTokens":177945,"cacheCreationInputTokens":34589,"webSearchRequests":0,"costUSD":0.51049425,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"7986da82-f799-411f-a7e3-a18405ece914","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,262 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "TypeScript files found but no tsconfig.json" - } - ], - "score": 0.75 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 109098, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 7, - "code": 4, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 2223, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 28, - "excessive": true - }, - "function_length": { - "count": 53, - "average": 6.4, - "max": 28, - "long_functions": 0 - }, - "max_nesting_depth": 12, - "global_declarations": 18, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 303, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 84, - "source_lines": 805, - "ratio_pct": 10.4 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 3 - }, - "duplication_percentage": 0.0, - "score": 0.85 - }, - "transcript_analysis": { - "total_events": 35, - "tool_calls": { - "total": 13, - "bash": 9, - "write": 0, - "edit": 2, - "read": 2 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 4, - "text_blocks": 2, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.94, - "total": 16, - "passed": 15, - "failed": 1, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "z", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 20 -> 42" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 80 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 131, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 31 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } - } - }, - "score": 0.6475 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,127 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "z", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 20 -> 42" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 80 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 131, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 31 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "detailed", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:46:29.796311+00:00", - "wall_time_seconds": 283, - "exit_code": 1, - "completed_at": "2026-04-03T20:51:19.154372+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,35 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "detailed"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a fully playable Tetris game that runs in a web browser. The game should be implemented as a single-page application with no external runtime dependencies (no CDN links, no package imports at runtime). All code should work by opening an HTML file directly in a browser or serving it from a simple static file server.\n\n## Game Board\n\n- The playing field is a grid of 10 columns by 20 rows.\n- The grid should be visually distinct with cell borders or a background pattern so the player can gauge positions.\n- Occupied cells should be colored according to their piece type.\n\n## Pieces (Tetrominoes)\n\nImplement all 7 standard Tetris pieces:\n\n- **I** (4 in a row, cyan)\n- **O** (2x2 square, yellow)\n- **T** (T-shape, purple)\n- **S** (S-skew, green)\n- **Z** (Z-skew, red)\n- **J** (J-shape, blue)\n- **L** (L-shape, orange)\n\nEach piece should spawn at the top center of the board. Use a random bag system or simple random selection for piece order.\n\n## Controls\n\n- **Left arrow**: move piece left\n- **Right arrow**: move piece right\n- **Down arrow**: soft drop (move piece down faster)\n- **Up arrow**: rotate piece clockwise\n- **Z key**: rotate piece counter-clockwise\n- **Space bar**: hard drop (instantly drop piece to the lowest valid position)\n\n## Rotation\n\n- Pieces rotate clockwise (up arrow) and counter-clockwise (Z key).\n- The O piece does not rotate.\n- Rotation should fail gracefully: if the rotated position would overlap with existing blocks or the walls, the rotation should not occur. A basic wall-kick system (trying one or two offset positions) is acceptable but not required.\n\n## Line Clearing\n\n- When an entire row is filled with blocks, that row is cleared and all rows above it shift down.\n- Multiple rows can be cleared simultaneously.\n\n## Scoring\n\nPoints are awarded based on the number of lines cleared at once, multiplied by the current level:\n\n| Lines Cleared | Base Points |\n|---|---|\n| 1 (Single) | 100 |\n| 2 (Double) | 300 |\n| 3 (Triple) | 500 |\n| 4 (Tetris) | 800 |\n\nThe formula is: `score += base_points * level`\n\n## Levels and Speed\n\n- The game starts at level 1.\n- The level increases by 1 for every 10 lines cleared.\n- The drop speed (how often the current piece automatically moves down one row) should increase with each level. A reasonable starting interval is around 800ms at level 1, decreasing as the level increases. The piece should never stop dropping entirely.\n\n## Display\n\nThe game screen must show:\n\n- The playing field with the current piece and all placed blocks.\n- **Score**: the current score, updated in real time.\n- **Level**: the current level.\n- **Lines**: the total number of lines cleared.\n- **Next piece**: a preview of the next piece that will appear.\n\n## Game Over\n\n- The game ends when a new piece cannot be placed at its spawn position because existing blocks are in the way.\n- When the game ends, display a \"Game Over\" message along with the final score.\n- Provide a way to restart the game (a button or pressing a key).\n\n## Visual Quality\n\n- The game should look clean and polished, not like a raw prototype.\n- Use a reasonable color palette for the pieces (the colors listed above or similar).\n- Center the game on the page with a neutral background.\n- The game area and side panels (score, next piece) should be clearly laid out.\n\n## Technical Constraints\n\n- No build step required. The game should run by opening an HTML file in a modern browser.\n- No external libraries or frameworks at runtime.\n- The code should be organized and readable.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-e5qs71mg","session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"c76f8773-8c51-4dfe-91ce-d5a0b2897c0e","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CpThmKjRjxvYAKwyqz79YP","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a fully playable Tetris game implemented as a single HTML file with TypeScript. Since TypeScript requires compilation, I'll need to either:\n\n1. Write the TypeScript and compile it inline using a script tag with `type=\"text/typescript\"` and include a TypeScript compiler... but that would be an external dependency.\n2. Write the TypeScript, compile it to JavaScript, and embed the compiled JavaScript in the HTML file.\n3. Write it in TypeScript and use a build step to compile it, then create the final HTML.\n \nI'm realizing there's a tension here—the user wants TypeScript but no build step. The most practical solution is to write the TypeScript source, compile it with `tsc`, and embed the resulting JavaScript directly in the HTML file so it runs without any build process needed on their end. I'll compile the TypeScript and embed the resulting JavaScript directly into a single HTML file for the user.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5597,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5597,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"445fbb9d-d313-49da-9509-6873d2cfd421"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CpThmKjRjxvYAKwyqz79YP","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MgCrb8KEUk7bK93ShjdonW","name":"Bash","input":{"command":"which tsc && tsc --version","description":"Check if TypeScript compiler is available"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5597,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5597,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"53ccad72-97c0-48f2-af5d-81102cac3388"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MgCrb8KEUk7bK93ShjdonW","type":"tool_result","content":"/usr/bin/tsc\nVersion 5.9.3","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"48c772ed-38c0-4a11-a110-f10f1decae9d","timestamp":"2026-04-03T20:46:47.062Z","tool_use_result":{"stdout":"/usr/bin/tsc\nVersion 5.9.3","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CpThmKjRjxvYAKwyqz79YP","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0176HJ8c9vF1YUinMPU3oqyh","name":"Bash","input":{"command":"ls /tmp/loop-bench-e5qs71mg/","description":"List current working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5597,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5597,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"5dd37cce-2be4-4dfd-9304-091157593190"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_0176HJ8c9vF1YUinMPU3oqyh","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"432538bb-c77c-49d6-b02e-2ba4b95850fb","timestamp":"2026-04-03T20:46:47.647Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01X3vqymCXuYhLUehcFj9eHr","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LcAL3HMn3Y8oTGmt4xTwSb","name":"Bash","input":{"command":"cat /tmp/loop-bench-e5qs71mg/package.json","description":"Check package.json for project config"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":770,"cache_read_input_tokens":5597,"cache_creation":{"ephemeral_5m_input_tokens":770,"ephemeral_1h_input_tokens":0},"output_tokens":53,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"9f22e9c3-80aa-4105-ad64-7267b16f623d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LcAL3HMn3Y8oTGmt4xTwSb","type":"tool_result","content":"{\n \"name\": \"loop-bench-e5qs71mg\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"a2b4dec5-3e53-4d67-8503-e4a0248a11d6","timestamp":"2026-04-03T20:46:50.641Z","tool_use_result":{"stdout":"{\n \"name\": \"loop-bench-e5qs71mg\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CgDwXqS17C4oXJZAqxoHws","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Now let me write the TypeScript source for the Tetris game, then compile it and embed everything in a single HTML file.\n\nLet me plan the structure:\n\n1. **Types and constants**: Tetromino definitions, colors, shapes\n2. **Game state**: Board, current piece, next piece, score, level, lines\n3. **Game logic**: \n - Collision detection\n - Piece rotation\n - Line clearing\n - Score calculation\n - Level/speed progression\n - Hard drop\n4. **Rendering**: Canvas-based rendering (using HTML5 Canvas)\n\n\n5. **Input handling**: Keyboard events\n6. **UI**: Score display, next piece preview, game over screen\n\nI'll set up a clean TypeScript implementation with a 10x20 grid at 30px per cell, using a main canvas for the board and a separate preview canvas for the next piece.\n\nWriting the TypeScript implementation... Defining the tetromino shapes... Defining the game constants and board structure...\n\nNow I'm setting up the piece randomization system with a bag that shuffles through all seven tetromino types to ensure fair distribution, refilling when empty.\n\nSetting up the game class... Setting up event listeners for keyboard input and the restart button, then initializing the game loop. I'm also defining helper methods to create the game board, spawn new pieces at the top center, and manage piece rotations.\n\nNow I'm implementing the collision detection logic that checks whether a piece can move to a new position by validating it stays within bounds and doesn't overlap with placed blocks.\n\nImplementing rotation with wall kick mechanics... Writing game logic... Writing game logic... Drawing the game grid...\n\nNow I'm iterating through the board to render all placed blocks with their colors, then calculating where the ghost piece should land to show the player where their current piece will settle. I'll draw both the ghost piece as a preview and the active piece on top, then update the next piece preview panel.\n\nWriting cell rendering logic... Finishing the piece drawing logic for ghost pieces with reduced opacity, then moving on to render the next piece preview by clearing the canvas and setting up the shape and color for display.\n\nNow I'm centering the next piece in its preview window by calculating offsets, then iterating through the shape to draw each block at the correct position. After that, I'm implementing the main game loop that tracks time between frames and handles piece dropping based on the current level's drop interval, locking the piece when it can't move down anymore.\n\nStill writing game loop logic... I'm initializing the game when the DOM loads, then thinking through the HTML structure with the board on the left and the UI elements like next piece preview and score on the right. I need to review the `isValid` method to clean up the shape parameter handling, and I'm reconsidering the `clearLines` logic to make sure the row index increments correctly after splicing rows. I'm verifying the splice and unshift logic is working correctly—after removing a full row and adding an empty one at the top, the `row++` cancels out the loop's `row--` to recheck that same index in case another row has shifted down into it. Now I need to think through the `isValid` function and what the `overrideY` parameter should do.\n\nI'm simplifying the position validation by removing unnecessary parameters and just checking if a given shape fits at coordinates x and y on the board—iterating through the shape's cells and ensuring they don't collide with existing pieces or go out of bounds.\n\nRefining the validation logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1063,"cache_read_input_tokens":5597,"cache_creation":{"ephemeral_5m_input_tokens":1063,"ephemeral_1h_input_tokens":0},"output_tokens":34,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"c0799529-dfb0-4801-97d8-04a6d5d94191"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CgDwXqS17C4oXJZAqxoHws","type":"message","role":"assistant","content":[{"type":"text","text":"Good, TypeScript 5.9.3 is available. Let me build the complete Tetris game — TypeScript source, compile it, then bundle everything into a single self-contained HTML file."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1063,"cache_read_input_tokens":5597,"cache_creation":{"ephemeral_5m_input_tokens":1063,"ephemeral_1h_input_tokens":0},"output_tokens":34,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"534c6726-a26a-4516-a068-9ccdd5bd273d"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CgDwXqS17C4oXJZAqxoHws","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Y1BV8aBdoGeM9yBgZTqpTu","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-e5qs71mg/tetris/src","description":"Create project directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1063,"cache_read_input_tokens":5597,"cache_creation":{"ephemeral_5m_input_tokens":1063,"ephemeral_1h_input_tokens":0},"output_tokens":34,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"5c59c35d-80d9-4047-bd74-daa2a7c6f91d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Y1BV8aBdoGeM9yBgZTqpTu","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"55467d00-14c5-48bf-85c5-1053203fb516","timestamp":"2026-04-03T20:48:11.963Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01G1j9CMq87LPsnLCt7Mrhn9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VJGbrNBAkpyV3PP1iFds6o","name":"Bash","input":{"command":"cat > /tmp/loop-bench-e5qs71mg/tetris/src/tetris.ts << 'TSEOF'\n// ============================================================\n// Tetris – fully self-contained TypeScript implementation\n// ============================================================\n\n// ── Types ────────────────────────────────────────────────────\n\ntype TetrominoType = \"I\" | \"O\" | \"T\" | \"S\" | \"Z\" | \"J\" | \"L\";\ntype Cell = TetrominoType | null;\ntype Board = Cell[][];\n\ninterface Piece {\n type: TetrominoType;\n shape: number[][];\n rotIdx: number;\n x: number;\n y: number;\n}\n\n// ── Constants ────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst CELL = 30; // px per cell\n\nconst COLORS: Record<TetrominoType, string> = {\n I: \"#00e5ff\",\n O: \"#fdd835\",\n T: \"#ab47bc\",\n S: \"#66bb6a\",\n Z: \"#ef5350\",\n J: \"#42a5f5\",\n L: \"#ffa726\",\n};\n\n// Highlight / shadow tints for 3-D cell effect\nconst LIGHT = \"rgba(255,255,255,0.28)\";\nconst DARK = \"rgba(0,0,0,0.32)\";\n\n// All rotation states per piece type\n// Each rotation is a 2-D array of 0/1\nconst SHAPES: Record<TetrominoType, number[][][]> = {\n I: [\n [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]],\n [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]],\n [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]],\n ],\n O: [\n [[1,1],[1,1]],\n ],\n T: [\n [[0,1,0],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,1],[0,1,0]],\n [[0,1,0],[1,1,0],[0,1,0]],\n ],\n S: [\n [[0,1,1],[1,1,0],[0,0,0]],\n [[0,1,0],[0,1,1],[0,0,1]],\n [[0,0,0],[0,1,1],[1,1,0]],\n [[1,0,0],[1,1,0],[0,1,0]],\n ],\n Z: [\n [[1,1,0],[0,1,1],[0,0,0]],\n [[0,0,1],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,0],[0,1,1]],\n [[0,1,0],[1,1,0],[1,0,0]],\n ],\n J: [\n [[1,0,0],[1,1,1],[0,0,0]],\n [[0,1,1],[0,1,0],[0,1,0]],\n [[0,0,0],[1,1,1],[0,0,1]],\n [[0,1,0],[0,1,0],[1,1,0]],\n ],\n L: [\n [[0,0,1],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,0],[0,1,1]],\n [[0,0,0],[1,1,1],[1,0,0]],\n [[1,1,0],[0,1,0],[0,1,0]],\n ],\n};\n\n// Base points for 1-4 line clears\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n\n// Wall-kick X-offsets to try when rotation would be blocked\nconst WALL_KICKS = [0, -1, 1, -2, 2];\n\n// ── Drop speed ───────────────────────────────────────────────\n\nfunction dropInterval(level: number): number {\n // Starts at 800 ms, decreases per level, minimum 50 ms\n return Math.max(50, 800 - (level - 1) * 72);\n}\n\n// ── 7-bag random system ──────────────────────────────────────\n\nclass Bag {\n private pool: TetrominoType[] = [];\n\n private refill(): void {\n this.pool = ([\"I\",\"O\",\"T\",\"S\",\"Z\",\"J\",\"L\"] as TetrominoType[]).slice();\n for (let i = this.pool.length - 1; i > 0; i--) {\n const j = (Math.random() * (i + 1)) | 0;\n [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]];\n }\n }\n\n draw(): TetrominoType {\n if (this.pool.length === 0) this.refill();\n return this.pool.pop()!;\n }\n}\n\n// ── Main game class ──────────────────────────────────────────\n\nclass TetrisGame {\n // Canvases\n private readonly boardCanvas: HTMLCanvasElement;\n private readonly boardCtx: CanvasRenderingContext2D;\n private readonly nextCanvas: HTMLCanvasElement;\n private readonly nextCtx: CanvasRenderingContext2D;\n\n // UI labels\n private readonly scoreEl: HTMLElement;\n private readonly levelEl: HTMLElement;\n private readonly linesEl: HTMLElement;\n private readonly gameOverOverlay: HTMLElement;\n private readonly finalScoreEl: HTMLElement;\n\n // Game state\n private board!: Board;\n private current!: Piece;\n private nextType!: TetrominoType;\n private bag!: Bag;\n\n private score = 0;\n private level = 1;\n private lines = 0;\n private over = false;\n\n // Timing\n private raf = 0;\n private lastTs = 0;\n private dropAcc = 0;\n\n // DAS (Delayed Auto Shift) state\n private das: { left: boolean; right: boolean; charge: number } = { left: false, right: false, charge: 0 };\n private readonly DAS_DELAY = 170; // ms before repeat\n private readonly DAS_REPEAT = 50; // ms between repeats\n\n constructor() {\n this.boardCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n this.boardCtx = this.boardCanvas.getContext(\"2d\")!;\n this.nextCanvas = document.getElementById(\"next-canvas\") as HTMLCanvasElement;\n this.nextCtx = this.nextCanvas.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score-val\")!;\n this.levelEl = document.getElementById(\"level-val\")!;\n this.linesEl = document.getElementById(\"lines-val\")!;\n this.gameOverOverlay = document.getElementById(\"game-over\")!;\n this.finalScoreEl = document.getElementById(\"final-score\")!;\n\n document.addEventListener(\"keydown\", this.onKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n document.getElementById(\"restart-btn\")!.addEventListener(\"click\", () => this.restart());\n\n this.init();\n this.loop(0);\n }\n\n // ── Initialisation ─────────────────────────────────────────\n\n private init(): void {\n this.board = Array.from({ length: ROWS }, () => new Array<Cell>(COLS).fill(null));\n this.bag = new Bag();\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.over = false;\n this.dropAcc = 0;\n this.lastTs = 0;\n\n this.nextType = this.bag.draw();\n this.current = this.spawnPiece();\n\n this.gameOverOverlay.style.display = \"none\";\n this.updateHUD();\n }\n\n private spawnPiece(): Piece {\n const type = this.nextType;\n this.nextType = this.bag.draw();\n const shape = SHAPES[type][0];\n const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2);\n return { type, shape, rotIdx: 0, x, y: 0 };\n }\n\n // ── Validity check ─────────────────────────────────────────\n\n private valid(shape: number[][], x: number, y: number): boolean {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const bx = x + c, by = y + r;\n if (bx < 0 || bx >= COLS || by >= ROWS) return false;\n if (by >= 0 && this.board[by][bx] !== null) return false;\n }\n }\n return true;\n }\n\n // ── Movement ───────────────────────────────────────────────\n\n private tryMove(dx: number, dy: number): boolean {\n if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) {\n this.current.x += dx;\n this.current.y += dy;\n return true;\n }\n return false;\n }\n\n private rotate(cw: boolean): void {\n const rots = SHAPES[this.current.type];\n if (rots.length === 1) return; // O piece – no rotation\n\n const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length;\n const nextShape = rots[nextIdx];\n\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n return;\n }\n }\n // Also try kicking up for floor kicks\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n this.current.y -= 1;\n return;\n }\n }\n }\n\n private hardDrop(): void {\n while (this.tryMove(0, 1)) {}\n this.lock();\n }\n\n // ── Locking / line clearing ────────────────────────────────\n\n private lock(): void {\n const { shape, x, y, type } = this.current;\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const by = y + r;\n if (by < 0) {\n this.endGame();\n return;\n }\n this.board[by][x + c] = type;\n }\n }\n\n this.clearLines();\n this.current = this.spawnPiece();\n\n if (!this.valid(this.current.shape, this.current.x, this.current.y)) {\n this.endGame();\n }\n }\n\n private clearLines(): void {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every(c => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array<Cell>(COLS).fill(null));\n cleared++;\n r++; // re-examine same index after shift\n }\n }\n if (cleared > 0) {\n this.score += LINE_POINTS[cleared] * this.level;\n this.lines += cleared;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateHUD();\n }\n }\n\n // ── Game over ──────────────────────────────────────────────\n\n private endGame(): void {\n this.over = true;\n cancelAnimationFrame(this.raf);\n this.finalScoreEl.textContent = this.score.toLocaleString();\n this.gameOverOverlay.style.display = \"flex\";\n }\n\n public restart(): void {\n cancelAnimationFrame(this.raf);\n this.init();\n this.loop(0);\n }\n\n // ── Input ──────────────────────────────────────────────────\n\n private onKeyDown(e: KeyboardEvent): void {\n if (this.over) {\n if (e.code === \"Enter\" || e.code === \"KeyR\") this.restart();\n return;\n }\n\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; }\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!this.tryMove(0, 1)) this.lock();\n this.dropAcc = 0;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.rotate(true);\n break;\n case \"KeyZ\":\n e.preventDefault();\n this.rotate(false);\n break;\n case \"Space\":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n }\n\n private onKeyUp(e: KeyboardEvent): void {\n if (e.code === \"ArrowLeft\") this.das.left = false;\n if (e.code === \"ArrowRight\") this.das.right = false;\n }\n\n // ── Game loop ──────────────────────────────────────────────\n\n private loop(ts: number): void {\n if (this.over) return;\n\n const dt = this.lastTs === 0 ? 0 : ts - this.lastTs;\n this.lastTs = ts;\n\n // DAS handling\n if (this.das.left || this.das.right) {\n this.das.charge += dt;\n const threshold = this.das.charge < this.DAS_DELAY ? Infinity : this.DAS_REPEAT;\n if (this.das.charge >= this.DAS_DELAY) {\n const surplus = this.das.charge - this.DAS_DELAY;\n const reps = Math.floor(surplus / this.DAS_REPEAT);\n if (reps > 0) {\n for (let i = 0; i < reps; i++) {\n this.tryMove(this.das.left ? -1 : 1, 0);\n }\n this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT);\n }\n }\n void threshold; // suppress unused warning\n }\n\n // Gravity\n this.dropAcc += dt;\n const interval = dropInterval(this.level);\n while (this.dropAcc >= interval) {\n this.dropAcc -= interval;\n if (!this.tryMove(0, 1)) {\n this.lock();\n break;\n }\n }\n\n this.render();\n this.raf = requestAnimationFrame(this.loop.bind(this));\n }\n\n // ── HUD ────────────────────────────────────────────────────\n\n private updateHUD(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n // ── Ghost piece ────────────────────────────────────────────\n\n private ghostY(): number {\n let gy = this.current.y;\n while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++;\n return gy;\n }\n\n // ── Rendering ──────────────────────────────────────────────\n\n private render(): void {\n const ctx = this.boardCtx;\n const W = COLS * CELL, H = ROWS * CELL;\n\n // Background\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, W, H);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.05)\";\n ctx.lineWidth = 1;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]!], 1);\n }\n }\n\n // Ghost piece\n const gy = this.ghostY();\n if (gy !== this.current.y) {\n this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2);\n }\n\n // Current piece\n this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1);\n\n // Border\n ctx.strokeStyle = \"rgba(255,255,255,0.15)\";\n ctx.lineWidth = 2;\n ctx.strokeRect(0, 0, W, H);\n\n // Next-piece preview\n this.renderNext();\n }\n\n private drawShape(\n ctx: CanvasRenderingContext2D,\n shape: number[][],\n ox: number, oy: number,\n color: string, alpha: number\n ): void {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const br = oy + r;\n if (br < 0) continue;\n this.drawCell(ctx, ox + c, br, color, alpha);\n }\n }\n }\n\n private drawCell(\n ctx: CanvasRenderingContext2D,\n col: number, row: number,\n color: string, alpha: number\n ): void {\n const x = col * CELL, y = row * CELL;\n const pad = 1;\n\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2);\n\n if (alpha > 0.4) {\n // Top highlight\n ctx.fillStyle = LIGHT;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5);\n // Left highlight\n ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2);\n // Bottom shadow\n ctx.fillStyle = DARK;\n ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5);\n // Right shadow\n ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2);\n }\n\n ctx.globalAlpha = 1;\n }\n\n private renderNext(): void {\n const ctx = this.nextCtx;\n const size = 4 * CELL;\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, size, size);\n\n const shape = SHAPES[this.nextType][0];\n const color = COLORS[this.nextType];\n const offC = Math.floor((4 - shape[0].length) / 2);\n const offR = Math.floor((4 - shape.length) / 2);\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n this.drawCell(ctx, offC + c, offR + r, color, 1);\n }\n }\n\n ctx.strokeStyle = \"rgba(255,255,255,0.12)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, size, size);\n }\n}\n\n// ── Bootstrap ─────────────────────────────────────────────────\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\nTSEOF\necho \"TypeScript source written.\"","description":"Write the complete Tetris TypeScript source"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":6524,"cache_read_input_tokens":6660,"cache_creation":{"ephemeral_5m_input_tokens":6524,"ephemeral_1h_input_tokens":0},"output_tokens":51,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"1b7d9670-c398-4669-8a75-e5e79a8132cd"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VJGbrNBAkpyV3PP1iFds6o","type":"tool_result","content":"TypeScript source written.","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"8d9c8f1b-fbce-4a75-b3e3-27eac0e10294","timestamp":"2026-04-03T20:49:22.245Z","tool_use_result":{"stdout":"TypeScript source written.","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01QarZxsA1jAZc7Qx3Aus3oH","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Y9PDpxs6sR5ghLXsH5ZuhS","name":"Bash","input":{"command":"cat > /tmp/loop-bench-e5qs71mg/tetris/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}\nEOF\nmkdir -p /tmp/loop-bench-e5qs71mg/tetris/dist\ntsc -p /tmp/loop-bench-e5qs71mg/tetris/tsconfig.json\necho \"Compilation exit code: $?\"","description":"Create tsconfig and compile TypeScript to JavaScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":5779,"cache_read_input_tokens":13184,"cache_creation":{"ephemeral_5m_input_tokens":5779,"ephemeral_1h_input_tokens":0},"output_tokens":36,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"2d1ab428-f2d0-4da4-8662-67306be73f59"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Y9PDpxs6sR5ghLXsH5ZuhS","type":"tool_result","content":"node_modules/@types/node/http.d.ts(2176,36): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2180,37): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2184,39): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/web-globals/fetch.d.ts(3,25): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/worker_threads.d.ts(71,34): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nCompilation exit code: 2","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"2a2aa1b0-3644-4a08-b8a8-c3ded0264772","timestamp":"2026-04-03T20:49:28.643Z","tool_use_result":{"stdout":"node_modules/@types/node/http.d.ts(2176,36): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2180,37): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2184,39): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/web-globals/fetch.d.ts(3,25): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/worker_threads.d.ts(71,34): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nCompilation exit code: 2","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GVojrXqSkWPmE7jTaH7RV7","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The issue is with `@types/node` pulling in `undici-types`. I need to update the tsconfig to exclude node_modules or specify the lib more carefully. Let me update the tsconfig to use a specific lib configuration and skip the node types.","signature":"EqkDClsIDBgCKkB1lnoYrvL4hmX0wx33vpsFYpIBTm+lv3IP5xDYtGl+PaHZ5BUNqBUyGvH8GJ03fArgNw7/VBE+RRXnvn/B9apcMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgz/dmY0W5tL4sR0rS4aDCKgKbtgUcfU8FGo7iIw86sMf+KSlfHVIJkqdfIuggc7u42X2Yk8XabEj6epUpEELm+49b711rA9rEkqhh5tKvsB1sod61uxHBaiWEfSvAw4Bt07KIVDYXTxy9j7p6ubGHRrMB73S2nK34MG8nRaekomCuoWb6zuwG0IRzs77DloBtgMsYi3RFwgB4xxKb/Qe5TYXY/0+LT27+tqzcomtPKK0Tx11HT7+5jFQs2Z1PDISvTn+MVGdiCyJ6h9yxpPerFLeOxmIEfF1goF68Hfro4py89jxBSM2rpXfkNFlw8ZGwogNxihI/LpsXOyPCCwD8mLCGe2C6yNSTfTClxdHSzVAnbnHaeO1VJsyDmRpOsuZ1nLg7YZwrPt2Mce4VuAZuHhiNOojDyl2qavA5LnTbu26a9vZakeiXPQm90YAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":624,"cache_read_input_tokens":18963,"cache_creation":{"ephemeral_5m_input_tokens":624,"ephemeral_1h_input_tokens":0},"output_tokens":9,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"1ff5a9ba-1f93-4bd6-8800-94c240f89842"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GVojrXqSkWPmE7jTaH7RV7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VzkKBxaRB3JaJ73i73fna5","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-e5qs71mg/tetris/tsconfig.json","old_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}","new_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false,\n \"types\": []\n },\n \"include\": [\"src/**/*.ts\"],\n \"exclude\": [\"node_modules\"]\n}"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":624,"cache_read_input_tokens":18963,"cache_creation":{"ephemeral_5m_input_tokens":624,"ephemeral_1h_input_tokens":0},"output_tokens":9,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"17ac9648-8537-43e2-8275-dc85392e7594"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"<tool_use_error>File has not been read yet. Read it first before writing to it.</tool_use_error>","is_error":true,"tool_use_id":"toolu_01VzkKBxaRB3JaJ73i73fna5"}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"87fe6cfd-eeb1-4471-afe9-9bdbefd9a0d3","timestamp":"2026-04-03T20:49:33.397Z","tool_use_result":"Error: File has not been read yet. Read it first before writing to it."} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01C2w9Jck5vcptq4ZJcXrkY2","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01B8jYCQsrapDzzZzoQrrw8o","name":"Read","input":{"file_path":"/tmp/loop-bench-e5qs71mg/tetris/tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":464,"cache_read_input_tokens":19587,"cache_creation":{"ephemeral_5m_input_tokens":464,"ephemeral_1h_input_tokens":0},"output_tokens":63,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"98d6d768-037e-4a68-8bc5-ca9b162279b5"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01B8jYCQsrapDzzZzoQrrw8o","type":"tool_result","content":"1\t{\n2\t \"compilerOptions\": {\n3\t \"target\": \"ES2017\",\n4\t \"module\": \"None\",\n5\t \"strict\": true,\n6\t \"noEmit\": false,\n7\t \"outFile\": \"dist/tetris.js\",\n8\t \"removeComments\": false,\n9\t \"declaration\": false,\n10\t \"sourceMap\": false\n11\t },\n12\t \"include\": [\"src/**/*.ts\"]\n13\t}\n14\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"bc2ced13-bc3c-4e9d-9e1f-0f332efb0ea0","timestamp":"2026-04-03T20:49:34.790Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-e5qs71mg/tetris/tsconfig.json","content":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}\n","numLines":14,"startLine":1,"totalLines":14}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01ETmPKYSVR5S5GLbVSecgg9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VsYMdFj6MXpswXbEihRbjF","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-e5qs71mg/tetris/tsconfig.json","old_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}","new_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false,\n \"types\": []\n },\n \"include\": [\"src/**/*.ts\"],\n \"exclude\": [\"node_modules\"]\n}"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":290,"cache_read_input_tokens":20051,"cache_creation":{"ephemeral_5m_input_tokens":290,"ephemeral_1h_input_tokens":0},"output_tokens":57,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"63c7958b-0410-407b-bcb0-be5d1544abc7"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VsYMdFj6MXpswXbEihRbjF","type":"tool_result","content":"The file /tmp/loop-bench-e5qs71mg/tetris/tsconfig.json has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"fa6926fd-a42f-43bd-97fb-c09f0d911df0","timestamp":"2026-04-03T20:49:38.941Z","tool_use_result":{"filePath":"/tmp/loop-bench-e5qs71mg/tetris/tsconfig.json","oldString":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}","newString":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false,\n \"types\": []\n },\n \"include\": [\"src/**/*.ts\"],\n \"exclude\": [\"node_modules\"]\n}","originalFile":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"strict\": true,\n \"noEmit\": false,\n \"outFile\": \"dist/tetris.js\",\n \"removeComments\": false,\n \"declaration\": false,\n \"sourceMap\": false\n },\n \"include\": [\"src/**/*.ts\"]\n}\n","structuredPatch":[{"oldStart":2,"oldLines":12,"newStart":2,"newLines":15,"lines":[" \"compilerOptions\": {"," \"target\": \"ES2017\","," \"module\": \"None\",","+ \"lib\": [\"ES2017\", \"DOM\"],"," \"strict\": true,"," \"noEmit\": false,"," \"outFile\": \"dist/tetris.js\","," \"removeComments\": false,"," \"declaration\": false,","- \"sourceMap\": false","+ \"sourceMap\": false,","+ \"types\": []"," },","- \"include\": [\"src/**/*.ts\"]","+ \"include\": [\"src/**/*.ts\"],","+ \"exclude\": [\"node_modules\"]"," }"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01E7cppQWVnvCfeZJY5uMfkv","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RacXSqFcyUQFrR3L1MoDtW","name":"Bash","input":{"command":"tsc -p /tmp/loop-bench-e5qs71mg/tetris/tsconfig.json 2>&1\necho \"Exit: $?\"","description":"Re-compile TypeScript with updated config"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":387,"cache_read_input_tokens":20341,"cache_creation":{"ephemeral_5m_input_tokens":387,"ephemeral_1h_input_tokens":0},"output_tokens":58,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"2272fa57-9ac8-4f8c-832a-d8e023dfa0e4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01RacXSqFcyUQFrR3L1MoDtW","type":"tool_result","content":"Exit: 0","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"1f7a52a7-a94c-4239-8ec2-8267c4053dee","timestamp":"2026-04-03T20:49:41.662Z","tool_use_result":{"stdout":"Exit: 0","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011rvHXp5GUShMALPpjEn4wq","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017unz5Yz9wb32N5kUxGhBmv","name":"Bash","input":{"command":"cat /tmp/loop-bench-e5qs71mg/tetris/dist/tetris.js","description":"View the compiled JavaScript output"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":127,"cache_read_input_tokens":20728,"cache_creation":{"ephemeral_5m_input_tokens":127,"ephemeral_1h_input_tokens":0},"output_tokens":53,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"8044870c-cdeb-4d98-bf4a-50e7ff6e600e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017unz5Yz9wb32N5kUxGhBmv","type":"tool_result","content":"\"use strict\";\n// ============================================================\n// Tetris – fully self-contained TypeScript implementation\n// ============================================================\n// ── Constants ────────────────────────────────────────────────\nconst COLS = 10;\nconst ROWS = 20;\nconst CELL = 30; // px per cell\nconst COLORS = {\n I: \"#00e5ff\",\n O: \"#fdd835\",\n T: \"#ab47bc\",\n S: \"#66bb6a\",\n Z: \"#ef5350\",\n J: \"#42a5f5\",\n L: \"#ffa726\",\n};\n// Highlight / shadow tints for 3-D cell effect\nconst LIGHT = \"rgba(255,255,255,0.28)\";\nconst DARK = \"rgba(0,0,0,0.32)\";\n// All rotation states per piece type\n// Each rotation is a 2-D array of 0/1\nconst SHAPES = {\n I: [\n [[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]],\n [[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]],\n [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]],\n [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]],\n ],\n O: [\n [[1, 1], [1, 1]],\n ],\n T: [\n [[0, 1, 0], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 1], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 1], [0, 1, 0]],\n [[0, 1, 0], [1, 1, 0], [0, 1, 0]],\n ],\n S: [\n [[0, 1, 1], [1, 1, 0], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 1], [0, 0, 1]],\n [[0, 0, 0], [0, 1, 1], [1, 1, 0]],\n [[1, 0, 0], [1, 1, 0], [0, 1, 0]],\n ],\n Z: [\n [[1, 1, 0], [0, 1, 1], [0, 0, 0]],\n [[0, 0, 1], [0, 1, 1], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 0], [0, 1, 1]],\n [[0, 1, 0], [1, 1, 0], [1, 0, 0]],\n ],\n J: [\n [[1, 0, 0], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 1], [0, 1, 0], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 1], [0, 0, 1]],\n [[0, 1, 0], [0, 1, 0], [1, 1, 0]],\n ],\n L: [\n [[0, 0, 1], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 0], [0, 1, 1]],\n [[0, 0, 0], [1, 1, 1], [1, 0, 0]],\n [[1, 1, 0], [0, 1, 0], [0, 1, 0]],\n ],\n};\n// Base points for 1-4 line clears\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n// Wall-kick X-offsets to try when rotation would be blocked\nconst WALL_KICKS = [0, -1, 1, -2, 2];\n// ── Drop speed ───────────────────────────────────────────────\nfunction dropInterval(level) {\n // Starts at 800 ms, decreases per level, minimum 50 ms\n return Math.max(50, 800 - (level - 1) * 72);\n}\n// ── 7-bag random system ──────────────────────────────────────\nclass Bag {\n constructor() {\n this.pool = [];\n }\n refill() {\n this.pool = [\"I\", \"O\", \"T\", \"S\", \"Z\", \"J\", \"L\"].slice();\n for (let i = this.pool.length - 1; i > 0; i--) {\n const j = (Math.random() * (i + 1)) | 0;\n [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]];\n }\n }\n draw() {\n if (this.pool.length === 0)\n this.refill();\n return this.pool.pop();\n }\n}\n// ── Main game class ──────────────────────────────────────────\nclass TetrisGame {\n constructor() {\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.over = false;\n // Timing\n this.raf = 0;\n this.lastTs = 0;\n this.dropAcc = 0;\n // DAS (Delayed Auto Shift) state\n this.das = { left: false, right: false, charge: 0 };\n this.DAS_DELAY = 170; // ms before repeat\n this.DAS_REPEAT = 50; // ms between repeats\n this.boardCanvas = document.getElementById(\"board\");\n this.boardCtx = this.boardCanvas.getContext(\"2d\");\n this.nextCanvas = document.getElementById(\"next-canvas\");\n this.nextCtx = this.nextCanvas.getContext(\"2d\");\n this.scoreEl = document.getElementById(\"score-val\");\n this.levelEl = document.getElementById(\"level-val\");\n this.linesEl = document.getElementById(\"lines-val\");\n this.gameOverOverlay = document.getElementById(\"game-over\");\n this.finalScoreEl = document.getElementById(\"final-score\");\n document.addEventListener(\"keydown\", this.onKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n document.getElementById(\"restart-btn\").addEventListener(\"click\", () => this.restart());\n this.init();\n this.loop(0);\n }\n // ── Initialisation ─────────────────────────────────────────\n init() {\n this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null));\n this.bag = new Bag();\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.over = false;\n this.dropAcc = 0;\n this.lastTs = 0;\n this.nextType = this.bag.draw();\n this.current = this.spawnPiece();\n this.gameOverOverlay.style.display = \"none\";\n this.updateHUD();\n }\n spawnPiece() {\n const type = this.nextType;\n this.nextType = this.bag.draw();\n const shape = SHAPES[type][0];\n const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2);\n return { type, shape, rotIdx: 0, x, y: 0 };\n }\n // ── Validity check ─────────────────────────────────────────\n valid(shape, x, y) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const bx = x + c, by = y + r;\n if (bx < 0 || bx >= COLS || by >= ROWS)\n return false;\n if (by >= 0 && this.board[by][bx] !== null)\n return false;\n }\n }\n return true;\n }\n // ── Movement ───────────────────────────────────────────────\n tryMove(dx, dy) {\n if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) {\n this.current.x += dx;\n this.current.y += dy;\n return true;\n }\n return false;\n }\n rotate(cw) {\n const rots = SHAPES[this.current.type];\n if (rots.length === 1)\n return; // O piece – no rotation\n const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length;\n const nextShape = rots[nextIdx];\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n return;\n }\n }\n // Also try kicking up for floor kicks\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n this.current.y -= 1;\n return;\n }\n }\n }\n hardDrop() {\n while (this.tryMove(0, 1)) { }\n this.lock();\n }\n // ── Locking / line clearing ────────────────────────────────\n lock() {\n const { shape, x, y, type } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const by = y + r;\n if (by < 0) {\n this.endGame();\n return;\n }\n this.board[by][x + c] = type;\n }\n }\n this.clearLines();\n this.current = this.spawnPiece();\n if (!this.valid(this.current.shape, this.current.x, this.current.y)) {\n this.endGame();\n }\n }\n clearLines() {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every(c => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array(COLS).fill(null));\n cleared++;\n r++; // re-examine same index after shift\n }\n }\n if (cleared > 0) {\n this.score += LINE_POINTS[cleared] * this.level;\n this.lines += cleared;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateHUD();\n }\n }\n // ── Game over ──────────────────────────────────────────────\n endGame() {\n this.over = true;\n cancelAnimationFrame(this.raf);\n this.finalScoreEl.textContent = this.score.toLocaleString();\n this.gameOverOverlay.style.display = \"flex\";\n }\n restart() {\n cancelAnimationFrame(this.raf);\n this.init();\n this.loop(0);\n }\n // ── Input ──────────────────────────────────────────────────\n onKeyDown(e) {\n if (this.over) {\n if (e.code === \"Enter\" || e.code === \"KeyR\")\n this.restart();\n return;\n }\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n if (!this.das.left) {\n this.tryMove(-1, 0);\n this.das.left = true;\n this.das.charge = 0;\n }\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (!this.das.right) {\n this.tryMove(1, 0);\n this.das.right = true;\n this.das.charge = 0;\n }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!this.tryMove(0, 1))\n this.lock();\n this.dropAcc = 0;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.rotate(true);\n break;\n case \"KeyZ\":\n e.preventDefault();\n this.rotate(false);\n break;\n case \"Space\":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n }\n onKeyUp(e) {\n if (e.code === \"ArrowLeft\")\n this.das.left = false;\n if (e.code === \"ArrowRight\")\n this.das.right = false;\n }\n // ── Game loop ──────────────────────────────────────────────\n loop(ts) {\n if (this.over)\n return;\n const dt = this.lastTs === 0 ? 0 : ts - this.lastTs;\n this.lastTs = ts;\n // DAS handling\n if (this.das.left || this.das.right) {\n this.das.charge += dt;\n const threshold = this.das.charge < this.DAS_DELAY ? Infinity : this.DAS_REPEAT;\n if (this.das.charge >= this.DAS_DELAY) {\n const surplus = this.das.charge - this.DAS_DELAY;\n const reps = Math.floor(surplus / this.DAS_REPEAT);\n if (reps > 0) {\n for (let i = 0; i < reps; i++) {\n this.tryMove(this.das.left ? -1 : 1, 0);\n }\n this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT);\n }\n }\n void threshold; // suppress unused warning\n }\n // Gravity\n this.dropAcc += dt;\n const interval = dropInterval(this.level);\n while (this.dropAcc >= interval) {\n this.dropAcc -= interval;\n if (!this.tryMove(0, 1)) {\n this.lock();\n break;\n }\n }\n this.render();\n this.raf = requestAnimationFrame(this.loop.bind(this));\n }\n // ── HUD ────────────────────────────────────────────────────\n updateHUD() {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n // ── Ghost piece ────────────────────────────────────────────\n ghostY() {\n let gy = this.current.y;\n while (this.valid(this.current.shape, this.current.x, gy + 1))\n gy++;\n return gy;\n }\n // ── Rendering ──────────────────────────────────────────────\n render() {\n const ctx = this.boardCtx;\n const W = COLS * CELL, H = ROWS * CELL;\n // Background\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, W, H);\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.05)\";\n ctx.lineWidth = 1;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * CELL, 0);\n ctx.lineTo(c * CELL, H);\n ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * CELL);\n ctx.lineTo(W, r * CELL);\n ctx.stroke();\n }\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.board[r][c])\n this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1);\n }\n }\n // Ghost piece\n const gy = this.ghostY();\n if (gy !== this.current.y) {\n this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2);\n }\n // Current piece\n this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1);\n // Border\n ctx.strokeStyle = \"rgba(255,255,255,0.15)\";\n ctx.lineWidth = 2;\n ctx.strokeRect(0, 0, W, H);\n // Next-piece preview\n this.renderNext();\n }\n drawShape(ctx, shape, ox, oy, color, alpha) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const br = oy + r;\n if (br < 0)\n continue;\n this.drawCell(ctx, ox + c, br, color, alpha);\n }\n }\n }\n drawCell(ctx, col, row, color, alpha) {\n const x = col * CELL, y = row * CELL;\n const pad = 1;\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2);\n if (alpha > 0.4) {\n // Top highlight\n ctx.fillStyle = LIGHT;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5);\n // Left highlight\n ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2);\n // Bottom shadow\n ctx.fillStyle = DARK;\n ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5);\n // Right shadow\n ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2);\n }\n ctx.globalAlpha = 1;\n }\n renderNext() {\n const ctx = this.nextCtx;\n const size = 4 * CELL;\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, size, size);\n const shape = SHAPES[this.nextType][0];\n const color = COLORS[this.nextType];\n const offC = Math.floor((4 - shape[0].length) / 2);\n const offR = Math.floor((4 - shape.length) / 2);\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n this.drawCell(ctx, offC + c, offR + r, color, 1);\n }\n }\n ctx.strokeStyle = \"rgba(255,255,255,0.12)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, size, size);\n }\n}\n// ── Bootstrap ─────────────────────────────────────────────────\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"351b4d7d-ef77-43af-aa4f-16d9aa12b397","timestamp":"2026-04-03T20:49:43.287Z","tool_use_result":{"stdout":"\"use strict\";\n// ============================================================\n// Tetris – fully self-contained TypeScript implementation\n// ============================================================\n// ── Constants ────────────────────────────────────────────────\nconst COLS = 10;\nconst ROWS = 20;\nconst CELL = 30; // px per cell\nconst COLORS = {\n I: \"#00e5ff\",\n O: \"#fdd835\",\n T: \"#ab47bc\",\n S: \"#66bb6a\",\n Z: \"#ef5350\",\n J: \"#42a5f5\",\n L: \"#ffa726\",\n};\n// Highlight / shadow tints for 3-D cell effect\nconst LIGHT = \"rgba(255,255,255,0.28)\";\nconst DARK = \"rgba(0,0,0,0.32)\";\n// All rotation states per piece type\n// Each rotation is a 2-D array of 0/1\nconst SHAPES = {\n I: [\n [[0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]],\n [[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]],\n [[0, 0, 0, 0], [0, 0, 0, 0], [1, 1, 1, 1], [0, 0, 0, 0]],\n [[0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0], [0, 1, 0, 0]],\n ],\n O: [\n [[1, 1], [1, 1]],\n ],\n T: [\n [[0, 1, 0], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 1], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 1], [0, 1, 0]],\n [[0, 1, 0], [1, 1, 0], [0, 1, 0]],\n ],\n S: [\n [[0, 1, 1], [1, 1, 0], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 1], [0, 0, 1]],\n [[0, 0, 0], [0, 1, 1], [1, 1, 0]],\n [[1, 0, 0], [1, 1, 0], [0, 1, 0]],\n ],\n Z: [\n [[1, 1, 0], [0, 1, 1], [0, 0, 0]],\n [[0, 0, 1], [0, 1, 1], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 0], [0, 1, 1]],\n [[0, 1, 0], [1, 1, 0], [1, 0, 0]],\n ],\n J: [\n [[1, 0, 0], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 1], [0, 1, 0], [0, 1, 0]],\n [[0, 0, 0], [1, 1, 1], [0, 0, 1]],\n [[0, 1, 0], [0, 1, 0], [1, 1, 0]],\n ],\n L: [\n [[0, 0, 1], [1, 1, 1], [0, 0, 0]],\n [[0, 1, 0], [0, 1, 0], [0, 1, 1]],\n [[0, 0, 0], [1, 1, 1], [1, 0, 0]],\n [[1, 1, 0], [0, 1, 0], [0, 1, 0]],\n ],\n};\n// Base points for 1-4 line clears\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n// Wall-kick X-offsets to try when rotation would be blocked\nconst WALL_KICKS = [0, -1, 1, -2, 2];\n// ── Drop speed ───────────────────────────────────────────────\nfunction dropInterval(level) {\n // Starts at 800 ms, decreases per level, minimum 50 ms\n return Math.max(50, 800 - (level - 1) * 72);\n}\n// ── 7-bag random system ──────────────────────────────────────\nclass Bag {\n constructor() {\n this.pool = [];\n }\n refill() {\n this.pool = [\"I\", \"O\", \"T\", \"S\", \"Z\", \"J\", \"L\"].slice();\n for (let i = this.pool.length - 1; i > 0; i--) {\n const j = (Math.random() * (i + 1)) | 0;\n [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]];\n }\n }\n draw() {\n if (this.pool.length === 0)\n this.refill();\n return this.pool.pop();\n }\n}\n// ── Main game class ──────────────────────────────────────────\nclass TetrisGame {\n constructor() {\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.over = false;\n // Timing\n this.raf = 0;\n this.lastTs = 0;\n this.dropAcc = 0;\n // DAS (Delayed Auto Shift) state\n this.das = { left: false, right: false, charge: 0 };\n this.DAS_DELAY = 170; // ms before repeat\n this.DAS_REPEAT = 50; // ms between repeats\n this.boardCanvas = document.getElementById(\"board\");\n this.boardCtx = this.boardCanvas.getContext(\"2d\");\n this.nextCanvas = document.getElementById(\"next-canvas\");\n this.nextCtx = this.nextCanvas.getContext(\"2d\");\n this.scoreEl = document.getElementById(\"score-val\");\n this.levelEl = document.getElementById(\"level-val\");\n this.linesEl = document.getElementById(\"lines-val\");\n this.gameOverOverlay = document.getElementById(\"game-over\");\n this.finalScoreEl = document.getElementById(\"final-score\");\n document.addEventListener(\"keydown\", this.onKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n document.getElementById(\"restart-btn\").addEventListener(\"click\", () => this.restart());\n this.init();\n this.loop(0);\n }\n // ── Initialisation ─────────────────────────────────────────\n init() {\n this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null));\n this.bag = new Bag();\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.over = false;\n this.dropAcc = 0;\n this.lastTs = 0;\n this.nextType = this.bag.draw();\n this.current = this.spawnPiece();\n this.gameOverOverlay.style.display = \"none\";\n this.updateHUD();\n }\n spawnPiece() {\n const type = this.nextType;\n this.nextType = this.bag.draw();\n const shape = SHAPES[type][0];\n const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2);\n return { type, shape, rotIdx: 0, x, y: 0 };\n }\n // ── Validity check ─────────────────────────────────────────\n valid(shape, x, y) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const bx = x + c, by = y + r;\n if (bx < 0 || bx >= COLS || by >= ROWS)\n return false;\n if (by >= 0 && this.board[by][bx] !== null)\n return false;\n }\n }\n return true;\n }\n // ── Movement ───────────────────────────────────────────────\n tryMove(dx, dy) {\n if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) {\n this.current.x += dx;\n this.current.y += dy;\n return true;\n }\n return false;\n }\n rotate(cw) {\n const rots = SHAPES[this.current.type];\n if (rots.length === 1)\n return; // O piece – no rotation\n const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length;\n const nextShape = rots[nextIdx];\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n return;\n }\n }\n // Also try kicking up for floor kicks\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) {\n this.current.shape = nextShape;\n this.current.rotIdx = nextIdx;\n this.current.x += kick;\n this.current.y -= 1;\n return;\n }\n }\n }\n hardDrop() {\n while (this.tryMove(0, 1)) { }\n this.lock();\n }\n // ── Locking / line clearing ────────────────────────────────\n lock() {\n const { shape, x, y, type } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const by = y + r;\n if (by < 0) {\n this.endGame();\n return;\n }\n this.board[by][x + c] = type;\n }\n }\n this.clearLines();\n this.current = this.spawnPiece();\n if (!this.valid(this.current.shape, this.current.x, this.current.y)) {\n this.endGame();\n }\n }\n clearLines() {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every(c => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array(COLS).fill(null));\n cleared++;\n r++; // re-examine same index after shift\n }\n }\n if (cleared > 0) {\n this.score += LINE_POINTS[cleared] * this.level;\n this.lines += cleared;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateHUD();\n }\n }\n // ── Game over ──────────────────────────────────────────────\n endGame() {\n this.over = true;\n cancelAnimationFrame(this.raf);\n this.finalScoreEl.textContent = this.score.toLocaleString();\n this.gameOverOverlay.style.display = \"flex\";\n }\n restart() {\n cancelAnimationFrame(this.raf);\n this.init();\n this.loop(0);\n }\n // ── Input ──────────────────────────────────────────────────\n onKeyDown(e) {\n if (this.over) {\n if (e.code === \"Enter\" || e.code === \"KeyR\")\n this.restart();\n return;\n }\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n if (!this.das.left) {\n this.tryMove(-1, 0);\n this.das.left = true;\n this.das.charge = 0;\n }\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (!this.das.right) {\n this.tryMove(1, 0);\n this.das.right = true;\n this.das.charge = 0;\n }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!this.tryMove(0, 1))\n this.lock();\n this.dropAcc = 0;\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.rotate(true);\n break;\n case \"KeyZ\":\n e.preventDefault();\n this.rotate(false);\n break;\n case \"Space\":\n e.preventDefault();\n this.hardDrop();\n break;\n }\n }\n onKeyUp(e) {\n if (e.code === \"ArrowLeft\")\n this.das.left = false;\n if (e.code === \"ArrowRight\")\n this.das.right = false;\n }\n // ── Game loop ──────────────────────────────────────────────\n loop(ts) {\n if (this.over)\n return;\n const dt = this.lastTs === 0 ? 0 : ts - this.lastTs;\n this.lastTs = ts;\n // DAS handling\n if (this.das.left || this.das.right) {\n this.das.charge += dt;\n const threshold = this.das.charge < this.DAS_DELAY ? Infinity : this.DAS_REPEAT;\n if (this.das.charge >= this.DAS_DELAY) {\n const surplus = this.das.charge - this.DAS_DELAY;\n const reps = Math.floor(surplus / this.DAS_REPEAT);\n if (reps > 0) {\n for (let i = 0; i < reps; i++) {\n this.tryMove(this.das.left ? -1 : 1, 0);\n }\n this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT);\n }\n }\n void threshold; // suppress unused warning\n }\n // Gravity\n this.dropAcc += dt;\n const interval = dropInterval(this.level);\n while (this.dropAcc >= interval) {\n this.dropAcc -= interval;\n if (!this.tryMove(0, 1)) {\n this.lock();\n break;\n }\n }\n this.render();\n this.raf = requestAnimationFrame(this.loop.bind(this));\n }\n // ── HUD ────────────────────────────────────────────────────\n updateHUD() {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n // ── Ghost piece ────────────────────────────────────────────\n ghostY() {\n let gy = this.current.y;\n while (this.valid(this.current.shape, this.current.x, gy + 1))\n gy++;\n return gy;\n }\n // ── Rendering ──────────────────────────────────────────────\n render() {\n const ctx = this.boardCtx;\n const W = COLS * CELL, H = ROWS * CELL;\n // Background\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, W, H);\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.05)\";\n ctx.lineWidth = 1;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * CELL, 0);\n ctx.lineTo(c * CELL, H);\n ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * CELL);\n ctx.lineTo(W, r * CELL);\n ctx.stroke();\n }\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.board[r][c])\n this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1);\n }\n }\n // Ghost piece\n const gy = this.ghostY();\n if (gy !== this.current.y) {\n this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2);\n }\n // Current piece\n this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1);\n // Border\n ctx.strokeStyle = \"rgba(255,255,255,0.15)\";\n ctx.lineWidth = 2;\n ctx.strokeRect(0, 0, W, H);\n // Next-piece preview\n this.renderNext();\n }\n drawShape(ctx, shape, ox, oy, color, alpha) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n const br = oy + r;\n if (br < 0)\n continue;\n this.drawCell(ctx, ox + c, br, color, alpha);\n }\n }\n }\n drawCell(ctx, col, row, color, alpha) {\n const x = col * CELL, y = row * CELL;\n const pad = 1;\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2);\n if (alpha > 0.4) {\n // Top highlight\n ctx.fillStyle = LIGHT;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5);\n // Left highlight\n ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2);\n // Bottom shadow\n ctx.fillStyle = DARK;\n ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5);\n // Right shadow\n ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2);\n }\n ctx.globalAlpha = 1;\n }\n renderNext() {\n const ctx = this.nextCtx;\n const size = 4 * CELL;\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, size, size);\n const shape = SHAPES[this.nextType][0];\n const color = COLORS[this.nextType];\n const offC = Math.floor((4 - shape[0].length) / 2);\n const offR = Math.floor((4 - shape.length) / 2);\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c])\n continue;\n this.drawCell(ctx, offC + c, offR + r, color, 1);\n }\n }\n ctx.strokeStyle = \"rgba(255,255,255,0.12)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, size, size);\n }\n}\n// ── Bootstrap ─────────────────────────────────────────────────\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01T53pdvxNNjNdThB1eYjEQh","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The compilation succeeded and the JS looks clean. Now let me create the final HTML file that embeds everything inline. I'll:\n\n1. Write the HTML with proper structure, CSS, and embed the compiled JS\n2. Make it look polished with a dark theme\n\nLet me create the final HTML file now.\n\nBoard is 10 * 30 = 300px wide, 20 * 30 = 600px tall\nNext canvas is 4 * 30 = 120px wide and tall\n\nLet me design the layout:\n- Dark background (#0d0d1a or similar)\n- Center container with flex\n\n\n- Left side has the board canvas with border and shadow, right side has the next piece preview, game stats like score and level, plus control instructions, and I'll overlay the game over message absolutely on top of the board.\n\nBuilding the HTML structure...","signature":"EoIHClsIDBgCKkDQCaB/+M7Sl8lPiZEI+3nY2bl7DwxrKwwNSf767BKSBx4cfHfAQU9KEhP+eNVEPiq4XadpI6rWBSrL4+M/NhWeMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgzMXA9K3H0NzpolmH0aDEEJlQFLSvDcAwSdQyIw5h6FNrYPQeGraVU4BvPsL1YRc4mgGYhCk5hGkUSlaFayxcMKNNqz1qWQUF4gibAYKtQFE/PluZWAcC9yYa5Q6x9WGLIGhyYbWfGNOdQhzwzfsUbh1CN2XxeayaOPslFqeWk/Hy0ApiGPtRBGwIu5YUz2CWkDSKGE57HnTG7EgU3FpX7XpR2Z7b/WnEFsOaLAY7HIeBd+fBLZeCSlwy8knsM9eZXbcLsBsUYuGqiESy95WrfB73zQW/wcmRFAJA3MgQBCXP6y47q9KDc9Tjfl5cJ81JRIg0SkTQYIxesWHLgjgyrClv38/K+079ajccmey4pC+gGs93FuwyG+/BoZsqCQ3dGh7vixhMrnWR9j91d//fvg8XvnhHTAuXDFryu702tIiUshwimot8WmHIaKgKAB1tgNfpt/Z30T/cB6ajaELt1Vp/6Jqb5anSvp+Ak0RFfLYwNREXDg3XuSyHTtNqck6e4pEzD1zhDPFZJyJw+AzBqv14S5mdmoSYc1HYozvCW8+crz33L6tyCBZGJi9lTNbVc5K0UAHJWQY4YNJwVXmXnDGayNgqmG0XTNHLCvB2LN8xxd280ouTXaCU6egWbWrAWxoYp2fAH5JwKNcppPgANgMRJILyLdgOI3UOr5CL6l6HmVs6eRT9Ithv0iVv/mjqw6wowrGnWZXJQbBSt/z3u8My7Sfjx5XlePz82agVnWzye/b4zKeJplhix2QhLwhVWxFWQlCHuVoKTEaMzbZqry8zbowkEKCIozKLBYYnKXljxOkFPqO/6ixBJQKI5kNG5acNcCclSAcaIt9MA5lbz185E/E/0CBSOrWgO6EXMLi/GdG7+p7DXkREWzzj5B8AzBZTxuGl9GmJl8NnGpTuCYUbmPg7TtUVMze6HdLXk/ZhMtBBoeHLlN05harVu19abgQHKYczvZZqpxy3ddG3DjEyTcJm3O6bFeyGB7fHtUjBVtpMvxq1e0coB3Vm5TmBIdbvqWF7JR4OLRUNAQRshbSDpFapvjfhd3pYZyt3HqLtjFbBgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":5527,"cache_read_input_tokens":20855,"cache_creation":{"ephemeral_5m_input_tokens":5527,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"bbad3b69-8af6-46b7-8ca6-8754813384c5"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01T53pdvxNNjNdThB1eYjEQh","type":"message","role":"assistant","content":[{"type":"text","text":"Compilation clean. Now let me assemble the final single-file HTML with embedded CSS and compiled JavaScript:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":5527,"cache_read_input_tokens":20855,"cache_creation":{"ephemeral_5m_input_tokens":5527,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"01122318-1437-4f9a-9df7-16cf3c67d949"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01T53pdvxNNjNdThB1eYjEQh","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013f1pwA7oaqYk6sfyefAQUU","name":"Bash","input":{"command":"JS=$(cat /tmp/loop-bench-e5qs71mg/tetris/dist/tetris.js)\n\ncat > /tmp/loop-bench-e5qs71mg/tetris/tetris.html << HTMLEOF\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n /* ── Reset & base ───────────────────────────────────────── */\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0a0a1a;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n font-family: \"Segoe UI\", system-ui, sans-serif;\n color: #e0e0f0;\n overflow: hidden;\n }\n\n /* ── Outer wrapper ─────────────────────────────────────── */\n #app {\n display: flex;\n gap: 20px;\n align-items: flex-start;\n user-select: none;\n }\n\n /* ── Board area ────────────────────────────────────────── */\n #board-wrap {\n position: relative;\n flex-shrink: 0;\n }\n\n #board {\n display: block;\n border-radius: 4px;\n box-shadow:\n 0 0 0 2px rgba(255,255,255,0.08),\n 0 8px 40px rgba(0,0,0,0.7),\n 0 0 60px rgba(80,60,180,0.25);\n }\n\n /* ── Game-over overlay ─────────────────────────────────── */\n #game-over {\n display: none;\n position: absolute;\n inset: 0;\n border-radius: 4px;\n background: rgba(8, 8, 24, 0.88);\n backdrop-filter: blur(4px);\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n z-index: 10;\n }\n\n #game-over h2 {\n font-size: 2.4rem;\n font-weight: 800;\n letter-spacing: 0.06em;\n color: #ff5370;\n text-shadow: 0 0 20px rgba(255,83,112,0.6);\n text-transform: uppercase;\n }\n\n #game-over .go-score-label {\n font-size: 0.9rem;\n color: #8888bb;\n text-transform: uppercase;\n letter-spacing: 0.12em;\n }\n\n #game-over .go-score-val {\n font-size: 2rem;\n font-weight: 700;\n color: #fdd835;\n }\n\n #restart-btn {\n margin-top: 8px;\n padding: 10px 32px;\n font-size: 1rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n border: 2px solid #7c6af7;\n background: transparent;\n color: #c5beff;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, box-shadow 0.15s;\n }\n\n #restart-btn:hover {\n background: #7c6af7;\n color: #fff;\n box-shadow: 0 0 18px rgba(124,106,247,0.5);\n }\n\n #game-over .go-hint {\n font-size: 0.78rem;\n color: #5555aa;\n letter-spacing: 0.06em;\n }\n\n /* ── Side panel ────────────────────────────────────────── */\n #side {\n display: flex;\n flex-direction: column;\n gap: 18px;\n width: 150px;\n }\n\n .panel-box {\n background: rgba(255,255,255,0.04);\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 8px;\n padding: 14px 16px;\n }\n\n .panel-label {\n font-size: 0.68rem;\n font-weight: 700;\n letter-spacing: 0.16em;\n text-transform: uppercase;\n color: #6666aa;\n margin-bottom: 8px;\n }\n\n /* ── Next piece ────────────────────────────────────────── */\n #next-canvas {\n display: block;\n border-radius: 4px;\n background: #12122a;\n }\n\n /* ── Stats ─────────────────────────────────────────────── */\n .stat-value {\n font-size: 1.65rem;\n font-weight: 800;\n letter-spacing: 0.04em;\n color: #e8e8ff;\n line-height: 1;\n font-variant-numeric: tabular-nums;\n }\n\n .stat-value.accent { color: #fdd835; }\n\n /* ── Controls reference ─────────────────────────────────── */\n .controls-grid {\n display: grid;\n grid-template-columns: auto 1fr;\n gap: 5px 10px;\n align-items: center;\n }\n\n .key {\n display: inline-block;\n background: rgba(255,255,255,0.09);\n border: 1px solid rgba(255,255,255,0.16);\n border-bottom-width: 3px;\n border-radius: 4px;\n padding: 1px 6px;\n font-size: 0.68rem;\n font-weight: 700;\n letter-spacing: 0.04em;\n color: #aaaacc;\n font-family: monospace;\n text-align: center;\n white-space: nowrap;\n }\n\n .ctrl-desc {\n font-size: 0.7rem;\n color: #6666aa;\n line-height: 1.3;\n }\n\n /* ── Title ──────────────────────────────────────────────── */\n #title {\n text-align: center;\n font-size: 1.4rem;\n font-weight: 900;\n letter-spacing: 0.22em;\n text-transform: uppercase;\n background: linear-gradient(135deg, #7c6af7 0%, #00e5ff 100%);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n padding-bottom: 2px;\n }\n </style>\n</head>\n<body>\n <div id=\"app\">\n\n <!-- ── Board ── -->\n <div id=\"board-wrap\">\n <canvas id=\"board\" width=\"300\" height=\"600\"></canvas>\n\n <!-- Game-over overlay (sits on top of the board) -->\n <div id=\"game-over\">\n <h2>Game Over</h2>\n <div>\n <div class=\"go-score-label\">Final Score</div>\n <div class=\"go-score-val\" id=\"final-score\">0</div>\n </div>\n <button id=\"restart-btn\">Play Again</button>\n <div class=\"go-hint\">or press R / Enter</div>\n </div>\n </div>\n\n <!-- ── Side panel ── -->\n <div id=\"side\">\n\n <div id=\"title\">Tetris</div>\n\n <!-- Next piece -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Next</div>\n <canvas id=\"next-canvas\" width=\"120\" height=\"120\"></canvas>\n </div>\n\n <!-- Score -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Score</div>\n <div class=\"stat-value accent\" id=\"score-val\">0</div>\n </div>\n\n <!-- Level -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Level</div>\n <div class=\"stat-value\" id=\"level-val\">1</div>\n </div>\n\n <!-- Lines -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Lines</div>\n <div class=\"stat-value\" id=\"lines-val\">0</div>\n </div>\n\n <!-- Controls reference -->\n <div class=\"panel-box\">\n <div class=\"panel-label\">Controls</div>\n <div class=\"controls-grid\">\n <span class=\"key\">← →</span> <span class=\"ctrl-desc\">Move</span>\n <span class=\"key\">↑</span> <span class=\"ctrl-desc\">Rotate CW</span>\n <span class=\"key\">Z</span> <span class=\"ctrl-desc\">Rotate CCW</span>\n <span class=\"key\">↓</span> <span class=\"ctrl-desc\">Soft drop</span>\n <span class=\"key\">Space</span><span class=\"ctrl-desc\">Hard drop</span>\n </div>\n </div>\n\n </div><!-- /side -->\n </div><!-- /app -->\n\n <script>\n\"use strict\";\n// ============================================================\n// Tetris – fully self-contained TypeScript implementation\n// ============================================================\n// ── Constants ────────────────────────────────────────────────\nconst COLS = 10;\nconst ROWS = 20;\nconst CELL = 30; // px per cell\nconst COLORS = {\n I: \"#00e5ff\",\n O: \"#fdd835\",\n T: \"#ab47bc\",\n S: \"#66bb6a\",\n Z: \"#ef5350\",\n J: \"#42a5f5\",\n L: \"#ffa726\",\n};\n// Highlight / shadow tints for 3-D cell effect\nconst LIGHT = \"rgba(255,255,255,0.28)\";\nconst DARK = \"rgba(0,0,0,0.32)\";\n// All rotation states per piece type\n// Each rotation is a 2-D array of 0/1\nconst SHAPES = {\n I: [\n [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]],\n [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]],\n [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]],\n ],\n O: [[[1,1],[1,1]]],\n T: [\n [[0,1,0],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,1],[0,1,0]],\n [[0,1,0],[1,1,0],[0,1,0]],\n ],\n S: [\n [[0,1,1],[1,1,0],[0,0,0]],\n [[0,1,0],[0,1,1],[0,0,1]],\n [[0,0,0],[0,1,1],[1,1,0]],\n [[1,0,0],[1,1,0],[0,1,0]],\n ],\n Z: [\n [[1,1,0],[0,1,1],[0,0,0]],\n [[0,0,1],[0,1,1],[0,1,0]],\n [[0,0,0],[1,1,0],[0,1,1]],\n [[0,1,0],[1,1,0],[1,0,0]],\n ],\n J: [\n [[1,0,0],[1,1,1],[0,0,0]],\n [[0,1,1],[0,1,0],[0,1,0]],\n [[0,0,0],[1,1,1],[0,0,1]],\n [[0,1,0],[0,1,0],[1,1,0]],\n ],\n L: [\n [[0,0,1],[1,1,1],[0,0,0]],\n [[0,1,0],[0,1,0],[0,1,1]],\n [[0,0,0],[1,1,1],[1,0,0]],\n [[1,1,0],[0,1,0],[0,1,0]],\n ],\n};\nconst LINE_POINTS = [0, 100, 300, 500, 800];\nconst WALL_KICKS = [0, -1, 1, -2, 2];\n\nfunction dropInterval(level) {\n return Math.max(50, 800 - (level - 1) * 72);\n}\n\nclass Bag {\n constructor() { this.pool = []; }\n refill() {\n this.pool = [\"I\",\"O\",\"T\",\"S\",\"Z\",\"J\",\"L\"].slice();\n for (let i = this.pool.length - 1; i > 0; i--) {\n const j = (Math.random() * (i + 1)) | 0;\n [this.pool[i], this.pool[j]] = [this.pool[j], this.pool[i]];\n }\n }\n draw() { if (this.pool.length === 0) this.refill(); return this.pool.pop(); }\n}\n\nclass TetrisGame {\n constructor() {\n this.score = 0; this.level = 1; this.lines = 0; this.over = false;\n this.raf = 0; this.lastTs = 0; this.dropAcc = 0;\n this.das = { left: false, right: false, charge: 0 };\n this.DAS_DELAY = 170;\n this.DAS_REPEAT = 50;\n\n this.boardCanvas = document.getElementById(\"board\");\n this.boardCtx = this.boardCanvas.getContext(\"2d\");\n this.nextCanvas = document.getElementById(\"next-canvas\");\n this.nextCtx = this.nextCanvas.getContext(\"2d\");\n this.scoreEl = document.getElementById(\"score-val\");\n this.levelEl = document.getElementById(\"level-val\");\n this.linesEl = document.getElementById(\"lines-val\");\n this.gameOverOverlay = document.getElementById(\"game-over\");\n this.finalScoreEl = document.getElementById(\"final-score\");\n\n document.addEventListener(\"keydown\", this.onKeyDown.bind(this));\n document.addEventListener(\"keyup\", this.onKeyUp.bind(this));\n document.getElementById(\"restart-btn\").addEventListener(\"click\", () => this.restart());\n\n this.init();\n this.loop(0);\n }\n\n init() {\n this.board = Array.from({ length: ROWS }, () => new Array(COLS).fill(null));\n this.bag = new Bag();\n this.score = 0; this.level = 1; this.lines = 0;\n this.over = false; this.dropAcc = 0; this.lastTs = 0;\n this.nextType = this.bag.draw();\n this.current = this.spawnPiece();\n this.gameOverOverlay.style.display = \"none\";\n this.updateHUD();\n }\n\n spawnPiece() {\n const type = this.nextType;\n this.nextType = this.bag.draw();\n const shape = SHAPES[type][0];\n const x = Math.floor(COLS / 2) - Math.floor(shape[0].length / 2);\n return { type, shape, rotIdx: 0, x, y: 0 };\n }\n\n valid(shape, x, y) {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const bx = x + c, by = y + r;\n if (bx < 0 || bx >= COLS || by >= ROWS) return false;\n if (by >= 0 && this.board[by][bx] !== null) return false;\n }\n }\n return true;\n }\n\n tryMove(dx, dy) {\n if (this.valid(this.current.shape, this.current.x + dx, this.current.y + dy)) {\n this.current.x += dx; this.current.y += dy; return true;\n }\n return false;\n }\n\n rotate(cw) {\n const rots = SHAPES[this.current.type];\n if (rots.length === 1) return;\n const nextIdx = (this.current.rotIdx + (cw ? 1 : rots.length - 1)) % rots.length;\n const nextShape = rots[nextIdx];\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y)) {\n this.current.shape = nextShape; this.current.rotIdx = nextIdx;\n this.current.x += kick; return;\n }\n }\n for (const kick of WALL_KICKS) {\n if (this.valid(nextShape, this.current.x + kick, this.current.y - 1)) {\n this.current.shape = nextShape; this.current.rotIdx = nextIdx;\n this.current.x += kick; this.current.y -= 1; return;\n }\n }\n }\n\n hardDrop() { while (this.tryMove(0, 1)) {} this.lock(); }\n\n lock() {\n const { shape, x, y, type } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const by = y + r;\n if (by < 0) { this.endGame(); return; }\n this.board[by][x + c] = type;\n }\n }\n this.clearLines();\n this.current = this.spawnPiece();\n if (!this.valid(this.current.shape, this.current.x, this.current.y)) this.endGame();\n }\n\n clearLines() {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every(c => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array(COLS).fill(null));\n cleared++; r++;\n }\n }\n if (cleared > 0) {\n this.score += LINE_POINTS[cleared] * this.level;\n this.lines += cleared;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateHUD();\n }\n }\n\n endGame() {\n this.over = true;\n cancelAnimationFrame(this.raf);\n this.finalScoreEl.textContent = this.score.toLocaleString();\n this.gameOverOverlay.style.display = \"flex\";\n }\n\n restart() { cancelAnimationFrame(this.raf); this.init(); this.loop(0); }\n\n onKeyDown(e) {\n if (this.over) {\n if (e.code === \"Enter\" || e.code === \"KeyR\") this.restart();\n return;\n }\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n if (!this.das.left) { this.tryMove(-1, 0); this.das.left = true; this.das.charge = 0; }\n break;\n case \"ArrowRight\":\n e.preventDefault();\n if (!this.das.right) { this.tryMove(1, 0); this.das.right = true; this.das.charge = 0; }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!this.tryMove(0, 1)) this.lock();\n this.dropAcc = 0;\n break;\n case \"ArrowUp\": e.preventDefault(); this.rotate(true); break;\n case \"KeyZ\": e.preventDefault(); this.rotate(false); break;\n case \"Space\": e.preventDefault(); this.hardDrop(); break;\n }\n }\n\n onKeyUp(e) {\n if (e.code === \"ArrowLeft\") this.das.left = false;\n if (e.code === \"ArrowRight\") this.das.right = false;\n }\n\n loop(ts) {\n if (this.over) return;\n const dt = this.lastTs === 0 ? 0 : ts - this.lastTs;\n this.lastTs = ts;\n\n // DAS\n if (this.das.left || this.das.right) {\n this.das.charge += dt;\n if (this.das.charge >= this.DAS_DELAY) {\n const surplus = this.das.charge - this.DAS_DELAY;\n const reps = Math.floor(surplus / this.DAS_REPEAT);\n if (reps > 0) {\n for (let i = 0; i < reps; i++) this.tryMove(this.das.left ? -1 : 1, 0);\n this.das.charge = this.DAS_DELAY + (surplus % this.DAS_REPEAT);\n }\n }\n }\n\n // Gravity\n this.dropAcc += dt;\n const interval = dropInterval(this.level);\n while (this.dropAcc >= interval) {\n this.dropAcc -= interval;\n if (!this.tryMove(0, 1)) { this.lock(); break; }\n }\n\n this.render();\n this.raf = requestAnimationFrame(this.loop.bind(this));\n }\n\n updateHUD() {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n ghostY() {\n let gy = this.current.y;\n while (this.valid(this.current.shape, this.current.x, gy + 1)) gy++;\n return gy;\n }\n\n render() {\n const ctx = this.boardCtx;\n const W = COLS * CELL, H = ROWS * CELL;\n\n // Background\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, W, H);\n\n // Subtle grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.05)\";\n ctx.lineWidth = 1;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * CELL, 0); ctx.lineTo(c * CELL, H); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * CELL); ctx.lineTo(W, r * CELL); ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++)\n for (let c = 0; c < COLS; c++)\n if (this.board[r][c]) this.drawCell(ctx, c, r, COLORS[this.board[r][c]], 1);\n\n // Ghost\n const gy = this.ghostY();\n if (gy !== this.current.y)\n this.drawShape(ctx, this.current.shape, this.current.x, gy, COLORS[this.current.type], 0.2);\n\n // Active piece\n this.drawShape(ctx, this.current.shape, this.current.x, this.current.y, COLORS[this.current.type], 1);\n\n // Board border\n ctx.strokeStyle = \"rgba(255,255,255,0.15)\";\n ctx.lineWidth = 2;\n ctx.strokeRect(0, 0, W, H);\n\n this.renderNext();\n }\n\n drawShape(ctx, shape, ox, oy, color, alpha) {\n for (let r = 0; r < shape.length; r++)\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const br = oy + r; if (br < 0) continue;\n this.drawCell(ctx, ox + c, br, color, alpha);\n }\n }\n\n drawCell(ctx, col, row, color, alpha) {\n const x = col * CELL, y = row * CELL, pad = 1;\n ctx.globalAlpha = alpha;\n ctx.fillStyle = color;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, CELL - pad * 2);\n if (alpha > 0.4) {\n ctx.fillStyle = LIGHT;\n ctx.fillRect(x + pad, y + pad, CELL - pad * 2, 5); // top\n ctx.fillRect(x + pad, y + pad, 5, CELL - pad * 2); // left\n ctx.fillStyle = DARK;\n ctx.fillRect(x + pad, y + CELL - pad - 5, CELL - pad * 2, 5); // bottom\n ctx.fillRect(x + CELL - pad - 5, y + pad, 5, CELL - pad * 2); // right\n }\n ctx.globalAlpha = 1;\n }\n\n renderNext() {\n const ctx = this.nextCtx;\n const size = 4 * CELL;\n ctx.fillStyle = \"#12122a\";\n ctx.fillRect(0, 0, size, size);\n const shape = SHAPES[this.nextType][0];\n const color = COLORS[this.nextType];\n const offC = Math.floor((4 - shape[0].length) / 2);\n const offR = Math.floor((4 - shape.length) / 2);\n for (let r = 0; r < shape.length; r++)\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n this.drawCell(ctx, offC + c, offR + r, color, 1);\n }\n ctx.strokeStyle = \"rgba(255,255,255,0.12)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(0, 0, size, size);\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => { new TetrisGame(); });\n </script>\n</body>\n</html>\nHTMLEOF\necho \"HTML file written. Size: $(wc -c < /tmp/loop-bench-e5qs71mg/tetris/tetris.html) bytes\"","description":"Assemble the final self-contained HTML file with embedded CSS and JavaScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":5527,"cache_read_input_tokens":20855,"cache_creation":{"ephemeral_5m_input_tokens":5527,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"7cc35347-f556-49cc-b906-827ae377f829"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013f1pwA7oaqYk6sfyefAQUU","type":"tool_result","content":"HTML file written. Size: 20269 bytes","is_error":false}]},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"23d58633-7d35-44a1-ba3c-7f007e933b83","timestamp":"2026-04-03T20:51:16.022Z","tool_use_result":{"stdout":"HTML file written. Size: 20269 bytes","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Tf7LxBvrBLpEziU6ABJoZr","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MEGnzoxRNmAjbDeHcSKB6W","name":"Read","input":{"file_path":"/tmp/loop-bench-e5qs71mg/tetris/tetris.html"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7437,"cache_read_input_tokens":26382,"cache_creation":{"ephemeral_5m_input_tokens":7437,"ephemeral_1h_input_tokens":0},"output_tokens":57,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","uuid":"4e00137a-5bda-44c7-84b0-2470d0aa1dfe"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":282881,"duration_api_ms":278559,"is_error":true,"num_turns":13,"stop_reason":"tool_use","session_id":"64fc47c6-1481-46be-8f46-02a3d264c9fd","total_cost_usd":0.51049425,"usage":{"input_tokens":13,"cache_creation_input_tokens":27152,"cache_read_input_tokens":151563,"output_tokens":21751,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":27152},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":14,"outputTokens":21824,"cacheReadInputTokens":177945,"cacheCreationInputTokens":34589,"webSearchRequests":0,"costUSD":0.51049425,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"7986da82-f799-411f-a7e3-a18405ece914","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":296031,"duration_api_ms":290119,"is_error":true,"num_turns":11,"stop_reason":"tool_use","session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","total_cost_usd":0.5047071000000001,"usage":{"input_tokens":14,"cache_creation_input_tokens":29657,"cache_read_input_tokens":122721,"output_tokens":23185,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":29657},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":15,"outputTokens":23290,"cacheReadInputTokens":144432,"cacheCreationInputTokens":29862,"webSearchRequests":0,"costUSD":0.5047071000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"3bf1b9ef-9166-44d1-baca-2644c49cb4d9","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,133 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": true, - "detail": "tsc --noEmit passed" - } - ], - "score": 0.75 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 2 - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 5, - "code": 2, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1134, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 32, - "excessive": true - }, - "function_length": { - "count": 61, - "average": 7.2, - "max": 28, - "long_functions": 0 - }, - "max_nesting_depth": 14, - "global_declarations": 14, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 370, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 127, - "source_lines": 925, - "ratio_pct": 13.7 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 0.9 - }, - "transcript_analysis": { - "total_events": 31, - "tool_calls": { - "total": 11, - "bash": 7, - "write": 0, - "edit": 2, - "read": 2 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 5, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0, - "error": "Gameplay bot timed out after 180 seconds" - }, - "score": 0.566 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 4, - "failed": 12, - "score": 0.25 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 22 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "detailed", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:46:29.796391+00:00", - "wall_time_seconds": 296, - "exit_code": 1, - "completed_at": "2026-04-03T20:51:31.823472+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,31 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "detailed"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a fully playable Tetris game that runs in a web browser. The game should be implemented as a single-page application with no external runtime dependencies (no CDN links, no package imports at runtime). All code should work by opening an HTML file directly in a browser or serving it from a simple static file server.\n\n## Game Board\n\n- The playing field is a grid of 10 columns by 20 rows.\n- The grid should be visually distinct with cell borders or a background pattern so the player can gauge positions.\n- Occupied cells should be colored according to their piece type.\n\n## Pieces (Tetrominoes)\n\nImplement all 7 standard Tetris pieces:\n\n- **I** (4 in a row, cyan)\n- **O** (2x2 square, yellow)\n- **T** (T-shape, purple)\n- **S** (S-skew, green)\n- **Z** (Z-skew, red)\n- **J** (J-shape, blue)\n- **L** (L-shape, orange)\n\nEach piece should spawn at the top center of the board. Use a random bag system or simple random selection for piece order.\n\n## Controls\n\n- **Left arrow**: move piece left\n- **Right arrow**: move piece right\n- **Down arrow**: soft drop (move piece down faster)\n- **Up arrow**: rotate piece clockwise\n- **Z key**: rotate piece counter-clockwise\n- **Space bar**: hard drop (instantly drop piece to the lowest valid position)\n\n## Rotation\n\n- Pieces rotate clockwise (up arrow) and counter-clockwise (Z key).\n- The O piece does not rotate.\n- Rotation should fail gracefully: if the rotated position would overlap with existing blocks or the walls, the rotation should not occur. A basic wall-kick system (trying one or two offset positions) is acceptable but not required.\n\n## Line Clearing\n\n- When an entire row is filled with blocks, that row is cleared and all rows above it shift down.\n- Multiple rows can be cleared simultaneously.\n\n## Scoring\n\nPoints are awarded based on the number of lines cleared at once, multiplied by the current level:\n\n| Lines Cleared | Base Points |\n|---|---|\n| 1 (Single) | 100 |\n| 2 (Double) | 300 |\n| 3 (Triple) | 500 |\n| 4 (Tetris) | 800 |\n\nThe formula is: `score += base_points * level`\n\n## Levels and Speed\n\n- The game starts at level 1.\n- The level increases by 1 for every 10 lines cleared.\n- The drop speed (how often the current piece automatically moves down one row) should increase with each level. A reasonable starting interval is around 800ms at level 1, decreasing as the level increases. The piece should never stop dropping entirely.\n\n## Display\n\nThe game screen must show:\n\n- The playing field with the current piece and all placed blocks.\n- **Score**: the current score, updated in real time.\n- **Level**: the current level.\n- **Lines**: the total number of lines cleared.\n- **Next piece**: a preview of the next piece that will appear.\n\n## Game Over\n\n- The game ends when a new piece cannot be placed at its spawn position because existing blocks are in the way.\n- When the game ends, display a \"Game Over\" message along with the final score.\n- Provide a way to restart the game (a button or pressing a key).\n\n## Visual Quality\n\n- The game should look clean and polished, not like a raw prototype.\n- Use a reasonable color palette for the pieces (the colors listed above or similar).\n- Center the game on the page with a neutral background.\n- The game area and side panels (score, next piece) should be clearly laid out.\n\n## Technical Constraints\n\n- No build step required. The game should run by opening an HTML file in a modern browser.\n- No external libraries or frameworks at runtime.\n- The code should be organized and readable.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-4l5hn4ys","session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"c64cfea3-a780-460e-95b6-911dadbc00a9","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LqFQNZRUDkg9UNV6hxagVe","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a fully playable Tetris game implemented as a single-page application using TypeScript, but with no external runtime dependencies. Since TypeScript needs to be compiled to JavaScript, I need to think about how to handle this.\n\nThe constraint says \"No build step required\" but also \"Use TypeScript.\" This is a bit contradictory. The way to handle this is to either:\n1. Include the TypeScript compiler inline and compile at runtime\n2. Write the TypeScript and include it as an inline script with type=\"text/typescript\" and use a small inline TS compiler\n\nActually, the best approach here is to write the TypeScript code and include it as a `<script type=\"module\">` but since TypeScript doesn't run natively in browsers, I need to think of another approach.\n\n\nI think the best interpretation is to write the game logic in TypeScript, compile it to JavaScript myself, and deliver everything as a single self-contained HTML file with no external dependencies or build steps required on the user's end. I'm wrestling with how to deliver TypeScript while keeping it runnable without a build step—the user wants both, which seems contradictory. The cleanest approach is to provide the TypeScript source file for reference and a self-contained HTML file with the compiled JavaScript that works immediately in a browser. I'm settling on delivering both a TypeScript source file and a self-contained HTML file with compiled JavaScript so the user gets proper TypeScript code alongside something that runs immediately in a browser without any build step. Now let me start planning the actual game structure.\n\nDefining the core types and game state... Defining the Tetris piece types and game constants... Defining the Tetris piece rotations... Setting up the game state variables to track the board, current and next pieces, score, level, lines cleared, and game status, along with timing and animation references. Then initializing the canvas contexts for both the main game board and the next piece preview.\n\nNow I'm grabbing references to the DOM elements for displaying score, level, lines, and the game over screen, then setting up the bag system that randomizes the piece sequence using a Fisher-Yates shuffle so pieces are drawn fairly without immediate repeats. Writing game logic... Writing game logic... Still writing rotation logic...\n\nNow I'm setting up the input handling system, checking for game over state and then routing keyboard events to handle piece movement and rotation based on arrow keys and other controls.\n\nWriting rendering code... Writing the ghost piece preview... Continuing the render function...\n\nNow I'm drawing the ghost piece if the game is still active, then rendering the current falling piece by iterating through its shape and drawing each block at the correct board position. After that, I'm calling the function to display the next upcoming piece in the preview area.\n\nRendering the next piece preview... Writing the game loop... Setting up event listeners for keyboard input and the restart button, then initializing the game to start playing.\n\nNow I'm styling the game board and side panel with a dark theme, creating boxes for displaying the score, level, and next piece preview with proper typography and spacing.\n\nStill writing styles... Building the game layout...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5599,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5599,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"4f9922e8-93d8-4459-9b1c-da0c318f32f9"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MKJKZ9zrmWbRXyBkLXRBq9","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a fully playable Tetris game implemented as a single HTML file with TypeScript. Since there's no build step required, I'll need to use TypeScript in a way that works without compilation - I can use a TypeScript compiler embedded in the browser, or more practically, I'll write the TypeScript code and compile it to JavaScript inline.\n\nWait, the constraint says \"No build step required\" and \"Use TypeScript.\" This is a bit contradictory since TypeScript needs to be compiled. However, I can approach this in a few ways:\n\n1. Use the TypeScript compiler loaded via CDN in the browser - but \"no CDN links\" is also a constraint\n\n\n2. Write TypeScript in a `<script type=\"text/typescript\">` tag and use a bundled version of the TypeScript compiler\n3. Actually, I think the most practical approach here is to write it as TypeScript source but compile it to a single HTML file - effectively the TypeScript serves as the \"source\" and I produce a compiled HTML file\n\nRe-reading the constraints more carefully: \"No external runtime dependencies (no CDN links, no package imports at runtime)\" and \"No build step required.\" I think the intent is to write the code in TypeScript as the source, produce a single HTML file that works without any external dependencies, and have the TypeScript compiled to JavaScript that's embedded in the HTML. So I'll write the TypeScript and compile it to JavaScript for the final output.\n\nNow I'm planning out the game structure: a canvas-based game with HTML structure, TypeScript game logic, and then I'll compile everything into a single self-contained HTML file. Let me start by defining the core game constants and piece definitions...\n\nDefining game constants and tetromino pieces... I'm realizing the user wants TypeScript as the source language but needs a compiled HTML deliverable without a build step, so I'll write the complete game in TypeScript and then compile it down to JavaScript that can be embedded directly in an HTML file.\n\nWriting the Tetris game code... I'm reconsidering the piece representation—using a 2D matrix makes rotation much simpler since I can just transpose and reverse rows for clockwise rotation. I'll define each Tetris piece as a standard grid pattern and implement the rotation logic programmatically rather than storing all rotation states manually.\n\nSetting up the game constants and piece definitions... Defining the piece shapes... Writing Tetris game logic... I'm laying out the full Tetris implementation with all the core systems: the game board and preview canvases, score tracking, the main game loop using requestAnimationFrame, keyboard input handling, piece mechanics including movement and rotation with collision detection, line clearing logic, and game over conditions. Setting up constants for the grid dimensions, block size, and piece colors...\n\nDefining the scoring system and drop speed calculation that increases difficulty with each level...\n\nBuilding out the piece shape definitions...\n\nImplementing rotation logic... Writing the game logic... I'm setting up the UI element references and initializing the game state in the constructor, grabbing the canvas contexts and DOM elements for the score, level, lines, and game over display.\n\nNow I'm finishing the initialization by creating the piece bag, setting up the current and next pieces, calculating the drop interval based on the level, and then setting up the controls and starting the game loop.\n\nI'm implementing a validation method that checks whether a piece can occupy a given position by testing each block in the piece's shape against the board boundaries and existing blocks.\n\nThen I'm writing the logic to lock a piece in place by marking its blocks on the board, clearing any completed lines, and spawning the next piece.\n\nNow I'm implementing the line-clearing mechanism that checks each row from bottom to top, removes full lines, and shifts new empty rows to the top. When lines are cleared, I'm updating the score based on how many lines were cleared and the current level, then recalculating the level and drop speed accordingly.\n\nSpawning the next piece... Writing rotation logic... Setting up keyboard event listeners to handle game controls—checking for game over and paused states, then mapping arrow keys and letter keys to movement and rotation actions.\n\nNow I'm wiring up the restart button and defining the restart function, which resets the board, piece bag, current piece, score, level, and all game state variables back to their initial values.\n\nWriting game UI code... Continuing the render function... Finishing the ghost piece rendering, then drawing the actual falling piece by iterating through its shape and calling the block drawing function for each filled cell, and finally triggering the preview render.\n\nNow I'm setting up the preview canvas with a dark background and centering the next piece shape within it, calculating the proper offsets so it displays nicely in the preview window.\n\nWriting the preview rendering... Writing the HTML file...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"3ae3c371-d5ce-4c63-b37f-f669660efe41"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MKJKZ9zrmWbRXyBkLXRBq9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Kcmj9FRw9F9EfN9izsRyDo","name":"Bash","input":{"command":"which tsc && tsc --version"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"d99ed8c1-24d2-45a2-9287-0a2d62a55458"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MKJKZ9zrmWbRXyBkLXRBq9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HmYhgeVv3mJH2rrPmuJWKo","name":"Bash","input":{"command":"ls /tmp/loop-bench-4l5hn4ys/"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"192fb6e5-a6f3-4795-abbe-ec54d326013b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Kcmj9FRw9F9EfN9izsRyDo","type":"tool_result","content":"/usr/bin/tsc\nVersion 5.9.3","is_error":false}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"17b04db9-2883-4a37-ae04-b2ff9e6a18ee","timestamp":"2026-04-03T20:49:33.601Z","tool_use_result":{"stdout":"/usr/bin/tsc\nVersion 5.9.3","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01HmYhgeVv3mJH2rrPmuJWKo","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"c17c2e9b-c5e2-4edd-bf47-8287a36bf34b","timestamp":"2026-04-03T20:49:33.609Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01APFzsQR1pRHwKoAuY5mCLE","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Great, TypeScript is available. Let me check the package.json to understand the existing setup.","signature":"EpwCClsIDBgCKkBQBH7/DIuvKuESHoRIdwXiwKl2GtkxZK2b+1XopfUeMYYVaoPqYajIf0ya28xpmbIp4y1e8meguwePbUMI6o2AMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgzI0FOl6qytMnsMKJUaDBvg0aymSIY4ZRXhbSIwWC1j5hsUVUuW7+99byZN5988t76A5w4VgF4WTrFCzaYTgDy8Ux/eSgcLRbF/1Co9Km8s9hApbEqBTL4ymT0vQPppw1Jx9nPXAnamhAV2NXKV9HWVMqm+0J3XOcSdJN4TYf5h59g9y9NfvMHA0khx2YrEvABfSLoOWhClEtR664Y7Q1Mjjys7kLcDbHdvHXGKxvXnPWZEO49s4BB/utphTBoYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7946,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":7946,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"f86c7493-24ff-429c-9c0e-07b19077bd92"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01APFzsQR1pRHwKoAuY5mCLE","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01YVPNJ6bbKkg8UAxq15CyxV","name":"Read","input":{"file_path":"/tmp/loop-bench-4l5hn4ys/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":7946,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":7946,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"e5b80cb3-62a8-4c96-b38a-3a61b4090c9a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01YVPNJ6bbKkg8UAxq15CyxV","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-4l5hn4ys\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"05e53a6d-521c-4eb1-908e-403d58c5e99d","timestamp":"2026-04-03T20:49:39.255Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-4l5hn4ys/package.json","content":"{\n \"name\": \"loop-bench-4l5hn4ys\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HGJ4rmygmbgaeCVZztWG37","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good, now let me write the TypeScript file for the Tetris game. I'll write the TypeScript code to a file, then compile it to JavaScript, and then create the HTML file with the compiled JavaScript embedded.\n\nLet me write a comprehensive Tetris game. I'll plan out the full architecture:\n\n1. Constants (COLS, ROWS, BLOCK_SIZE, colors, points table)\n2. Piece definitions (7 standard tetrominoes with matrix representations)\n3. Rotation functions (CW and CCW matrix rotation)\n4. PieceBag class (7-bag system for random piece selection)\n5. TetrisGame class:\n - Board state management\n - Collision detection\n - Piece movement (left, right, down, hard drop)\n - Piece rotation with wall kicks\n - Line clearing\n - Scoring and leveling\n - Ghost piece\n - Rendering (board + preview)\n - Game loop\n - Controls\n - Game over detection\n - Restart\n\nWriting the TypeScript implementation...","signature":"ErcIClsIDBgCKkBodMl9DZlwU2CDwsqwyauBByT+SCEqBj2LaIuimnnRgKM4hcGfAhQ/3d2iO7McpzbqOrAqBKvcWHYsjEzUwUrZMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgx+ELevYodYdQo3aaAaDEsxLemRzDf0pVwstyIw4jeoi33ojIfgXjZwuEI5u3U9CUjWbzaVXeLX2DHpkgdcF2idTcf4f4cHXdQm64U2KokHo/FVo5jhq/O33ajjxh/evY904RveGgW5rFtmFp0NSMV25RH10XnfICDk4YJgD69JED3yLGDEHARfiLgpJonWscMmyT8qMcLqyv2W6ccPvKQ3gjHH67+XZSnlXyxSGXDyk/hTsl0GiD2nZ2tiBoK0af5dGErUxuFXhC/i1sAVUPSAVZg12DNWwKBHbHtLQSXyCTh0NpNFO394LwHV6MpqJDoGFmeBe4E5zgm8SiEBYKCohFCh7b3gt3IESx4zsHdymuLcAnGS7uNVD14xAsRL1qWBjLE3UfxKdMPWbphoNvroWR9amgWMxjzS60ga19gEDpUzgFbN5U3u0mw5Fc++gn+VJ8KJHEaBleZ1cfdvgyn5zF6G10y1Z60TRsFjYVq0J17NvmxscMTshSaNmAlDP3JROdP89k/frM1Cn4jnTeqze/4g8Ht9phECEToE48UTL7QNEV3wqNauAZ9KIQ/6wgMe8o4kHrwBmIAARsioyWI2nkL2LVZEoq0bUqdKSSaBzt8xBFzp04x/7dw/Rq5qvBJqwryVT3iBblsyqFGEFmvco6rhjxbVbH9J2biuM6MT+QPRgF2Q4cesX/hr1QAOESvUvFb42yHU2RhmOF2MgmPEhtAXx1Q6e4YC0bGIFaT5A4URJKrXXsuANN+vd5xFjzRr3spsmpqittXiPMfGytzb9twFxLLA8dnZ2CLUSgM16EklcwKpeDG+ZGd0xXF70aWATRD+g4YBpeCKYfrFitkyf05iw2BlhtGkpWjE6EoFXa5hBMY8Xt2qX7b6T9Lh8PqaoEB4z5i91BiGWU+PzztDoUDQdHTCHeIgeVT1VjT4W2Q777LPxdIhPvQJ7PCuaM8Lmy/vdo98/PXkouesaDA+wlbu9/UGqiKscFKYju5aETW5HctZtNTjw0oJlY0WbgmQX/Q6gOzCzLtePvGDxRmBOZjANNSDY/ZRZl3//UmDrAjDMU6324C4eZ5WXkPilTHvYRtqvYhMwkz2PVdfolJRLMFrV5D74A4lxm7IeWO+CFY/Cu3mZTScoa8RcZ+vsokjee27vhkz/+c8TZ+K/ezNpCJY9rB0zCmBtQqhhACyGXfEb9wtbnR7QZd/96GAhX7dqFodpAZFvF99mYWu1Jy348U6jXyKUq15quOGm0kdz4wG8Bgkqj3mwO8LaqnTu89N+HXDvn6r0pT181gbuVYN2HcDaZrtzf0YAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8380,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":8380,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"b35cbaab-a385-46fd-8748-5b86ef623236"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HGJ4rmygmbgaeCVZztWG37","type":"message","role":"assistant","content":[{"type":"text","text":"Good, TypeScript 5.9.3 is available. Now let me write the full Tetris game. I'll create the TypeScript source, compile it, and produce a single self-contained HTML file."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8380,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":8380,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"182ff89f-a5d0-45e1-af8a-8d48bcebf606"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HGJ4rmygmbgaeCVZztWG37","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Lqqmj3sv9HYDLRqY2ivERT","name":"Bash","input":{"command":"cat /tmp/loop-bench-4l5hn4ys/package.json | python3 -c \"import json,sys; d=json.load(sys.stdin); print(d.get('type',''))\""},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8380,"cache_read_input_tokens":5599,"cache_creation":{"ephemeral_5m_input_tokens":8380,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"b118dafe-1f38-4c16-8d70-c9ed861d6b06"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Lqqmj3sv9HYDLRqY2ivERT","type":"tool_result","content":"commonjs","is_error":false}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"a304d744-738c-4c77-b19c-41a27c433c2f","timestamp":"2026-04-03T20:49:49.072Z","tool_use_result":{"stdout":"commonjs","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01T1C4LjWniVwyCNJw5sRtEE","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Toch1jxv6aBAVcCCQTJHzb","name":"Bash","input":{"command":"cat > /tmp/loop-bench-4l5hn4ys/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"outFile\": \"tetris-compiled.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true\n },\n \"include\": [\"tetris.ts\"]\n}\nEOF","description":"Create tsconfig.json for compiling tetris.ts to a single JS file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":419,"cache_read_input_tokens":13979,"cache_creation":{"ephemeral_5m_input_tokens":419,"ephemeral_1h_input_tokens":0},"output_tokens":64,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"8dc2b2f6-2718-497e-ba72-b605412f506b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Toch1jxv6aBAVcCCQTJHzb","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"b003980a-cb5e-4f0d-9beb-e11a8d88541e","timestamp":"2026-04-03T20:49:54.827Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01ErNx8AVuSL7i6qnJxvSwWb","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QKzt9Tia746Udx37JH2eRx","name":"Bash","input":{"command":"cat > /tmp/loop-bench-4l5hn4ys/tetris.ts << 'TSEOF'\n// =============================================================================\n// TETRIS – single-file TypeScript implementation\n// =============================================================================\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 30; // px per cell on the main board\n\n/** Points for clearing n lines simultaneously (index = line count) */\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n\n/** Drop interval in ms for a given level (never below 80 ms) */\nfunction dropInterval(level: number): number {\n return Math.max(80, 800 - (level - 1) * 72);\n}\n\n// ---------------------------------------------------------------------------\n// Piece definitions\n// ---------------------------------------------------------------------------\n\ntype PieceId = \"I\" | \"O\" | \"T\" | \"S\" | \"Z\" | \"J\" | \"L\";\n\n/** ARGB hex colours for each piece */\nconst PIECE_COLOR: Record<PieceId, string> = {\n I: \"#00f0f0\",\n O: \"#f0f000\",\n T: \"#a000f0\",\n S: \"#00e000\",\n Z: \"#f00000\",\n J: \"#0000f0\",\n L: \"#f0a000\",\n};\n\n/**\n * Base shape for each piece as a binary 2-D matrix.\n * Row 0 is the top of the piece; the shapes are chosen so that\n * standard clockwise SRS rotations look correct.\n */\nconst BASE_SHAPE: Record<PieceId, number[][]> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [1, 1],\n [1, 1],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n// ---------------------------------------------------------------------------\n// Matrix rotation utilities\n// ---------------------------------------------------------------------------\n\nfunction rotateCW(m: number[][]): number[][] {\n const rows = m.length;\n const cols = m[0].length;\n const out: number[][] = Array.from({ length: cols }, () => new Array(rows).fill(0));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n out[c][rows - 1 - r] = m[r][c];\n }\n }\n return out;\n}\n\nfunction rotateCCW(m: number[][]): number[][] {\n const rows = m.length;\n const cols = m[0].length;\n const out: number[][] = Array.from({ length: cols }, () => new Array(rows).fill(0));\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n out[cols - 1 - c][r] = m[r][c];\n }\n }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// 7-bag random piece generator\n// ---------------------------------------------------------------------------\n\nclass PieceBag {\n private bag: PieceId[] = [];\n\n draw(): PieceId {\n if (this.bag.length === 0) this.refill();\n return this.bag.pop()!;\n }\n\n private refill(): void {\n this.bag = [\"I\", \"O\", \"T\", \"S\", \"Z\", \"J\", \"L\"] as PieceId[];\n for (let i = this.bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [this.bag[i], this.bag[j]] = [this.bag[j], this.bag[i]];\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Active piece\n// ---------------------------------------------------------------------------\n\ninterface Piece {\n id: PieceId;\n shape: number[][];\n x: number; // column of left edge\n y: number; // row of top edge (can be negative while entering)\n}\n\nfunction spawnPiece(id: PieceId): Piece {\n const shape = BASE_SHAPE[id].map((r) => [...r]);\n const x = Math.floor((COLS - shape[0].length) / 2);\n const y = id === \"I\" ? -1 : 0;\n return { id, shape, x, y };\n}\n\n// ---------------------------------------------------------------------------\n// Board\n// ---------------------------------------------------------------------------\n\ntype Cell = PieceId | null;\ntype Board = Cell[][];\n\nfunction emptyBoard(): Board {\n return Array.from({ length: ROWS }, () => new Array<Cell>(COLS).fill(null));\n}\n\n// ---------------------------------------------------------------------------\n// Collision / validity\n// ---------------------------------------------------------------------------\n\nfunction isValid(\n board: Board,\n shape: number[][],\n px: number,\n py: number\n): boolean {\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const col = px + c;\n const row = py + r;\n if (col < 0 || col >= COLS) return false;\n if (row >= ROWS) return false;\n if (row >= 0 && board[row][col] !== null) return false;\n }\n }\n return true;\n}\n\n// ---------------------------------------------------------------------------\n// Ghost piece (drop preview)\n// ---------------------------------------------------------------------------\n\nfunction ghostY(board: Board, piece: Piece): number {\n let gy = piece.y;\n while (isValid(board, piece.shape, piece.x, gy + 1)) gy++;\n return gy;\n}\n\n// ---------------------------------------------------------------------------\n// Wall-kick offsets to try when rotating\n// ---------------------------------------------------------------------------\n\nconst KICK_OFFSETS = [0, -1, 1, -2, 2];\n\n// ---------------------------------------------------------------------------\n// Drawing helpers\n// ---------------------------------------------------------------------------\n\nfunction drawBlock(\n ctx: CanvasRenderingContext2D,\n col: number,\n row: number,\n color: string,\n size: number = BLOCK\n): void {\n const x = col * size;\n const y = row * size;\n\n // Base fill\n ctx.fillStyle = color;\n ctx.fillRect(x + 1, y + 1, size - 2, size - 2);\n\n // Top / left highlight\n ctx.fillStyle = \"rgba(255,255,255,0.28)\";\n ctx.fillRect(x + 1, y + 1, size - 2, 4);\n ctx.fillRect(x + 1, y + 1, 4, size - 2);\n\n // Bottom / right shadow\n ctx.fillStyle = \"rgba(0,0,0,0.35)\";\n ctx.fillRect(x + 1, y + size - 5, size - 2, 4);\n ctx.fillRect(x + size - 5, y + 1, 4, size - 2);\n}\n\nfunction drawBlockAt(\n ctx: CanvasRenderingContext2D,\n px: number, // pixel x\n py: number, // pixel y\n color: string,\n size: number\n): void {\n ctx.fillStyle = color;\n ctx.fillRect(px + 1, py + 1, size - 2, size - 2);\n ctx.fillStyle = \"rgba(255,255,255,0.28)\";\n ctx.fillRect(px + 1, py + 1, size - 2, 4);\n ctx.fillRect(px + 1, py + 1, 4, size - 2);\n ctx.fillStyle = \"rgba(0,0,0,0.35)\";\n ctx.fillRect(px + 1, py + size - 5, size - 2, 4);\n ctx.fillRect(px + size - 4, py + 1, 4, size - 2);\n}\n\n// ---------------------------------------------------------------------------\n// TetrisGame – orchestrates everything\n// ---------------------------------------------------------------------------\n\nclass TetrisGame {\n // ---- DOM refs ----\n private boardCanvas: HTMLCanvasElement;\n private boardCtx: CanvasRenderingContext2D;\n private previewCanvas: HTMLCanvasElement;\n private previewCtx: CanvasRenderingContext2D;\n private scoreEl: HTMLElement;\n private levelEl: HTMLElement;\n private linesEl: HTMLElement;\n private overlayEl: HTMLElement;\n private overlayTitleEl: HTMLElement;\n private overlayScoreEl: HTMLElement;\n private restartBtn: HTMLElement;\n\n // ---- Game state ----\n private board!: Board;\n private current!: Piece;\n private nextId!: PieceId;\n private bag!: PieceBag;\n private score!: number;\n private level!: number;\n private lines!: number;\n private dead!: boolean;\n private paused!: boolean;\n\n // ---- Timing ----\n private lastTimestamp = 0;\n private dropAccum = 0;\n private interval!: number;\n\n // ---- Soft drop state ----\n private softDropping = false;\n\n constructor() {\n this.boardCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n this.boardCtx = this.boardCanvas.getContext(\"2d\")!;\n this.previewCanvas = document.getElementById(\"preview\") as HTMLCanvasElement;\n this.previewCtx = this.previewCanvas.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.overlayEl = document.getElementById(\"overlay\")!;\n this.overlayTitleEl = document.getElementById(\"overlay-title\")!;\n this.overlayScoreEl = document.getElementById(\"overlay-score\")!;\n this.restartBtn = document.getElementById(\"restart-btn\")!;\n\n this.restartBtn.addEventListener(\"click\", () => this.restart());\n document.addEventListener(\"keydown\", (e) => this.handleKey(e));\n document.addEventListener(\"keyup\", (e) => {\n if (e.key === \"ArrowDown\") this.softDropping = false;\n });\n\n this.initState();\n requestAnimationFrame((t) => this.loop(t));\n }\n\n // ---- Initialise / reset ----\n\n private initState(): void {\n this.board = emptyBoard();\n this.bag = new PieceBag();\n this.nextId = this.bag.draw();\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.dead = false;\n this.paused = false;\n this.dropAccum = 0;\n this.interval = dropInterval(1);\n this.softDropping = false;\n this.spawnNext();\n this.updateHUD();\n }\n\n private restart(): void {\n this.overlayEl.style.display = \"none\";\n this.initState();\n }\n\n // ---- Piece management ----\n\n private spawnNext(): void {\n this.current = spawnPiece(this.nextId);\n this.nextId = this.bag.draw();\n if (!isValid(this.board, this.current.shape, this.current.x, this.current.y)) {\n this.dead = true;\n this.showGameOver();\n }\n }\n\n private lockCurrent(): void {\n const { id, shape, x, y } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n const row = y + r;\n if (row >= 0) this.board[row][x + c] = id;\n }\n }\n }\n this.clearLines();\n this.spawnNext();\n }\n\n // ---- Line clearing ----\n\n private clearLines(): void {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; ) {\n if (this.board[r].every((c) => c !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(new Array<Cell>(COLS).fill(null));\n cleared++;\n // same row index now contains the row that was above – check it again\n } else {\n r--;\n }\n }\n if (cleared > 0) {\n this.lines += cleared;\n this.score += LINE_POINTS[Math.min(cleared, 4)] * this.level;\n const newLevel = Math.floor(this.lines / 10) + 1;\n if (newLevel !== this.level) {\n this.level = newLevel;\n this.interval = dropInterval(this.level);\n }\n this.updateHUD();\n }\n }\n\n // ---- Movement & rotation ----\n\n private tryMove(dx: number, dy: number): boolean {\n const nx = this.current.x + dx;\n const ny = this.current.y + dy;\n if (isValid(this.board, this.current.shape, nx, ny)) {\n this.current.x = nx;\n this.current.y = ny;\n return true;\n }\n return false;\n }\n\n private tryRotateCW(): void {\n if (this.current.id === \"O\") return;\n const rotated = rotateCW(this.current.shape);\n for (const kick of KICK_OFFSETS) {\n if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) {\n this.current.shape = rotated;\n this.current.x += kick;\n return;\n }\n }\n }\n\n private tryRotateCCW(): void {\n if (this.current.id === \"O\") return;\n const rotated = rotateCCW(this.current.shape);\n for (const kick of KICK_OFFSETS) {\n if (isValid(this.board, rotated, this.current.x + kick, this.current.y)) {\n this.current.shape = rotated;\n this.current.x += kick;\n return;\n }\n }\n }\n\n private hardDrop(): void {\n while (this.tryMove(0, 1)) { /* keep going */ }\n this.lockCurrent();\n this.dropAccum = 0;\n }\n\n // ---- Input ----\n\n private handleKey(e: KeyboardEvent): void {\n if (this.dead) {\n if (e.key === \"Enter\" || e.key === \" \" || e.key === \"r\" || e.key === \"R\") {\n this.restart();\n }\n return;\n }\n\n if (e.key === \"p\" || e.key === \"P\") {\n this.paused = !this.paused;\n return;\n }\n\n if (this.paused) return;\n\n switch (e.key) {\n case \"ArrowLeft\":\n this.tryMove(-1, 0);\n e.preventDefault();\n break;\n case \"ArrowRight\":\n this.tryMove(1, 0);\n e.preventDefault();\n break;\n case \"ArrowDown\":\n this.softDropping = true;\n this.tryMove(0, 1);\n this.dropAccum = 0;\n e.preventDefault();\n break;\n case \"ArrowUp\":\n this.tryRotateCW();\n e.preventDefault();\n break;\n case \"z\":\n case \"Z\":\n this.tryRotateCCW();\n break;\n case \" \":\n this.hardDrop();\n e.preventDefault();\n break;\n }\n }\n\n // ---- HUD ----\n\n private updateHUD(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n private showGameOver(): void {\n this.overlayTitleEl.textContent = \"GAME OVER\";\n this.overlayScoreEl.textContent = `Final Score: ${this.score.toLocaleString()}`;\n this.overlayEl.style.display = \"flex\";\n }\n\n // ---- Game loop ----\n\n private loop(timestamp: number): void {\n const delta = timestamp - this.lastTimestamp;\n this.lastTimestamp = timestamp;\n\n if (!this.dead && !this.paused) {\n const effectiveInterval =\n this.softDropping\n ? Math.min(50, this.interval / 8)\n : this.interval;\n\n this.dropAccum += delta;\n if (this.dropAccum >= effectiveInterval) {\n this.dropAccum = 0;\n if (!this.tryMove(0, 1)) {\n this.lockCurrent();\n }\n }\n }\n\n this.render();\n requestAnimationFrame((t) => this.loop(t));\n }\n\n // ---- Rendering ----\n\n private render(): void {\n this.renderBoard();\n this.renderPreview();\n }\n\n private renderBoard(): void {\n const ctx = this.boardCtx;\n const W = COLS * BLOCK;\n const H = ROWS * BLOCK;\n\n // Background\n ctx.fillStyle = \"#16213e\";\n ctx.fillRect(0, 0, W, H);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n ctx.lineWidth = 0.5;\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * BLOCK);\n ctx.lineTo(W, r * BLOCK);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * BLOCK, 0);\n ctx.lineTo(c * BLOCK, H);\n ctx.stroke();\n }\n\n // Placed blocks\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n const cell = this.board[r][c];\n if (cell) drawBlock(ctx, c, r, PIECE_COLOR[cell]);\n }\n }\n\n if (!this.dead) {\n // Ghost piece\n const gy = ghostY(this.board, this.current);\n if (gy !== this.current.y) {\n const { shape, x } = this.current;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const row = gy + r;\n const col = x + c;\n if (row >= 0 && row < ROWS) {\n ctx.fillStyle = \"rgba(255,255,255,0.13)\";\n ctx.fillRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n ctx.strokeStyle = \"rgba(255,255,255,0.25)\";\n ctx.lineWidth = 1;\n ctx.strokeRect(col * BLOCK + 1, row * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n }\n }\n }\n }\n\n // Active piece\n const { id, shape, x, y } = this.current;\n const color = PIECE_COLOR[id];\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const row = y + r;\n const col = x + c;\n if (row >= 0) drawBlock(ctx, col, row, color);\n }\n }\n }\n\n // Pause overlay\n if (this.paused && !this.dead) {\n ctx.fillStyle = \"rgba(0,0,0,0.55)\";\n ctx.fillRect(0, 0, W, H);\n ctx.fillStyle = \"#ffffff\";\n ctx.font = \"bold 28px 'Segoe UI', sans-serif\";\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(\"PAUSED\", W / 2, H / 2);\n }\n }\n\n private renderPreview(): void {\n const ctx = this.previewCtx;\n const canvas = this.previewCanvas;\n const W = canvas.width;\n const H = canvas.height;\n\n ctx.fillStyle = \"#16213e\";\n ctx.fillRect(0, 0, W, H);\n\n const shape = BASE_SHAPE[this.nextId];\n const bsize = 24;\n const offsetX = Math.floor((W - shape[0].length * bsize) / 2);\n const offsetY = Math.floor((H - shape.length * bsize) / 2);\n const color = PIECE_COLOR[this.nextId];\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n drawBlockAt(\n ctx,\n offsetX + c * bsize,\n offsetY + r * bsize,\n color,\n bsize\n );\n }\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Bootstrap\n// ---------------------------------------------------------------------------\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\nTSEOF","description":"Write the complete Tetris TypeScript source file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":228,"cache_read_input_tokens":14398,"cache_creation":{"ephemeral_5m_input_tokens":228,"ephemeral_1h_input_tokens":0},"output_tokens":60,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"8d574f53-bd68-4dc4-aa7d-ee717370e9e8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QKzt9Tia746Udx37JH2eRx","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"1197401b-0259-4a9a-8443-501f1d04977f","timestamp":"2026-04-03T20:50:55.766Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_016tqKd453aDUYcLExZWAURi","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_019niFtJ94UqygWVsRrrnMdV","name":"Bash","input":{"command":"tsc --project tsconfig.json 2>&1","description":"Compile TypeScript to JavaScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":5896,"cache_read_input_tokens":14626,"cache_creation":{"ephemeral_5m_input_tokens":5896,"ephemeral_1h_input_tokens":0},"output_tokens":37,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"f01c36c3-f467-4ef7-8a70-c6b771e7affb"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"Exit code 1\nnode_modules/@types/node/http.d.ts(2176,36): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2180,37): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2184,39): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/web-globals/fetch.d.ts(3,25): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/worker_threads.d.ts(71,34): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?","is_error":true,"tool_use_id":"toolu_019niFtJ94UqygWVsRrrnMdV"}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"176a4495-0a46-41e7-926b-e06ed8efb4f9","timestamp":"2026-04-03T20:51:02.507Z","tool_use_result":"Error: Exit code 1\nnode_modules/@types/node/http.d.ts(2176,36): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2180,37): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/http.d.ts(2184,39): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/web-globals/fetch.d.ts(3,25): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?\nnode_modules/@types/node/worker_threads.d.ts(71,34): error TS2792: Cannot find module 'undici-types'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01BVy7rF359LaE5PJKTw8D4b","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The issue is that @types/node is causing errors. I need to exclude the node_modules from the compilation or specify skipLibCheck, or exclude the @types/node types. Let me update the tsconfig to exclude @types/node and skip lib check.","signature":"EqcDClsIDBgCKkA7e6X+6QH61rBhtgar9uXu4YCQ73VvreWS9vDZnM+QRFnyw5rA20IEFR58S5TTcF9dDh8ESoJFRtPSv+ENcco6MhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxI5clBJZ8d1HCRWFsaDK3V5Sad+0MhrBxJyCIwoBf0S+r4M+3w/CELVI9aJ9nrHF6UdTUllGFwb7gHeWhWNmYWktkCjuYhiGUM35PrKvkBiV4ysbOQWz8BMj2pfSh22N0D812qenBzh2HjDR0AWQ6O2cQ3AYLMpm2hS+o4iUIisFxGFSgha8/dSM9xQPyPCCT6efNmhpwQJ50nS2sc3o8QrkY00oV8imz/0x8ItqyKaE2O2/qqkXheAzsrWEFksTpv8AYqsHeTS6SPzoDklH1PRvwz4a1HGF7VGJp7w40KZiZh4avR58bsIg/gO2AOljc/biGfeke0HtGjrMEA3sbnnbcOIUvseGh8y4bFr4duv0Vob2wKNkMl/ckI+TjZ9wnu++KhVOaqF9sh80iybcljzNCDCBO0c6msO081J+4bDTRNaSyprud0GAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":453,"cache_read_input_tokens":20522,"cache_creation":{"ephemeral_5m_input_tokens":453,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"5356e7d7-c853-45f4-9e65-ea31a496fde3"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01BVy7rF359LaE5PJKTw8D4b","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01T7nqTMJkUuXAR35G3adsZL","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-4l5hn4ys/tsconfig.json","old_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"outFile\": \"tetris-compiled.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true\n },\n \"include\": [\"tetris.ts\"]\n}","new_string":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"outFile\": \"tetris-compiled.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true,\n \"skipLibCheck\": true,\n \"types\": []\n },\n \"include\": [\"tetris.ts\"]\n}"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":453,"cache_read_input_tokens":20522,"cache_creation":{"ephemeral_5m_input_tokens":453,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"a91fec11-fb14-4350-90cc-39416077df43"} -{"type":"user","message":{"role":"user","content":[{"type":"tool_result","content":"<tool_use_error>File has not been read yet. Read it first before writing to it.</tool_use_error>","is_error":true,"tool_use_id":"toolu_01T7nqTMJkUuXAR35G3adsZL"}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"33489bec-03b7-4c17-9291-c6b22bf44714","timestamp":"2026-04-03T20:51:11.443Z","tool_use_result":"Error: File has not been read yet. Read it first before writing to it."} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FRw8ccAU8q9UJo75yLXfFx","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GDrpDaAgpCxxg2WZCGBkA8","name":"Read","input":{"file_path":"/tmp/loop-bench-4l5hn4ys/tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":449,"cache_read_input_tokens":20975,"cache_creation":{"ephemeral_5m_input_tokens":449,"ephemeral_1h_input_tokens":0},"output_tokens":63,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"aee09287-b80d-49e4-867c-ecf39bc3f16c"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GDrpDaAgpCxxg2WZCGBkA8","type":"tool_result","content":"1\t{\n2\t \"compilerOptions\": {\n3\t \"target\": \"ES2017\",\n4\t \"module\": \"None\",\n5\t \"lib\": [\"ES2017\", \"DOM\"],\n6\t \"strict\": true,\n7\t \"outFile\": \"tetris-compiled.js\",\n8\t \"removeComments\": false,\n9\t \"noEmitOnError\": true\n10\t },\n11\t \"include\": [\"tetris.ts\"]\n12\t}\n13\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"0d5b4372-36f7-4210-8a74-1cd944bf6b25","timestamp":"2026-04-03T20:51:16.297Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-4l5hn4ys/tsconfig.json","content":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"outFile\": \"tetris-compiled.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true\n },\n \"include\": [\"tetris.ts\"]\n}\n","numLines":13,"startLine":1,"totalLines":13}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01QAvbrmQB7NrN6EkShxjMr7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MwWTBx5SgtSGGP83kHaSeR","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-4l5hn4ys/tsconfig.json","old_string":" \"noEmitOnError\": true\n },","new_string":" \"noEmitOnError\": true,\n \"skipLibCheck\": true,\n \"types\": []\n },"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":287,"cache_read_input_tokens":21424,"cache_creation":{"ephemeral_5m_input_tokens":287,"ephemeral_1h_input_tokens":0},"output_tokens":56,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"a11fb78f-7f2e-467b-909e-e9616a73e232"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MwWTBx5SgtSGGP83kHaSeR","type":"tool_result","content":"The file /tmp/loop-bench-4l5hn4ys/tsconfig.json has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"2181b982-36e3-40aa-8f92-948a98b95622","timestamp":"2026-04-03T20:51:26.567Z","tool_use_result":{"filePath":"/tmp/loop-bench-4l5hn4ys/tsconfig.json","oldString":" \"noEmitOnError\": true\n },","newString":" \"noEmitOnError\": true,\n \"skipLibCheck\": true,\n \"types\": []\n },","originalFile":"{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"strict\": true,\n \"outFile\": \"tetris-compiled.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true\n },\n \"include\": [\"tetris.ts\"]\n}\n","structuredPatch":[{"oldStart":6,"oldLines":7,"newStart":6,"newLines":9,"lines":[" \"strict\": true,"," \"outFile\": \"tetris-compiled.js\","," \"removeComments\": false,","- \"noEmitOnError\": true","+ \"noEmitOnError\": true,","+ \"skipLibCheck\": true,","+ \"types\": []"," },"," \"include\": [\"tetris.ts\"]"," }"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MwQJfHmCoY9ZmHAPo8MuzC","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JkbBCvyvNiVbEZhxRbQR2x","name":"Bash","input":{"command":"tsc --project tsconfig.json 2>&1","description":"Compile TypeScript again with skipLibCheck"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":205,"cache_read_input_tokens":21711,"cache_creation":{"ephemeral_5m_input_tokens":205,"ephemeral_1h_input_tokens":0},"output_tokens":66,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","uuid":"9f78135a-8622-48b9-9b71-f852b7bef93d"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":296031,"duration_api_ms":290119,"is_error":true,"num_turns":11,"stop_reason":"tool_use","session_id":"a5dd4e22-44b9-47a4-b2b5-62cb845627eb","total_cost_usd":0.5047071000000001,"usage":{"input_tokens":14,"cache_creation_input_tokens":29657,"cache_read_input_tokens":122721,"output_tokens":23185,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":29657},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":15,"outputTokens":23290,"cacheReadInputTokens":144432,"cacheCreationInputTokens":29862,"webSearchRequests":0,"costUSD":0.5047071000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"3bf1b9ef-9166-44d1-baca-2644c49cb4d9","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":478848,"duration_api_ms":99886,"is_error":true,"num_turns":4,"stop_reason":"tool_use","session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","total_cost_usd":0.67067685,"usage":{"input_tokens":5,"cache_creation_input_tokens":7461,"cache_read_input_tokens":11192,"output_tokens":8715,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":7461},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":42487,"cacheReadInputTokens":17917,"cacheCreationInputTokens":7461,"webSearchRequests":0,"costUSD":0.67067685,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"eccea1b2-06fd-4057-a315-48deeb9b9716","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,133 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "tsc --noEmit failed" - } - ], - "score": 0.5 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 3 - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 3, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 15, - "tool_calls": { - "total": 4, - "bash": 3, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 3, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0, - "error": "Gameplay bot timed out after 180 seconds" - }, - "score": 0.566 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 4, - "failed": 12, - "score": 0.25 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 23 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "detailed", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:46:29.796252+00:00", - "wall_time_seconds": 479, - "exit_code": 1, - "completed_at": "2026-04-03T20:54:35.253518+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=detailed_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,15 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "detailed"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a fully playable Tetris game that runs in a web browser. The game should be implemented as a single-page application with no external runtime dependencies (no CDN links, no package imports at runtime). All code should work by opening an HTML file directly in a browser or serving it from a simple static file server.\n\n## Game Board\n\n- The playing field is a grid of 10 columns by 20 rows.\n- The grid should be visually distinct with cell borders or a background pattern so the player can gauge positions.\n- Occupied cells should be colored according to their piece type.\n\n## Pieces (Tetrominoes)\n\nImplement all 7 standard Tetris pieces:\n\n- **I** (4 in a row, cyan)\n- **O** (2x2 square, yellow)\n- **T** (T-shape, purple)\n- **S** (S-skew, green)\n- **Z** (Z-skew, red)\n- **J** (J-shape, blue)\n- **L** (L-shape, orange)\n\nEach piece should spawn at the top center of the board. Use a random bag system or simple random selection for piece order.\n\n## Controls\n\n- **Left arrow**: move piece left\n- **Right arrow**: move piece right\n- **Down arrow**: soft drop (move piece down faster)\n- **Up arrow**: rotate piece clockwise\n- **Z key**: rotate piece counter-clockwise\n- **Space bar**: hard drop (instantly drop piece to the lowest valid position)\n\n## Rotation\n\n- Pieces rotate clockwise (up arrow) and counter-clockwise (Z key).\n- The O piece does not rotate.\n- Rotation should fail gracefully: if the rotated position would overlap with existing blocks or the walls, the rotation should not occur. A basic wall-kick system (trying one or two offset positions) is acceptable but not required.\n\n## Line Clearing\n\n- When an entire row is filled with blocks, that row is cleared and all rows above it shift down.\n- Multiple rows can be cleared simultaneously.\n\n## Scoring\n\nPoints are awarded based on the number of lines cleared at once, multiplied by the current level:\n\n| Lines Cleared | Base Points |\n|---|---|\n| 1 (Single) | 100 |\n| 2 (Double) | 300 |\n| 3 (Triple) | 500 |\n| 4 (Tetris) | 800 |\n\nThe formula is: `score += base_points * level`\n\n## Levels and Speed\n\n- The game starts at level 1.\n- The level increases by 1 for every 10 lines cleared.\n- The drop speed (how often the current piece automatically moves down one row) should increase with each level. A reasonable starting interval is around 800ms at level 1, decreasing as the level increases. The piece should never stop dropping entirely.\n\n## Display\n\nThe game screen must show:\n\n- The playing field with the current piece and all placed blocks.\n- **Score**: the current score, updated in real time.\n- **Level**: the current level.\n- **Lines**: the total number of lines cleared.\n- **Next piece**: a preview of the next piece that will appear.\n\n## Game Over\n\n- The game ends when a new piece cannot be placed at its spawn position because existing blocks are in the way.\n- When the game ends, display a \"Game Over\" message along with the final score.\n- Provide a way to restart the game (a button or pressing a key).\n\n## Visual Quality\n\n- The game should look clean and polished, not like a raw prototype.\n- Use a reasonable color palette for the pieces (the colors listed above or similar).\n- Center the game on the page with a neutral background.\n- The game area and side panels (score, next piece) should be clearly laid out.\n\n## Technical Constraints\n\n- No build step required. The game should run by opening an HTML file in a modern browser.\n- No external libraries or frameworks at runtime.\n- The code should be organized and readable.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-ybuwdjed","session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"0dfd1553-a8ec-46d9-9671-e7655fdfa251","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01K15Sn1zrXhejZ6QKv4X6YX","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a fully playable Tetris game implemented as a single HTML file with TypeScript. Since TypeScript needs to be compiled, but the requirement says \"no build step required\" and \"no external libraries or frameworks at runtime\", I need to think about how to handle this.\n\nThe key constraint is:\n- Use TypeScript\n- No build step required\n- No external libraries at runtime\n- Single HTML file\n\nOne approach is to include the TypeScript code inline in a `<script type=\"text/typescript\">` tag and use a TypeScript compiler that's bundled in the HTML file. But that would be a large payload.\n\n\nActually, the most practical solution is to write the game logic in TypeScript, compile it to JavaScript, and embed the compiled output directly in the HTML file. This way the game runs immediately without any build step or dependencies when opened in a browser. I need to see the next thinking to rewrite it. You've provided the current rewritten thinking and the guidelines, but the \"next thinking\" section appears to be empty. Could you share the next chunk of thinking that needs to be rewritten?","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5596,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5596,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"9e480584-43e9-4d8f-83a3-dab08f4c51f4"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01K15Sn1zrXhejZ6QKv4X6YX","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_014kBqWw2K6tRnESzXogj3gU","name":"Bash","input":{"command":"which tsc && tsc --version 2>/dev/null || echo \"TypeScript not found\"","description":"Check if TypeScript compiler is available"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5596,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5596,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"7bd9c271-97ec-4b98-9303-3578cfe84e9a"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01K15Sn1zrXhejZ6QKv4X6YX","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01C5divLJBm9YAAY9myh9jo5","name":"Bash","input":{"command":"ls /tmp/loop-bench-ybuwdjed/","description":"List working directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":5596,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":5596,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"06529d5a-ae72-4c15-be5a-7d7ec0b7c0cb"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_014kBqWw2K6tRnESzXogj3gU","type":"tool_result","content":"/usr/bin/tsc\nVersion 5.9.3","is_error":false}]},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"ce62c38c-fdbc-4fa6-b993-e271e4c07b4f","timestamp":"2026-04-03T20:46:47.870Z","tool_use_result":{"stdout":"/usr/bin/tsc\nVersion 5.9.3","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01C5divLJBm9YAAY9myh9jo5","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"28dd3b0b-cbdc-4e01-aa2c-e3df168ef1f5","timestamp":"2026-04-03T20:46:47.878Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MsJVpSsLnfdyCzNsprKERw","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VXjSmVRki6k4UHD4Y3EH1Y","name":"Read","input":{"file_path":"/tmp/loop-bench-ybuwdjed/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":736,"cache_read_input_tokens":5596,"cache_creation":{"ephemeral_5m_input_tokens":736,"ephemeral_1h_input_tokens":0},"output_tokens":52,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"d1e3023b-05b7-4410-9275-c270ef7d4899"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VXjSmVRki6k4UHD4Y3EH1Y","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-ybuwdjed\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"f509bed5-c121-41ba-8349-a18e56c33601","timestamp":"2026-04-03T20:46:49.759Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-ybuwdjed/package.json","content":"{\n \"name\": \"loop-bench-ybuwdjed\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01V7JGHqQZQvgpjpuLNGNsPq","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good, TypeScript is available. Now let me write the Tetris game. I'll:\n\n1. Write a `tetris.ts` file with the full TypeScript implementation\n2. Create a `tsconfig.json` for compilation settings\n3. Compile it to JavaScript\n4. Create the final `index.html` with embedded compiled JavaScript\n\nLet me write the full TypeScript implementation for Tetris:\n\nKey components:\n- Game state management\n- Tetromino definitions (I, O, T, S, Z, J, L)\n- Board rendering with Canvas API\n\n\n- Input handling\n- Line clearing logic\n- Scoring system\n- Level/speed progression\n- Next piece preview\n- Game over handling\n\nI'll use the HTML5 Canvas API for rendering. The board will be 10 columns by 20 rows with 30px cells, making it 300×600px, plus a side panel around 160px wide for displaying score, level, lines cleared, and the next piece preview.\n\nWriting the TypeScript implementation... Defining the tetromino shapes... Defining the rotation states for the remaining Tetris pieces...\n\nI'm reconsidering the approach—instead of using 3x3 matrices for each rotation, I should define each piece's rotations as arrays of coordinate offsets from a pivot point, which would be simpler and more flexible for the game logic. Defining piece rotations as grids...\n\nI'm settling on a straightforward 2D array representation for each rotation state. For spawn positions, I need to center pieces appropriately on a 10-column board—the I piece starts at column 3 to occupy columns 3-6, while standard 3-wide pieces also start at column 3, and the O piece at column 4 for its 2-wide span.\n\nWriting Tetris game logic... Defining the tetromino shapes... I'm outlining the core architecture for the game—I need to manage the board state, handle piece movement and rotation, detect collisions, clear completed lines, and track scoring. Now I'm writing the full TypeScript implementation with type definitions and the game logic...\n\nDefining the piece types and their colors... Defining the tetromino rotation states... Setting up the scoring system and game speed mechanics, then initializing the core game state variables like the board, current piece, score tracking, and game loop timer. I'm also defining helper functions to create the board and retrieve piece shapes based on rotation.\n\nStill writing game logic... Writing game logic... I'm handling the rotation logic with wall kicks—if the O piece can't rotate, I skip it, otherwise I calculate the new rotation state and try shifting the piece left or right to find a valid position. Then for the hard drop, I'm moving the piece down as far as possible before locking it in place.\n\nNow I'm implementing the core game mechanics: when a piece locks, I place it on the board, clear any completed lines, update the score, spawn the next piece from the bag, and check if the game is over. The soft drop moves the piece down one row if possible, otherwise locks it. I'm also calculating the ghost piece's final Y position by simulating the drop without actually moving the piece, and starting to set up the game initialization.\n\nSetting up the rendering system... Writing the grid rendering... Still writing the rendering logic... Writing the piece preview... Still writing game loop... Writing input handlers...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1129,"cache_read_input_tokens":5596,"cache_creation":{"ephemeral_5m_input_tokens":1129,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"b4481b0c-2909-46b4-8f49-63d7d0fb35cd"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LRkW48scbx8yUXqXbK2RsL","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good. TypeScript 5.9.3 is available. Now I'll write the TypeScript source file and compile it, then embed the result in an HTML file.\n\nLet me plan the Tetris game implementation:\n\n1. **Board**: 10x20 grid\n2. **Pieces**: 7 tetrominoes (I, O, T, S, Z, J, L)\n3. **Controls**: Arrow keys, Z, Space\n4. **Rotation**: Clockwise (Up), Counter-clockwise (Z), with basic wall kick\n\n\n5. **Line clearing**: Score, level, speed\n6. **Display**: Canvas-based or HTML/CSS grid\n\nI'll use HTML Canvas for rendering as it gives the most control over visuals. Now I'm writing the TypeScript code to define the game types, constants, and core game logic...\n\nWriting game implementation... Writing the complete Tetris implementation... Defining the piece shapes... Defining the rotation states for the remaining Tetris pieces...\n\nNow I'm setting up the game mechanics—establishing the scoring system where clearing lines awards points based on how many lines are cleared at once, then creating a function that calculates the drop speed based on the current level, getting faster as the player progresses. I'm building out the main TetrisGame class with properties to track the board state, active and next pieces, score, level, lines cleared, and game status flags.\n\nSetting up canvas and UI elements... I'm getting the next piece from the bag, which cycles through a shuffled set of piece types. Then I'm creating a new piece by looking up its shape and color, centering it horizontally at the top of the board. Now I'm resetting the game state—clearing the board, resetting the score and level, initializing the piece bag, and setting up the drop timing...\n\nStill writing initialization code... Writing game logic... Writing game mechanics... Still writing the game logic... Writing the rendering logic... Drawing the grid lines and board cells... Writing the rendering logic...\n\nNow I'm setting up the input handler to capture keyboard events for piece movement and rotation, with preventDefault calls to avoid default browser behavior. Finishing up the game loop that handles the drop timing based on whether soft drop is active, then drawing the frame and requesting the next animation frame. After that, I'm setting up the initialization to create a new Tetris game when the DOM loads, and now I'm planning out the HTML structure with a centered container and game board layout.\n\nI need to define all the piece rotations carefully using the standard Tetris rotation system, starting with the I piece and its four distinct orientations.\n\nDefining piece rotations... Defining piece rotation matrices... I'm working through the rotation matrices for the S piece in 3x3 format, trying to get all four rotations correct. Let me verify the vertical orientation more carefully to make sure I'm representing it properly.\n\nDefining the Tetris shapes... Defining the rotation states for the remaining Tetris pieces... Verifying the rotation states for each tetromino piece...\n\nNow I'm ready to implement the full system and need to think through the spawn positioning, particularly for the I piece which has different dimensions than the others. I'm working through the spawn position for the I piece specifically—since it's a 4x4 matrix with the actual block in row 1, I need to decide whether to start at y=0 (making it appear one row lower than standard) or y=-1 (placing the top empty rows above the visible board). The cleaner approach is to check if a piece's top row is empty and adjust the spawn y-coordinate accordingly, so the I piece starts at y=-1 while other pieces spawn at y=0.\n\nNow I'm calculating the canvas dimensions: the main board needs 320 pixels wide by 640 pixels tall for a 10×20 grid with 32-pixel cells, and the next piece preview area should be around 160 pixels for a 5×5 preview space.\n\nActually, let me scale that down slightly to 30 pixels per cell, which gives me a 300×600 board and a 150×150 preview area—that feels like a better size overall.\n\nNow I'm planning the full implementation with pause functionality, a game over overlay, and a keyboard guide in the side panel. I'll write out the TypeScript and HTML structure...\n\nWriting the HTML layout... Writing the TypeScript implementation... Defining the piece colors and rotation shapes... Defining the rotation states for the remaining Tetris pieces... Setting up the canvas elements and DOM references... Writing the game initialization... Writing game logic... Writing game mechanics... Still writing the game logic... Writing the cell rendering... Drawing the grid lines and rendering locked cells...\n\nNow I'm handling the active game piece and its ghost preview—calculating where the piece would land if dropped, then drawing both the semi-transparent ghost piece and the fully opaque current piece at its actual position.\n\nDrawing the next piece preview...\n\nNow I'm setting up the keyboard input handler to detect arrow keys for movement and rotation, allowing key repeat for directional controls while preventing it for other actions. Setting up event listeners for the keyup event to disable soft drop, and attaching click handlers to the restart and pause buttons. Then I'm implementing the pause toggle logic that prevents pausing when the game is over, and the main game loop that calculates drop intervals based on whether soft drop is active.\n\nNow I'm thinking through some edge cases—key repeat behavior for movement versus rotation, how the ghost piece should render at the landing position, and the line clearing logic where I need to recheck rows after removing them. I'm noticing a potential bug in the clearLines implementation.\n\nWhen I splice a row from the bottom up, the rows above shift down, so I need to recheck the same index rather than moving forward. Since I'm iterating from bottom to top, incrementing r after a splice keeps me at the right position for the next iteration. After splicing row r, what was row r-1 (above) now becomes row r. But since I'm going from bottom to top (decrementing r), after the r++ the for loop will do r-- bringing r back to the same value. So if I was at r=15 and cleared it, after r++ I'm at r=16, then the for loop decrements to r=15 again, and checks what was originally row 14. That's correct - I recheck the same index.\n\nActually wait: `splice(r, 1)` removes the row at index r. Then `unshift()` adds a new empty row at index 0. So what was at index r-1 is now at index r (shifted down by the splice, then shifted right by the unshift... wait no, splice removes from index r so rows 0..r-1 stay at 0..r-1, rows r+1..end shift to r..end-1. Then unshift adds at the beginning: what was at 0 is now at 1, ..., what was at r-1 is now at r. So yes, the new row r is what was at r-1. To recheck it, r++ and then the for loop decrements r back, so r stays the same. ✓\n\nThe loop iteration goes: r=15, splice and unshift, increment r to 16, then the for loop decrements back to r=15, which is now what was originally row 14. That's the correct behavior! But I'm realizing there might be a subtle issue after the splice and unshift operations... So the loop correctly rechecks the row that was originally at r-1 by revisiting index r after the splice and unshift operations. The game over condition triggers when a new piece can't fit at its spawn position, and scoring multiplies the cleared line count (capped at 4) by the current level.\n\nFor speed, I'm starting at 800ms and decreasing by 75ms per level with a floor of 100ms, which gives reasonable progression. Soft dropping speeds things up to 50ms or less, and I need to verify the I piece spawn position calculation with the board width.\n\nNow I'm thinking through the visual design—I want a polished dark theme with slate and gray tones for the background and board, bright white text for the score and stats, and clean monospace fonts for the numbers.\n\nWriting the TypeScript implementation... Defining the piece shapes... Defining the tetromino rotations and game mechanics... I'm setting up the DOM element references in the constructor, grabbing the canvas contexts and UI elements I'll need to display the game board, next piece preview, and stats like score and level.\n\nNow I'm binding keyboard controls and attaching a click handler to the restart button, then kicking off the initial game start. The start method initializes the game state—creating an empty board, resetting the score and level, clearing any paused or game-over states, and hiding the overlay elements.\n\nSetting up the next piece, spawning the active tetromino, and refreshing the display. Then I'm canceling any previous animation frame and starting a new game loop with requestAnimationFrame.\n\nThe spawn method pulls the next piece into play and generates a fresh one from the bag. If the new piece can't be placed in its starting position, the game ends and I display the final score.\n\nNow I'm working on the piece bag system... Now I'm implementing a collision detection system that checks whether a piece can occupy a given position and rotation by iterating through its shape and verifying each block doesn't exceed board boundaries or collide with existing pieces. Then I'm starting to define the movement methods, beginning with the left movement handler.\n\nWriting movement logic... Writing the lock and clear logic... Writing input handling... Finishing the pause toggle by updating the display, then moving into the rendering logic—I need to refresh the UI elements showing score, level, and lines, calculate where the ghost piece should appear, and set up the cell drawing function that handles positioning and coloring individual blocks on the canvas.\n\nDrawing each cell with a base color, then layering highlights on the top and left edges with semi-transparent white, and shadows on the bottom and right edges to create a 3D beveled effect.\n\nNow I'm setting up the render method to draw the game board—filling it with a dark background, then adding a subtle grid overlay with very faint lines to define the cell boundaries.\n\nDrawing the locked cells from the board state, then handling the active piece by calculating its ghost position and rendering both the semi-transparent preview and the actual falling piece.\n\nNow I'm setting up the next piece preview panel with its own canvas context, clearing it with a dark background, and positioning the next tetromino shape centered within the preview grid.\n\nI've got the core game logic working, so now I'm moving on to build out the HTML structure and styling—I need a centered layout with the main game board on the left and a side panel showing game info and the next piece preview on the right.\n\nWriting the HTML and CSS... Building the game interface... Still writing styles... Still writing styles... Finishing up the styling for the keys table, then I'm ready to assemble everything together. The canvas dimensions check out—with a 5x5 grid and 30-pixel cells, that's 150 pixels for the next piece preview, which is correct. Now I need to create the TypeScript source file, configure the build, and generate the final HTML with the compiled JavaScript. I'm working through the positioning math for how pieces display in the preview grid—the O piece centers nicely at (1,1), but the I piece with its 4x1 bar needs careful handling since it spans most of the 5x5 preview area. For the T, S, Z, J, and L pieces which all use 3x3 matrices, the offset calculation centers them at position (1,1) in the preview, which looks right. Now I'm ready to start writing the code, though I should simplify the SHAPES type definition to just use `number[][][]` instead of the verbose readonly array syntax since strict immutability isn't critical here. I also need to make sure my validation logic correctly handles pieces that spawn partially above the board by treating cells with negative y-coordinates as valid during the spawn phase. The overlap detection will catch that and end the game properly. Now I'm ready to write out the actual implementation files—I'll create the TypeScript source, configuration, and final HTML deliverable with embedded compiled JavaScript. I'm going to use `requestAnimationFrame` for the game loop since it handles performance better than `setInterval`, and I'll implement proper keyboard handling with delayed auto-shift so arrow keys feel responsive without being too twitchy.\n\nImplementing DAS input handling... Setting up keyboard event handlers...\n\nI'm going to keep this straightforward—just bind keydown events to move pieces immediately on first press, and let the browser's native key repeat handle continuous movement. This is simple enough for a basic Tetris implementation. Now I'll write out the complete TypeScript and HTML files to get this working.\n\nDefining the core types and constants... Defining the rotation matrices for each tetromino piece... Defining the Tetris game class and setting up the core mechanics like scoring for line clears and calculating drop speed based on difficulty level.\n\nNow I'm initializing all the game state variables—tracking the active piece, the next piece queue, score, level, and lines cleared—along with timing controls for the drop speed and soft drop, plus references to all the DOM elements I'll need for rendering the board and displaying game info.\n\nSetting up the constructor...\n\nNow I'm defining a helper method to grab DOM elements by ID, then initializing a new game which resets the board, clears the piece bag, zeroes out the score and level, hides the game-over and pause overlays, and spawns the first piece.\n\nAfter that, I'm refreshing the UI and starting the game loop with requestAnimationFrame. The spawn method pulls the next piece into play, generates a new one for the queue, and checks if the active piece can be placed—if not, the game ends and displays the final score.\n\nBuilding the piece factory... Writing collision detection... Completing the rotation logic with wall kicks, then implementing the hard drop to instantly place pieces, and finally the lock mechanism that places the active piece on the board and prepares for line clearing... Writing game loop logic...\n\nNow I'm setting up the input handler to capture keyboard events—arrow keys move and rotate the piece, while Enter or Space restarts after game over.\n\nContinuing with input bindings...\n\nNow I'm setting up the rendering pipeline—updating the score, level, and lines display, then calculating where the ghost piece should appear by checking how far down the active piece can move. I'm also defining a helper to draw individual cells on the canvas with positioning and opacity control.\n\nDrawing the cells with 3D beveling effects... Still writing the rendering logic... Finishing the preview rendering and initializing the game on page load. I'm noticing an issue with how I'm handling keyboard input for the arrow keys—the repeat behavior isn't quite right since I'm checking `e.repeat` but not managing the timing correctly for continuous movement.\n\nFor soft drop specifically, I need to trigger an immediate drop on the first ArrowDown press by setting the drop timer to the interval value, which will cause the tick function to execute a drop right away. I'm realizing the simplest approach is to just set `softDrop = true` on ArrowDown and let the tick function handle the faster drop rate—the player will perceive the speed increase quickly enough without needing an immediate drop on first press.\n\nFor the hard drop, I should reset the drop timer afterward so the next piece doesn't fall too quickly.\n\nImplementing hard drop logic... I'm settling on resetting `dropTimer` to zero in the `lock()` function so the newly spawned piece gets a full drop interval before falling. When the drop timer reaches the interval threshold and the downward movement fails, the piece locks and the timer resets, giving the next piece a clean slate. Writing the lock method...\n\nNow I'm ready to actually create all the files—the TypeScript source, config, and HTML wrapper. I'll compile everything to JavaScript and embed it in the final HTML file, using ES2020 as the target with the right module configuration for a standalone script. I'm settling on a straightforward TypeScript setup with `module: \"none\"` and `outFile` to compile everything into a single tetris.js file that I'll embed in the HTML. Rather than overthinking the readonly modifiers on the shape arrays, I'll just use plain `number[][]` types since the game logic won't mutate them anyway. Now I'm ready to write out the complete TypeScript implementation.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":6725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"308f924b-992d-4d9e-81d7-2632ab55b0d9"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LRkW48scbx8yUXqXbK2RsL","type":"message","role":"assistant","content":[{"type":"text","text":"Now I have a clear picture of the environment. Let me build the complete Tetris game. I'll write the TypeScript source, compile it, then assemble the final HTML file."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":6725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"52d142b0-2f75-4b60-b2ef-35155f87aa65"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LRkW48scbx8yUXqXbK2RsL","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VHycoygKymaX9LUjZe9ewL","name":"Bash","input":{"command":"cat > /tmp/loop-bench-ybuwdjed/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"none\",\n \"strict\": true,\n \"outFile\": \"tetris.js\",\n \"removeComments\": false,\n \"noEmitOnError\": true\n },\n \"include\": [\"tetris.ts\"]\n}\nEOF","description":"Write tsconfig.json for Tetris compilation"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":6725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","uuid":"7df300e2-138f-4672-b884-5ffcaf063452"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":478848,"duration_api_ms":99886,"is_error":true,"num_turns":4,"stop_reason":"tool_use","session_id":"eb16328b-7657-4de6-bf08-3eeb2ec63de5","total_cost_usd":0.67067685,"usage":{"input_tokens":5,"cache_creation_input_tokens":7461,"cache_read_input_tokens":11192,"output_tokens":8715,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":7461},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":42487,"cacheReadInputTokens":17917,"cacheCreationInputTokens":7461,"webSearchRequests":0,"costUSD":0.67067685,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"eccea1b2-06fd-4057-a315-48deeb9b9716","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":396432,"duration_api_ms":316063,"is_error":true,"num_turns":9,"stop_reason":"tool_use","session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","total_cost_usd":0.58769085,"usage":{"input_tokens":12,"cache_creation_input_tokens":17544,"cache_read_input_tokens":106617,"output_tokens":25088,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":17544},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":13,"outputTokens":32007,"cacheReadInputTokens":128027,"cacheCreationInputTokens":18437,"webSearchRequests":0,"costUSD":0.58769085,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"c9665009-e9bf-4354-887f-4363e2f2c5f1","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,133 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": false, - "detail": "npm run build failed" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "tsc --noEmit failed" - } - ], - "score": 0.5 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 2 - }, - "performance": { - "bundle_size_bytes": 42307, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 8, - "code": 4, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1560, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 33, - "excessive": true - }, - "function_length": { - "count": 68, - "average": 7.0, - "max": 36, - "long_functions": 0 - }, - "max_nesting_depth": 12, - "global_declarations": 18, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 457, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 121, - "source_lines": 1023, - "ratio_pct": 11.8 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 5 - }, - "duplication_percentage": 0.0, - "score": 0.85 - }, - "transcript_analysis": { - "total_events": 27, - "tool_calls": { - "total": 9, - "bash": 7, - "write": 0, - "edit": 1, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 3, - "text_blocks": 3, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0, - "error": "Gameplay bot timed out after 180 seconds" - }, - "score": 0.5285 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,124 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "z", - "drop": "Space" - }, - "start_mechanism": "enter", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via enter" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "game still responding after 10 piece drops" - }, - { - "name": "line_clear", - "pass": true, - "detail": "5 line(s) cleared during AI play" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": false, - "detail": "could not trigger or detect game over" - }, - { - "name": "playable_30s", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - } - ], - "summary": { - "total": 16, - "passed": 12, - "failed": 4, - "score": 0.75 - }, - "gameplay": { - "pieces_placed": 100, - "lines_cleared": 5, - "max_score_observed": 0, - "play_duration_seconds": 0, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 30 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "off", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T21:11:44.998751+00:00", - "wall_time_seconds": 397, - "exit_code": 1, - "completed_at": "2026-04-03T21:18:27.572349+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=off_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,27 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-rcr2cfzb","session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"6738704f-e652-4745-bf21-91908e41e8a6","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01V9SjP9JUooFfTp9CKRsxvh","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me plan out the implementation:\n\n1. **Game Structure:**\n - HTML file with canvas element\n - TypeScript file with game logic\n - CSS for styling\n\n2. **Features to implement:**\n - All 7 Tetris pieces (I, O, T, S, Z, J, L)\n - Piece rotation\n - Line clearing\n - Scoring system\n - Increasing speed\n - Keyboard controls (arrow keys for movement, up arrow/Z for rotation)\n \n3. **Game mechanics:**\n - 10x20 grid board with pieces falling from the top\n - Arrow keys for left/right movement and soft drop, space for hard drop, up arrow or Z for rotation\n - Scoring based on lines cleared with multipliers for multiple lines, and speed increasing with level\n\nI'll need to set up the project files, but since TypeScript requires compilation, I should use a simpler approach like bundling with esbuild or using a CDN to compile TypeScript on the fly. I'm settling on a straightforward project structure with TypeScript source files, a build configuration, and compiled JavaScript that runs in the browser. The user can install dependencies and build the project, then open the HTML file to play. Now I'm defining the core game mechanics—the board dimensions, cell size, and the tetromino pieces that make up the game.\n\nDefining tetromino shapes... Defining the Tetris piece data structures... Setting up the game class... Still writing the game logic... Writing game logic... Implementing the ghost piece logic and movement controls... Writing game logic... Writing the rendering loop... Writing overlay text... Continuing with the next piece rendering logic...\n\nNow I'm finishing the loop that draws each cell of the next piece in the preview canvas, then moving on to update the UI elements with the current score, lines cleared, and level. After that, I'm setting up the game loop that tracks time deltas and manages the piece drop timing.\n\nHandling keyboard input... Setting up event listeners and the game loop to start the game, then defining a restart method that resets all game state variables back to their initial values and kicks off a fresh game. I'm thinking through the core game mechanics now—I want to implement SRS wall kicks for rotation, a ghost piece preview, and DAS (Delayed Auto Shift) so holding arrow keys feels responsive with an initial delay before auto-repeat kicks in. I'm also considering a lock delay to prevent pieces from locking instantly when they land, though I might keep it simple at first and add refinements later. For the project structure, I'll set up proper TypeScript files with a build configuration since that's cleaner than a single-file approach.\n\nNow I'm planning the visual polish—dark theme with distinct piece colors, a clean UI showing the score, and smooth animations throughout. I need to be careful with the drop counter logic, resetting it when pieces land and distinguishing between timer-driven drops and user-initiated ones. For scoring, I'm thinking single lines give 100 points per level, doubles give 300, triples give 500, and a full Tetris gives 800, with soft drops adding 1 point per row and hard drops adding 2 points.\n\nI'll level up every 10 lines cleared and use a speed formula that starts at 1000ms and decreases by 90ms per level to create good difficulty progression. The HTML will have a polished layout with the game title, canvas, and a side panel displaying the next piece preview, current score, level, lines cleared, and control instructions.\n\nI'm also implementing DAS (Delayed Auto Shift) for smoother left and right movement—the piece moves immediately on key press, then after 150ms of holding, it repeats every 50ms. Let me start writing out all the files now.\n\nI'll use a timestamp-based game loop and structure the TypeScript with constants, piece definitions, type definitions, and a TetrisGame class. I'm keeping the implementation focused on core mechanics: wall kicks for rotation, a ghost piece preview, and smooth controls. Lock delay will be simple—pieces lock after 500ms on the ground. Let me build this out completely.\n\nDefining the game constants...\n\nI'm reconsidering the piece representation—I want to keep the shapes compact as minimal 2D arrays rather than padded 4x4 grids. Let me restructure this using a cleaner object-based approach where each tetromino has its shape and color defined together, starting with the standard piece forms.\n\nDefining tetromino data structure...\n\nNow I need to handle rotation using matrix transposition and reversal, plus implement basic wall kick offsets to handle edge cases when pieces rotate near boundaries. After that, I'll work through the complete game implementation, including how the game area adapts when it's wider than the standard width.\n\nFor the layout, I'm setting up a 10×20 cell board at 30 pixels each, giving me a 300×600 pixel play area, with a 160 pixel sidebar for the next piece preview and score display, totaling around 500 pixels wide.\n\nBuilding the HTML structure... Writing the TypeScript game logic...","signature":"EtS1AQpbCAwYAipAUXnYx8tKDwe4x0oGSryYpBgkCBgVcSpVQQ+MHCtTCuiCvQ7HCVroNGVSv/UjyQcdL/cGRD7x9iaa7TKjz17L6jIRY2xhdWRlLXNvbm5ldC00LTY4ABIMNGPPBjBTyji5yK/0GgxxsETwCxY6lzl8oTkiMIg6hE9GfZRUH5Zrv1xiLVqavr7Kaj/itZWZ5F9Sd1ww6IZta63W6qCdpTgPgjp5fSqltAHtDzfTR520++0ExH1Qgtuqav+bUdOvLqbMws+5JnjZ/+O97655PUnU2QFrNSOdCQlRUKNJDIqgB1qSpukJTiCfLqzzfJMqYsQpD4rBhXLWmOWT+OqqkDGXOnk9VLDzuuCtWsjNCJ/qdGOFv0fs3wfPAJhSYm32bO3Ln8i4VcrSqaIdhQgVdDc7tjfx55h15BjSd+QS01pBwcAQaqj9Ufw1Im3BFz+TVef1RsPELv3VW2ujwzq2cmNmbvRvlYAhYSu6b+InTa+p46Nv8YRpWSXjMP6ygvCnhdt3aDrmcNfrDqEBH1o6xeHSJ+fxC9yHdAXmIqsjOomjQBCY/6lcQiaf1Wy1Dg88qJoWYiOJVi/dirmDYPkzBQQdJYCXctcPEwh9/Z2VTsQZdQaL99PrwO/MrQ6JF6NAjMmR5sTl5NUzXuI2hKNQUMIby/7h0/+KjVfs9XqQ+rniA3buUg8TQlUlNuF2jL9R/4JYT731ZTxlvwmEjAmkF3/2aAK1u4NvTku6pOQWpWJV2lkSHsJsR/isioUQCZ3hyXYrmmsHuN0caWSbvRhB23hfiF7DYJX+Y59sgOlj0lywrsrwAA9DJIOnbopjfc9z6a0pjq6wcmGcG9iULdpecEMWyRrgpCPnpqigJYXjFiqxmCvy8JOkmoRZ9L6YynPQn7vPFx79X+jl2I7xe7Wpc20mAll5LPdbkfcvLVmUbmR50kxXdq35j31mfbDvA255E1eVDKq4h8kNlGTXARNZeVtmi19ODA8uqW1ydIrTtl7JSUpw4GhEu13g+qDkiNv7n8I5qcAyxsE73W7A1qcNv27YjJMnp+liGROL5tjSANAkjr0BiWXwlT5DLrLE6EeHGma7hQav7uwMH6VzE4akKv4JlV6czZHbnleKt8ppuINyMHhBNSv2WACRYtG8auYJdHQuTS5KXLk36KEEYO7jy5m9ner1KZ1kCJbIpWY1Gp1TX7Tm9FFMVlqONa+P6WsiUfmUASxpFXA/3DdRZDkLRxy6FrHBgecbhM8lfWefgaurypIV9b5EEC3ceU4gvd+iZxrqQwx5bHtaAZbTh0kLYg0LkLdxsgrn4dUBy7xoLj/TZPqMP1vQX+6BN3pSlPfxwqngrKF6jE8eUaht0hun1LZx4IKRT3J4eT8nFo5nDgp+tcu+614tYeLaTqw0duxXOn0bXFnGsfs+6uAraIdnSeJ6a4ic+s4dCF+Hnr5A1SzSKsKyBNveWxHwECObgdDKCbYJZ2vs7Q4Oj2sNIRJIYCvK0cY4FKphqG36jAjjvbVuX/FCZHoHJof+BbxTAz5Sv9D3F9ftXNh5Qo8Jqm79vmr+CoITpo4FXlEHP/pvxFRCn3Nk9aPOAjDqCfGppyRQaWL6pPTz8BBZWM33uM2/HA4P6vjFQwoNbuoqtCUaA0Ux4htHtqynP+prjDH9SdQIKNVZ0y9Zuj0UEOaHZcwRyGcSCMQSHW6bI31zuyrHGrjWIC4LUdJTZR5JrkYBMUvp5kzh9wDu50jGDLO1IBtn0vJMf8RREH7yQztMIaH0GerFZx2wZh8YTjUr9YVdQu0pDVA5oqwipmJwMabLsQGUhVxoLKu28zYhPt5+AwEsqMck0pHPDnUbgtsSSeYQXm7jQKtws9/LVilA9fSbroDMXZzmsse5kzw5l7rHleg2si1k6KNPKKiPpi/O21NJ0dodt2N9xB46Pf3Muk2QpD3AlTMnNRKeSdMN8JVNCSeKxCfQ5XVu2wtwmJj+9HnJemrOVc8DCe3A0T8zdDJo8qViJnVd0yoXfhF8/5lhNKzwkVSEGx/g2dGQZp6avHJgqWyB6zel8LKd7KwEZlXUlrx115TRfbo2t8ZqPviNMyGBJ314nK1uQyi3FFvN760UUAvtvhlxyXuFuqWGdgVOWkvtXruUmS8l32UYZaV8iLekA89IbSZ1avdrM+LGNN+6KpMUiMMGA4hsbKC8LNimONJISZQPBjobUAiwnQPyh3h7mqqgvd7XXOLGDyfqz2DZi/hBHWK7ND+WTiNe6Ct1yz3lmQ+Wrm+7OsnvqYx0ud6Jon48yhFMNknzv/5N2HaVLIDvL74CTjzulrFbI/xlOfYg4flLLoAMusauuPBOwiXxKGlGEPmJWmAyfmuNOQUeflWh3U3VN4glAkUaGX790rA0acoQFrOln7LBvXSxn2elMajy+1pzTtiyFqH6l7x1e5ljFH2OlBJ4kDVwjzaifjW38lwpCf3jxCUs3j4QD5hVU9KUrQ/7XB1w90APMWSO8BND+TjXZ7z8fNwblTMRuoI8+eo989QST6sG4O5cRTmCuz/xxKzL3RzoqL9k/YzwZrcW1kKBPBg8pr+IuMzBiZPCLNsmBellswQ9Bb0o2Eg6c98msCzftpRRs3NF3ALVWbZ13aQ7L5NiCkHogC54cHIPiuQ4rLQ4m9QCmE1dqIOF3HvGFwt8wvgmtyAy9JNI0jGW53Ck89qHiE6k0rwbutaaO2VF65V2roYoT5R3FRtKiESScwa54Rq1aTB7L28FoI1p8eJmhgpKDS1av7FqePWV0p/gRNtV9xrCxjUcNkyUSwQGROyyTbxD2oL0vKKRd+TXsAvCI6btTBE+q39nijS+HNwNSIl7uPvxtvnpD3tDfVHNmEGD3U+bp2eHmXPxSgO04MZz14KiB2r8okxtJyp1cxy6Otl8dxnZgWRkKNkFquRLc1KS5/iB70sbfXtvJ7SY0GxRRWOeRcrw4+bi/T7UwqWV4RePIpYxTgjh2vFKWRXW0NDiWspltpcKohJBPqkKlJshldLL7Q34YpGj6RAeuXiSoyY1BBExsX8mhVORgt0jk/UHJWnnzSeNI+VH/6ZfViZadRY99F3lbI7ce3lx6GlhX0jlDeuDCDLoy1SNzhsHnbgaWE+56pqI4szalx/6q7BkgVl+cyqp3gcBXp5diHIzgIwmFLMsABHd1yONuK7Pm0fqJUJ4ktwHpiSqcU17gKblkB0x6+gzvjTJjNf8/ovujcx0WG5roitkN2YPx20AAQ117A/gWk7LjKfWnHzWqC3P5hpeSPuab12qPAQhYTpGM3e6wXvnL9Z+r2KyFwv0KirSp3PWImqVtLY9BeIeUgS5+zY7wkJ6zGcjfwmMkotZcAdkgGO9o0hyWmC0C59MI+pGeH+coIRe8xwi1UC+dDbHqDW58HGPVeczFt2fpS5UPGo5nuaeshwcjnCmINS9NAXAF87rY4hKEE7uodATW9+NOieUA7VZL95DevLOsUNr0Upz8EMsNoqOuUR60EA9M+L9qBCTgLgMXkhqmp7S+qc8fSWnJkZ2qACiJz+97Gu2UoOd6jnjOQwW8ZIvXx7df/oUk3lX5heUihUL6lmDvGLAr019P1290NIsxZHCfZbSTSUsupkoogtG5QUiC8saeNCpgRtotK9E2MbsR30q3nYp9IWjQHNW0LKf8Xn9/DcbahJPQifbzqatnG6Ep7vMZyNcIZPPlb2K1iXI2fQ8CLQhrwpBSEe+Ij1KObdLnAJ2IyGc+eD/QrHuIoq55ofVz9JF/uS6j4Wfp6umzZMY46tWLkbzkp5clmBG0WuLNAXQBegtcNP+fq+3YjXKSe3wwwqcOAGRnD/xXFJT01IBvlZUZxhVbSH1YNTSqpGLUUELtgwex2h84wbpMCA+wA1wGMCa+PQcp/HoJIwAhw5D6MK0daP6kPE2mHJIFJg+rCIvxmuhXmhl1tJbBN53gklWWKdjkx/cnT/S89Z3pG7NREMnJh1G6EyJ1CdFpha3++8my7X7I+pWBIkGDSB7xqBCqeQfWOnvM2wW2psZMoArXlqNyFThx+c6k0ZH1xNiDsAhl8/cf6fyEPvqAofdvmqkJcp0qEy67Y59LpHoPWBv6m3RmSh4JTI+ehJBX7giTHb51kwZpcrXOoqHrkdqS0WZpFuvy3W202TFVL1AoV+VzGTCafYHai02cQZ7jL1edApdXmVIvQGBn6K3JGMlCnowYjiqA/Hv7ULib9XCWCB43/8iuQ4HktpuVolQ9qK7wbcKgGgRQWpv93OXJnCLwQaKtljqxkqusoU5xw3cwuPhzfMSygcMm+yEGvT0R1MPKwPOEqgCXfKBJ62PbC4eCrGjMEboVxvK3CXfJrREWGXh2+HFI4LECHD+14gY1NOWe9s/5ySiXkCXAvBg2mbXTnrBfWwqHLrxf0cjTVYqwvfQOxPhCCNbeLwlmX4yBwP1zKFggjaZ2f+d+izy3X4/3IS0Law7dzVPMDrmt4TDJe+GmrgNnCqATvdf44PLplBnb1Fb3IdJ0la+EyPaGZZOTBnc1v2t6gL2lg3jOoJubTroVLGgfAonr/5+0pvIJMhWmJFRm1/CbCl7lgBtk9nbdNWkHXuyMYxPPu3ypVRZeP/1uYj0L41ugl0FVkgezfFFP9Qt+kLSQhe0UcsU257ngPXDYA2XQucxbp1t4Zh9A8NmVnzJkh0rCRTTLncqCXkK+GsJ5im2XJWSG188icsY4AsZvGq4+YivyAb3phfHuHLU4NOvMwobCN4C9IIKPuxmq318ql4iNimebOTJh553+4kdMH6K+Nev47vR66iS/87wo39Ueiqh/SLkUb3g6VKqLMo69lnQo3//yqiSjAvKsB/2rqeXYkhyY5JVcB0grfY6sIAK2BgQfV4S5BFVguEUbbzuQl/HjV7r+ezrUikossfgIX+O/ps72WmLgxnHbA36BfFQLKrxQ4Yj1um3N6jmSyoL04Fm3bZgCL5STREenSrqdBiE3L4OnFLRzmeYLxW1rGkXPScUsmeXb5UFyiwvrjNDutYDtGG/924neN5OG9tJIHtEUDGxJnZyWEySzhnXAq2My3VnW3yP6/Wa5aLctCuPsgdsuh6O0ZHE5elcnZxHv8XVRp5A1T+9Y4QQeESw/vtI84ToJlCpD9GP9D0kzjuD3qMzyT+pWKEGJ5+nrmStU8qh1iOFunSdMEZTvf2AUxzyflsGgjsqPl0KCyRfE4DS5pXRNzlJIqPbJNEgSj7xjBC0KbBQXeVQjH17f2+6tqLl6gNqeLLCmACvARB0Yt92Wz46ZcoddHWKo56/V2B2Wt1qgZ3nasg2OqAO7pjSzOctODYX+XLladxpFKxdA7qpGJDMKQ4BEhbLke+4cJJLgOvw6vcuqrkg4+Ze33e9mXPShneLiSXIT+DfKogqhLzAl9Ywqh8fqvP5XLh5T5516tQAKx+xzAxDBN7mPFaies2ex2/sib8msQ28D9Rq/tjYY23abfh3zy0kdjIjmcKEd0QlbkCWBlnETRSE0I4sXFZL4Tpj6U8Gr9RJg9pomaEBsFiJzBG5pkgY9rxWy6n8jS9clOpgFHbJTxx/CCjsh/T+12Olw/DJP4ydB004ywNgQTJgvyXMlkDttjoPS+IqoyatSbwYeyu2yBiEVZRi5j2WaH5cuiNYLfZ1qBQaV8SbhdXBmuWACkP2hk5ZdFiEvEnoPaMZWSoJb8cQs+tMetui1EjDAtlWe7m1MpGwbaltmVBaK1Zz05ndeNRq/UOGBIhNZp8aMvQpqAp4Ax9Gy7eo2+2PMoPGq+92sPlX1iwIfV/KGcNyQ4/4STfX5HGzIFOqXM1TJpQkDfB6ttLEJRXNCUvIv6Rmp0bHlFTn9BpXLQfYUvTjevxTo8z+m1i2/xN94tFmuVy9NmttagWdo5ci34BgsVhz3AoB7OaTkEjeJ5NEUD+g4LGUKOgGCXnVYAYSwXJmAbVGMyWagmTohLt95MhaGRIRVeWow/hEdBtz4DOEiajzrC2H2wDesgnT3+ivGyzQMsPdKj6PDy/avtSzJbnbOcyaaqqSzMSei6PJzqLA0fAqjO4yRY2LFu0WmWIHcwyrxM8uP5/kNvZ7NNCRJtmRVDM0ohXC5DdLItA8orgvVnmvlM6RcWJZEwMB+eGK54xOJrMFtTt+Hk36SBKWJB9vCzS8if4C2tRVHsoCBST6phrpmR37jOViNG6TXmp7DSCk3ZHVdIEkp1z+fxdc0b07qglAP+6QzLaRHlFYc/gbKRKdH34FcFLsTQju/ArB4G44DhgopWcVm2zbH9oBQAMFQLeeaB3wvK95+v9UOyjxzqJV+vR+cudACum9NZiQXWv0wNra+g/h3UztyExC/MxSmDcvNpLD+vLLYQAhLLgTxKgZ4dslWi75IF8TMWl06GIwtLuSpIuuZ5KO08Oq1b+IyIGe4OFPL6BUG0H4ipwWIsVWtMVAf7VvAqUSJZMCXrirQW+wjcwngyl30mDnHF9MzH0dI0km3J6SvPq1jnSqZXZLGcln62XiEy9ymXrvAb/CDQ4GTvcDYg7KzIlbm4IjVHXXzLxAfn+Vlf52g5SIVTPyQG4usxL2vvjeFJaxULT+F0mX+iCjC/LnQqac9xpf86p+6OxxGkujxHrYM1H7wV4zXBXHU275q6oJZdTN9TUQsdzkdmTB8UHN1GB2kC+jH4AzD7EOzc3CCbevQQdjZtSiU7rOhn/OGZXhs7ryDI7el3hPZt0jCNA2oLu7oaMlREfKuSyap0+CbN4vn2GQ+4JwBb6HxpLX9+qdjdM0r9GImaO1gTHUsl44A+lBbM+hen61uWeavQjIrX/Ry/S0A1tCI9gZ5NVRv5JJs7x1rjZUoCm/R/a6uREgdRF8Q0PRm7ZzhjRTbi2HZ15EEfMo1MiSLn+Vr6EWCYawPwNfuCIVFVri1mGLTB4qtIdNEXqmPObRMUWxiGOTR6BCfZbSR98tVz1lbgYN/NM7WuhHTebykr6KfoC/aPUUXrKJTeUTSiqdE82tSdI4mccE6kN3Zs0aecsUrDH/U+rnrs4abEIObw1+3czDo5J8/zFKomBY/aRrRu2jkL6z08qpkP8oN9S3g2oXH83lgQbgD51CtkC3B+WQlwDR8xn88TmVLwKiWdZzxOrWfQwxV7Hv4ckP3BbezQiunNEx5+eJSYyH0SHRac3JjioxhiF3h6EOSY12rwgdpXfWSLsxtrzvYAG98yU/+1q3iAaBquuatc10hDaBe5R0JmmRm6DBI1UhTt42fnt8umMt3/ASP23oM6YpG02J4qAZs1HNg+vPikbrc63z9nctTy04YHKKdHr4Cmd7YNsS+ivKSf6yVa5qAVFgYMPbS8oT7D0w/grLuyi6yLn/1yok0QcuwdNKOS1ze6q9santvNa9LHIBH3HDszBAOsw+JianDY9UeaGDiXhdYd360fI0GQn3svH5XPDWeGsafqw0P2vxBXCVWMhh/upsq6azgMgC5ZwJIJbNpivONB6avACGJI/mPCI/lCUidaDHvK6eZhTzf9yLl3FJIAkljgUzh0huSiVA83LZzkEiTkYB/j2yYS7/VrS666sBtW645PUoOXGjdRMioFWyifs0WqMvf2WMwfu41sbFKBfJXInPIuJSldkZfle+qZPGymMSVj2D2WDnhrrl9i0EiYj73Rj7/ZaCzCWqn9vjrg09JPyiO9GDcWHdalnjxGSDOActpfM9rYhoKeQXLQCWsEqT+jsvDkBr/e66dt+2Z8MUDngppSELTGqftlv1Jt+x0xRRvewCzyEODK73hpAcmPRmSl6S/PNrfBBoiddd+x7TpEHIGR8zCWZxOqbYCp5tUKujcOfNyGQ1OH6CAglPZ0lskv72wzBjVuWard1ho7/SUwB8d9TSlQ6bKC5koT46JaCPg/QIoaF279JiNVGR7l3B+SruHRbAQa0PBVAp+tWYzKGDP1Y8WOe6oAFWmHGMnKlOU1gfvNprQRThe4bLstzzr/3WI3xVJHgcKRUU7bgxeft4VSXGMU+Uh6cAS8NHL2tIj1V0XXB7lpZWfAG76pcGNwBanr3n8mZlsvsj6i5R5bKRowXXIE11TAwB5h0lNiJzYSpgHwmwn93jGN2U2K8oAUd7+9eOZ7jUi7jpubWllG15U9M5ODD7vnGpeU6Jg1JwpgyfIm2TKWTyFkXdJR74fRdsFnJy/8r3cJ4Qb4RFQ6SVZHZOh9Wm7sPydqSnsFBjy2CYIp9fwJ+i68JsM/RnJbTiQKtq2RFsKALL9yVMPgTSmytK4lH+OXtyb5x570ulPt9hmJhO03TlsQU4VpPicmxMyrYg6HuUPQ6I9eRrviAznEChI0+vHxfugmkYxxeUtumASHLkn249+/dXemERc94t9pjf2wo/goC5VMrtzN+jNvecWzhQxfzuA4Uxb1vJBqHFZufZhaFV4up1L/HJbh459cm0KphSeOWRP+y7AIpsv8x+f7qAYyg7ThJbuiIRxWSmaYKlwsxYXiJbNaxTOs0EaXnnQFP9n520DuMxKCJXxgmaqKPK6iPr88PxAPjMFkQ5weQqdP7UFoE8GKxhJYxqxd5BVie0USDJZdMwtUtkBYD0VBEa8pLBxu0zhKOSEim/j/bdHXRHNHq5JAPyeLikX2JI1T/zVC08w2527ZM9ugbuRJS3gXXM42vTglZJ37oTs4nxecyaWHjse5NoATMVVnUTwjy7Fk1cZZstO4Lax3u7HRlNFzPSwzSuDJRyXX26PozaYj4rqinQagGOeR+Zgx9zuV3GauNQM3VfCyDAq3u/0Mn+6MBEU9ffgcTW/UPFhwgHkNucX3MKDh2yAkARJLCecjJhtrY85T/Hb8F0ptAaohDHS4J21XM4/36zg6SGj6ByIVT1myS5SvEJPj3a2EEMsgX58lyzPZMQLJlVe5/Rz9bPzcBAiDIzaHHGW5lHez9QOCP6vI1GnPLxB29ustejdzp4ZZQDVe4/u6h4AvuOBfD9phSk2hkzTjnUQtaPFyNm3DQdCRwJQNpSbwaXmNeJAcKLtotfyfoSqEr1kVZ6eHIVyTP/sRrAKBCR6A+bqP5qUQKwmB0FGlEjYFkBOJUMvRHqEN5OEcL9jif9l1feJZn9Ioeq4/0R1vXI0jHQjGoeB4o3dG4ZaLJduCuRDPvP+VRBXyVfpMKxHXdqSTNwJsPP/fVK9hPtpK8dzw4yzWgSXTU0NarrmWjaMKf4wFBPBd5P+MjMbeVQfMkhpNdZCi7R+WE2SCqYSSTZdHZ2VY5N7tRfGzZK+n/qmRoa5KhFCfnYXyVEmgp5QtI9I/tbGYM9Le87xHlTbiNDjgWGSe+WPcJ/IxB1DbNOsBzzOqPadzktiT4UTqwwZ8/HUUJsVSrdtVU9eRZs5gFPhLDDjF70e0Ble6VnOXd9w0/7AUXAyCpc6bgqW7atfTl/CE6deQu8xf3WHQbDSegZECE7MYtdM9tRcgMe4mjJxz39Dzc2gLKO1B+kkHiqEHx/sbpEbbvJcHsB6QbAZ8Jx/KexHEHFy7F3UGSE3yHzqev1yFDx8+AZFMSr5F8+Zg0sgDFyxGhZXdruo/DJDHqOoVXiztTnvc6XrnTBt6tfIOZGgC6M15e6z/L9AiDx7BzpOO7H/2ldAs1rUwnG/dG1BIcHVtGBXCTrJBVuvCGpz66MSE3t7gdW8HE15OAtGBcMNB4+u11FqDXu0op7oTKKm843JlUVsFvEmnDPivtz0lu3uVVF0X3IQC7QwvyW3IASAXweiy8a+JklNnGrda2Z1nBHcHGPnIxwP+axuHwJ7nmkwVAO5KM+9c7agkOFbAptD8i8/Ak7qqORHBRXzPtPr8ykHDP8eUa1BqIjp5TXOzqGEMHzpvDYdH+IQ/je+sZzqrmmEEnjeTx9oLRWHfBtGc16//QgOMpxKhvkrIQqoPxXkj4n2Oa9bi2TCh+0dNQcSSwaYiVuMnSMqs5OH/Q+hfGnwDdkYZYiJMXMRFlunZNcsgEQ3xU9sfI7Xz/3OicIifaJsRqSf2QqjqJ/CUDWzQWChGOR71pjRvTAzS7Q/g7Mb1fZbdbo3wLblgNlo6z8AjSIX0yxFcu4q514qIdfRVBpQrmYswtRMR74cLW272xtZR5xShlSOMeB0fZWePCmrAQmLWmvo/GxBud8zACR/hQU+qo9ceDRA9cbJlJ13YWjagyRdqhMqaaZXsATiQvN3V0P+FkubY5kKyYwZn2fO4IzbmxQrhs9n186V35d5Pz1+FZ6WCGoCt5GMO4prYjOaLxJAGN2k3lMmjbIPed4c5gcHx3vtSawaQxNlK9naWNK/aiwPHSfehevr9pvypwFYznqDBx6YNTWxK6g7BFlK+TPXZXQGqG+Spk/VkwReAW+nNjEjarra6R7Za2pe+IuWSA9dvwLEGnyOEm51kvrZPbZvRQrGuCT7329D2ByT9k+53jK1O8c1ETl3MJz8fjRKnN52gdFKkHgwWQwWQX9Knp/9JYN0VPaPiC87zh1hTN/9lUvroDKUgGU9vheuVzdQpTazLk6xEtpBS0QQ91xpGlo171DMQL6gKOjzTxFKUZRYzP7z4r2HwvVP++h6vGj3Ae3LEHubsmlgNyB10CSwTRhKUGYpL9YcqhS7LN4qiZ3kGS9vsdrbw8q1ozZIlkLv18yZGpn4RgaURcdO5Z/n2e09IBFEd/fFcJB7AY3aA5m4pwQqw8TO5vTbpOXsadIJEpm2NOWnzKPS7n8WSV4RsJs94OTXMzCdh6nXX+T61Yq05Muhys4iHlkI0qrdbkf424hWDe4EE7xQMSl1J9VpBtpuP0Zxk96FLL8ZChViRRknaaFykqoHMC6ca8Ex4iLZGF3PV1lyz/ej6sov959Tgn+s5VJ2PA6RdHfOJPdWKYGCbXGT6iCHhJB5H/NwShSRX6BzJRNw/KbyVp12+95hTkG8aO1oz1b4D6IrHxj+U85vcFE8qPZSGRreMhOTmL02o6M9lAWqADbJM+cIumxqXMytKpw2thwlh0qkvyl1VqnyJ6ZvXXJsk8cEM7zevYWL0PmRktdkyz603l7asFmhWtB7vCCXXQ+u1CkEbqXl0czwOBinmfJQLh7swm61w1q1gUe+HWUzt1+h/EWNU+vyLVVspDU1g/qXdzigr5OXM7fGfHhSKMqZB4pLoGA1SNchaiYjOO/N5o+NhB5naHnipPwTZIE5CY+XupM27w9VRoUhplCIoB+azwbHp2IZ7eibzJ1QDOV5TLvM36nUBZ+iRrVe9+9wulqfPhqP3e5fCDGZpGvtDX/lAD5DBOnCgYJ9nI0u6KIUEdk80zcy8bT14exnnkdfKToFWDUAx3g6me2nvMQQLuYo07nHgDfP9Pz6dWdW8fft0CcNkYanYT9hLUkTBDhHB3n52uzzUjvacKLLOzOMwCF58qLUTvAtcXKItJkVKD3b6bC+RsOlAA56+LUrDcHkdFHUe6EZPO1Kmmoz+CuLPB1JvKvT51IvmTtAQj+EMyP7+ejAbLune4rPsGu2lHnH1nh6dz16SxZEz6qhz4rdvWdprlhQrtrarh98vdfoPOOEDpvPNcVS3jmU+wMWwyFQ2oduztCqO4hK97IIN3/yK9smSg3OJHDLPsD1F6pd6EQcNtyKC2HfTu2Eo1vcLRw6qWNNwhebMqSIe3OXhABxi3taKP6KgkHQumf1bFet51UBqth7uo29h86cjZ4iKnPDu10WNmZjT25/OoW3RUPdolmKxSvaUbvgF5QvkQ6NcaNvISXYkfVmAg4pzR4Hv/8zYxP4Bhk5FF+iqNJ7uXTO6CSGbc5CEI0Y1gGixEHkuavdrwnIGNy087kC/ESowdt7X1yAgTLdvx+/jus6GHTVW4NsqrD2vbId3Fe23fK3rP5yZ7Jq3/Pj6fAQprkhX3FG2ICeE6fCWvJctiZtc9z//AzZ0uvKhCg5CKrXqrmmO8JyVawN9056cQ/WNZNkpCXz2EV/aCufcpoYvW/s71BruS4QEcY30BcAv1Y87c7hcRbjt/Byylt+VDbZdFaVHV/z91aSA6MI1WXvl1XuTjtVPlrAlJPMa1+h2Lf6pJky7uRNhHDEIK0pg6L4bPm4MYcRW30nK9MyFDosYwI4vOBJUBUA9AVGdvCc/Fp/5BaQSA/Dk5IW146uTDMXXLLMBehJEI94LmPorc0h1anxOeGKEjrOmr2IV1qsriEygTYJyYm+QzdzeJync6c8ZdKA/y4jjVp+jovJcH3JWdQXaJHQ3Y3BlkYoNrtfMvlF5/6gQznvOMdt5OwUS+P+sG6DyWiYjFwG5IyZ8GUPLgqWs+E52aYwrlzCLwPvugJmBLs/MrHuhUofAdMSRJxuAz4qlVUQrP4MEcfiOxVUhOxBT9bNIQna7dVyIrQP/yjREFo2F5b3NjfOu2y1SM+WIYaP4bRZeksnxGztUo+lV0ad0OhFFKk6wVr2G7jMole2r5RBiUClBfvJZ8f7Gknb/TGx29EGdw+AlI5YFvpN+OjGIny5WBmFeG1K0Gz50NAEyoRwQbK+7Y68MOOkP0xY+OktFD60/suSVr8j2TVuorzfQvF6rze23D9HNsZPTu/1MZK46Z8cFhLJhRF9fs3Bm9gE9HiagPvNQ4gKQnGLjrjRGFhjjCz4TmMY5qmdigBDg7wLjubO8/To+2yXsJNfPq4x51nlZTY53Ur9kf0H/FmtphOYCHNZ+UhGSTqSn8Rye4TUwmy2dIxTPmuguCl5c2G3ELk2u6QqEBazTS0MPbgRXMYgciMA3XzWQ4T6UeeZu6F1de07tdQLiHE/0hImoPIe7/Il6YA9AoqRYerXX+fvZsx9oxoTxRQGa9cZt2InOjAf/NSmUvx8IVK0d+EXErWVYPm2GOhYYxcZeg3759UoIHY0I7D3y4strVfo1ORQMtcPB4MGqZdf8wUrxY9itlAtEzW78nC1aWwT1tv6h8Wr4QSYLpc/7q3BTSZMGnkVqFVOSzS5SVup2LfykUjf+35Ww8OrUxZV16LGTigTWN6UN4Epcw0HUHYMQ0cw1PUg9ecv0tPoI8vJQWMM4epqiutiP9JR22hj4W4rGjzRhGLwyyhlYhdMYsBf8ijmhfGK+BcmKjFf4Qvg3Xp8i88zkto1508QgtFl/dg8bP7x6M/zXcqxCJIOR0pWVNJpRL5URBcR3N0LxjB0nZOzOts3RHgURVi82DySbEggO228gf4jARMDKn+bjR6rpgs5EKrJXIbPhDWm2X4VAr956p+IACW1fT/LfGScimdA7fjvLb6gkj+S6gmIMhTRmahltP09wfeOBqHGmulVz01rpk1hIZmpoCPY6mLzOtN4pcC49ZwGM/AcYDeUheAkHBGeEf6Et2WQ18t736onTMcGqo7g/wgDwYnwRWgDA7yvGzgZ4scSbVxtbB/6XIIHhUhZ1cIlQllQdo+VOWBPLILONtxE9jttTcMxQIptfkPkQAF89qdd+/fvsxmC0P9MR53fzc9CpPIQb0xPUDwDe6n9qUeZBnharuMJQrttTDjRKYJeu0dsPiCn7vxgd1m+ur3bN4PYR+K6xxQwbnH1qE0RYzolhx6UM62BRuXPxAAqSstVuUScmDjJdF2nSh3T33rqjTKdMI1zCRK6UfNlXF/D28BeonLVUPxV5lYFZXdrhH3bMziXSbEj+cDd/Gu6o5vARE9SZHCA3/CSBnAMJIHYvdk8vxKn5T3FY3ds7zvPKxctTK2Kf7Tky2EuWUdCVb4IqU/Bl6XczF7Tb+SNAZ/kWkfTrnapL46DUY9IM2pUc/DOYNhLI6EhqpGjeCpGcgeQ0EEK8NoIcQ5mda5Q19B58U+s9YMMIAj2SP2hw4INU3JguT8vyGjrSQw+/Ro/YSWZVZr9x09flUP2ZX8HDSXaNgG5kP45uZfwuQXWnSV7LUL+srqjeqKYkE6syZCNCYOva42Cn72hCrSAi/14GzuEfNjnXtALZxv9PXufaIkOaWeNplW3lFRoBnxfHWeD8oHTUkgI4KCNUKAkzlX5/qMCc9PHUb+bm05CPqLxFyEsgeVd17gNSx8aKipKxqDYpIW/ql0yNaXe0DEZPzZVGPFT9X9QXpOzcfD6u6E7pFR3WCyxZxOzTx3gXMf0KLPiS/Zq9XzyIxZAGudKF5OWJHcQSZ0LH6osBeS2qccz2KALuVfY7qEQB9X4OxbyUbuj/NsnYk8LYZScLYR1WZGkR7iH+En7JzbD2C2tkS1SjtINFpEeHh6zK7e799zFWjxPfRpi7zYDO/UMxhQfzjxB8QJvdmMRvmdlnSSkAtZe+hmk+qCTitkDw++U3gAdYWhJ5dwpCdnEWk2PAKn+8vwbYsV9sMg5+Qx1Ig2pzjT0Lqp8rSuRHxvWevbddOLumon/+gOqPPVwqaoh8BMjWJOJ2JlGfJSpTUCBNOWGEOg+Cl6O0FpjyPBga7ROdnMUyxcZnS5lmAHlPBdTqrLSCwFBti9G1GpFCRfFXnq43SDB7wsHZeMC//xh73Xx7oVdatBoCx2Rym42WidGj9anvozNtRz3vbvdCu5dT6Bt7s1txYGVZzW2JBkKEV0ucPvpPCkfSqxjbxZopZj/7Be/KnCYhKKGFg6Vj4tDcmAyhtTG+TwOlnlswHa4HQ+it9pafrkIhs4jbO9eS4jQQM+x2rLonJX6e13Z6m/TzJToh821Ou/1gGcCPibxdAx2MPDgV/e3CvydqbxY8YQld3YZna7msI4ICqW2jQuKfvaieTsuuGzZnBEMScLy36LdU8ogTXMMnEv9WUJRbRbIfo9V5ouDqQmaew/tp4/6Bn0vpLW4hSymPZRuzeB2lKTaOOv4N1+eL1k/OsWIm8CVml9Rxqt8ASuhpkumDu2zJvJuXkqTVWoFURQ0Jy9IvwnVctdW+b+D9acCzSzZ8rwSiWIMDaqFpFUw11P6dVd84kVkV8azpvFOtNkRLZN+QuI7TNpXycnIEe/SVw+Ch7MVHImg+YPhENLAUhSL7tvYjKov7ZG7Xv9Tg7vIrx4B0E3Rmz72EKT1hZP/dfKaDrkE8KvcbVFrwWUR8HO5AwFEP7DBSVV9y0WWj3h5GQjKXA5hajJly5x5mBFh5gwIJNmWYYZOc4qfQ4L+j2FaOHBNAtqazVtQ21GBtbbMtP0Xa7M4t7K2mKL9QnW+n33uwrByAtKcjw3D3paM7otBxhnyzMlr5QmpbPzSXJfRcY/GFsQNpkobA78FV9Bh2NXD7G6oU59rvVFM8ml8/Pvw25bXWlE00SiaRaDyKg6doJ0YmWpEQ3R6kYuCSgOX/77PcI86vZbsoNGKarT1w40VgXl/sP/Gc8C7dqX2UU/PAo7fu1A3tSPaqe9G+Vxv8Q27hWOQkmr0EXTBJ2iSCSyXxhIyAlcJzJLg4gS9hccIk0/g2uVylGVpriSej2GZ5sfyPyJ8nJHivbGjTFHBNsLU9hBjaGRxKWieVGre/G25h8w8lsza/RLQitwPJ/xSG2Ln5Iu2E/VzWdQB0IhtNvzzAZazB9tDs3beBC0PMDSvylEI/s9BmJFC1kdwDsH7Qxac1C6vo7Ii82hwVN3szZ8euNE5AnYdCHCvt3nJav8up6KdojTmsKDFk2p1Z/07rmydhULk6wMCYhCoW0O2dAlXkBZmaDBVwSRz4F5yVC2d4u6nFpY2tnAfZD9xEgEFJGKhJFqbbMfbGppUqpPrjKL9n2JZUQI/+78cruATdHp/oyyL4lU2G+B9mkHHoX0KmEYQZnpKMaKvhLOyV61SIrVQGmEe0CtsYUCsYsAJ5O2OJIVeKIWpT+6DeNZ9mXiMEbqoxa9PzkZ1RmpJ1XU5JY8OHIU3qVWC9CdqBdnJxA9CyAp2rOnt1rKzMjNQMN4WK3npBvAf8t8fwK4/sXDWoxFZKSfpcIBOWqBzRxe8aCumXZaK7FmpFurlKE08HWPS5JZ4KIWuuvJB43TQp3yLzxYKzoL04SDS0mRpRBid05fVMC2RhbeuIzmwd9k+xPsT2BNbZMdxOhake+d6G4Tph/u3b5aAHbtfjh88glzQT2vG0NufzZUenOxd2tqJpTxdzFc/ro8Ljhc6EjToI0KGbxKJInGggsFxy96HoIR1Y128mLGnZSghRGmJaVjkYQ0exGPjdfTUw7simP4iOseUN8n4kYE51G7zrwigWwgxKnfJHNeBplSnP3LwSV4IBvVmJTntYnfqOdFvBuJ+XMX7pXoZOxZbHfYag5bdCvMfEvjh6QZS3kaRnLSrG+aNEd/OuUSyWqGhnksrdsroMPWQU0kojyq8ml6aeTQx/4Vb26iikbkGLhdLyrSs8gT82GtU3Wz1brZuYVbvPw6t0X5F/8W9IUS77EszkCycDpwoqhMbLXQ2hxzeAo5ULiUgE6cJl0OOGzQMWIT5bh/qmvtYLVNnM2bTxzg4ddlciFkfOG0sB5qzbFOr/m1n3VuSxBG2JomUEcvmHe6PGRsjcXZo44+VVx3GIRIsyL5TDIoTlecadLJPME5hJJcaA6uF9xzmfDBwVGw5Ct/Xt8/ACYrAGwVr8eyhRA0CvngAgEIoIOM6t8p0ecRRi5zCOX2t3unxUvdKZwBupv4NBvR4L6qpFC1EWpinZdOOnPz2jh7SW5vAG/AU1fm43wswHdpRNkLQSyBOKMy4UZjI/1i1Z/lpu4+CZf8rQvfinhuId6rPJL1SmUn1Eb5FMJFeg0fy1S44oBelvOZw7AP9MkYGthRWMLlNiZu6DuxSTaZ8z3KqOJHfxdKeQh16qBtLLnU8HW41vLxAANuI4TD8kz8N8O/lI0+qG8aBeNDHvOiDOue9zRCKRbMxhgKmjKOvp4uCBNSIcR8nLGF2BZLsBtdSL2mefTi6xPLPVZCIZ+4K1Bs/IWr7U194+Ye7ZQRykUGsao6SNi9fNv8pYCdDuFIV/dXU9byGRsLB8ie+otIKzO628WBVErakvAuSFHafesjHSF8Dc/R1BlTurp+Zw4BKN1sfPY45gI4gRkgbSVYE8r5UP05r8O06DBWzGe7O1iHFy3TRSa2qecTrdASkXwn0gdQ8nYeaqvqAvIBM6zoowZtLsrNNUSlQbCQ7vqlaq9DkmQmT1heFHLANCoOWpAgAnDH4toWRLwScoPuKShvtJNomXJ1Qt63uBT/ZhZK4MPkCO3Zqedr+aM7xlfnWoPqDpvCaZPqFjOkjyF5iO8SbJgzDCvnCz9SGZwV4c89Z9CkYtKCv9qnEBP779xmX9u3+3MdAUQmMs+/X0XBlXBpk/YnHTXYIzXzTgk5NALduvWQi/F2d2AJZTvUCe1pO5jLhhBhySbLub4JAgLz3axq4awmBlaW9uqZ47KwVUq8dFed9/q4Ch94kMY6uOEdNPv6yvdffDFVnvu4e+Y747Shtite2mbtX8ppSawqo9BmSKWoDFyLyYtMbLO64sVUxoMMQdq9UbCa1JkToCXI8o/cPlGD3kHAimMLGqJe2lAymse26EfcJTZEW0m14OD9h+30Dykw8i0QEVYjvgAFcwxL29YS8dNMqZ5YvR/EWHdKfEnJsNn+vcqKyzUHeOxFybv+McLYgnIzQ+FOLAeoa/9cxm57IDodAw4Yh22DmvsE6P7rC35zBX1SwL7J1EI2nUrp/fH8t1cqoQLGoA9h/LPeSgUwXMe2nzOMFtjtXCV77Q8IRzweAEqFO6mNbnrM26DjLLht3HSxBM9xX95kbXGmUTJqsZDzOY33YDomYCUCK1zxOX7yE1GTCuoO7yNuBJI9lHSoGTb7JV2gT+3Y6VJnpYfhfjXVbGxX8nqGqcqT82P0vdjwpfQI6aSfE91gN+FtpR0hc4ihf6YoLpn3yhI+PO0/ln3cdpfBdMky3DPuKOww18YYEuxmFUsKcMZc97BFcAUXEU3XOKcRR/JaDGW7JaInX/H/NhzDhkTslzTcsB6DG7kCjMUju9fBsHdqxAo0Pe2e6A3ApE3ndxAc3gwyowQc0hyTfGT6ZN9BkILkiQYx0r+0+tWFoVpA4RHEcosVsfBgBhKoaWOrsJMgBTUbxs3M3+xk9C9/6IV36sVI4yUrf+pM5Q/Zn5lUbJ2N7zFYKZyQSkEDDXAX4JJtrvLXj2ZE3heDJ9I1XgS5JAn9+Ye0GtCweWUWPPLp8x62hZz9Vw57TVJ8R7md7GAKLosTHmEdrqX8hYchXj470enJy4BpYpgx+NyFtdpnjhukr9P7hzJHY2rNSCYi2Ql9tKPaJmbfTRu+VdGQJraNON2cTbKMljS3MHF+qA3pvuNim2IGtfWShJEht2LhJhivpX8knUkrOLWanFW9T8NWQOwjkY/+zpqLhz1Nto1g/rg0yESUcenfj+8qWwyC8QPufcNL7rZ3UIlR3RbQLBghRnW4MNMNcTZAu4M4NEejO1F1WGyMK8cvYIuF38ttWELe/6Q1Ek7b6OSR+u9DqHnyYJARpSqQQdsELwbaYR3ZIE2dyx0pxicAilYEDeg5Mb44Uwt3GAEhPNy2J9L+UUHlQbTzvKWIJj3UxBXQ338WUoMsHsrXhNyHAMXuNaYVJDSAgzzdLKeBeiEx9K77dExmPfi098B8d3kVtcJF+AZ2qJ3qdiwnSthqrvYlexJL0nk0q80bEM1r1Au++yI8hB60DM2yt9AlmS34Iy7wlT5mUQ05jUW+VrgDpDu9OqGSB8O7dIvZCvu11W530tkrazVB2XQPDyV7Gc/kUOjvcfkVSeT5FXredVbWlQlGtEmz08uAJZhyCOLSPSdHrr5Bkj5IRvfsYKPmtY2mPPZjFqG6c6qviSqIe5Gj+fGvuIufKjunejOvOWZD3NpXCUjyRzgRJ5a7FKEEygdafjlzr+zkPpAmILaQM7jKcvwZjIroLHb8vmpVb6tsmyduyn3KcGucuTZBjkrsR/qTh1eJQtSZDmvi+gNXrZa94tdULgR1V4z6AimIrFLLDVxKB7uzVnRl6xDeHunMdvGPD1aPD9zux/LmWbKXaAjiNO/bZC7lbEdRMJO2zHl7yZKiXVaICDFOtNmDJ9ujR3kdRiAHtxsr21mR2rs9D3i7wcH2atloBCopKaUfiiOXezKAlubyYyrH3F6v15hciZiEv3lXIAL184YcSS+uMfL6Egbwz/2gOoF5v3K0q+yWp78LrTmDRUrCyB3Nczkm2PY6k8BtATEeWE76yzMwu5W0eCl6BdY2VXMCyViYJ3lvxQuK3MAP+g4/cGylyEApZDsP3dyKZS6j1arguVyQw9tJof/qoDXQtapQ+0C2f1qBdynLl0nuprFwb64LtJib5FdXR/2VqvdEE+ForVEMdSI6P1uAiXIPy4LazQDimWFEJhTP8vpJjot4cjfBx/XZ/KDiWCoFqYXcG/jU5Y/NpJy0O9bRy5Fsi3LyOap19f2milqjFyghU8f+WvWyy4BZvZX1mdrtzZzEt3CjEdtUBLRrnIett5nWGenxqz1dzi13YkwfJnmqdwA3PUcxP4LPhuXbp4b/wNQkgK3AXIspRTjBheDZ5ibXrDRgMBEGvTdAEZ6JnNXYzYZKcjbsIVNoLLXA7VzQX8BGTmGmNrK6IOm06Ux83fgKE2zFIJz1R8ABR0NUETq6OGwPZ8g0m3bzrn5a2FTgrXsvapIkBYuUcIS/pWpxIk0TAgACtTlD6vMEsNX/b4+95oj69gyQg6keWoS/Ii8SQ6Oc4+jwqeP7c9mMTw4EMK7tuyOCoCw7K28pRqYcgLIIaDc2jDMhW/Qldc6JUC5xJrz4Vfa6AZ39Yp3wam9DSiaWe2G+XUHfDiEFiVwVN4ihSx/w4K8Q+jF5omL8ygT7WfDuHukMfvsIK38NPoOwDTpFWGB7Bmpz96Cg7uHgV/JNmUj+pMKelv22YOXiT+XMatvAcbOmmmqRWaSXOmBUI/2p3EXwKXQy/gdbeLDmLgMSOukzrgCYvsc2rZzK/Nd8quHcFhN/VSvANJ7CvLJtCVhA8FdPZVA7mUoRmtH0uLXeoNuIFfcVbEdv2VkcPrntWABM3ph5p3vmmwoWFQiuJnosINgkXFb01JHmnTZUWlnVMaZfJNyW60vYVCoOIItRM66Xd73AnGgdfYqGFpxnyIPGBS1NbayQMSXhKrNW2ecr5nFhRuuPRMZdW+C6EW7rjdKcI4o4AAcuOXJvoumlPVgzJ5EBTbRcrtHZuif/iNTCGH4lDG9wgVt7+gM7BiaNntnpj+cYQgW4jOYVo3kSKbuo4GwqlPebtXjQYbghXzPiM3pfwoqd6CEwtC4bH8W5r5dXa6KNCNnVN8qIkzJiM0uljvk+1NI4lBjWtMLd6UZYXSrWhqdiPiLbm3FOWJAeJ6pUbKASQ5Rg2z5KvJVZGbBvlUn/P0Ti1Fwsh4b5+5+4OvMdRMdt9poJ1jVGV7Pimcv4TzvwfPQ+Ljvh0ySEC1yw3NjsIbJpjeioPDasqaiTiaauDGT2+5QgNgpaG09TNrj7jaaKVwzIcbrKWh5ipsU0CE9arHTIpZkBGO4Okdi01BZhtkFXmnJbHkJAfYwEGCk1wBKfdT/gL37lQkft7/KGNXjSfRdfisiCICDZn9KjqYAo3GrUOUqZUJZWEKOZTSjj+hl/+4OpxjumDY+1qc2H6HXqvtY9GGxnjXE0IHVhTNOxKFU8SH1dM/QNSmx9hEQbOyvuFTXykqrAna61yOIp99M+jnU1U1LtNOuyvrx4aTf5DtcueJsFP2T60luWWoQvV+FtqaCKq4aveo5RK3szqUp/EBd9/p4SLHjnho1pzhRvAgAfoBpzJiQZWvveKUOKSFg1Eals2/GsS8kG0pXJCLX+rqA6ZtpX++n7p+kq5LtRNDjmpSRdaQnMYo02LDR4ZSG4w8OIbOd8wwPAJ3pwqbNZTDDGvCt/wQwyqFjbPUzbz84Seuba/CE2l4c566AReNyvAK9XD0fmDTgIBu/SdU0Awc1NkEFJwnXVhMpsuL+OcQJjIs8GKnegsvEzKPbUhx9BsRit7NzjPbP39cFuY86/5p+qqJRvMQiR5XGtuewDCuQ0bRYWBS7QFJLXKLqJlXuNx6bcObbGZsaUQp1ndaGKM64HDvW7xGahfbHFj1T4ugBFXHhRrqPX5/z1e5eBhfVNc5eokTjDphRRu6qaC+2TLREg7gAYy1lpSUJOqhOgndkPhO34VbfBqBIU9qdzPPbXCSV0pWf/+kn4OkWxE3iE3kl4vjKcgAHYAxGuFqaxDHDWQ8mxYY1g3yIVAGZWgaNhMbQ92OezCic3/TH/ITkxGwMpwenvNlSMYHBmC7AvWoPerljG1r9VyeleuXwuft9ZNM1VB3DNdOHbOrWfj9rdDC3VmqDTV9M116TQ8Ju3gcb1ERXz0w4FDkaZgckVoR7gBnLHxCGwQGxvuDUjj/1JB8wQz/+8lsvcc0tt3+QLU+97/mNMPtOxB2WenQVEjplQfEzLC/oBwJIwX/X8JkK/cDqRON4mohIAhx1tPux4YwtB5qZJ+6zUdw1vFd6AJAWE9gwYIjl/MMZ5O0v0hOSlrzfm7qAPccmbR/OnxocXMT7vpssglWAXKTjRvHntivAnUSQGsF8hwq6bFqjGDo8Aa6pxkX8JpNONw8vslzePKTufEUaE/EanTS3HlpCyyApUyH2wYhYyEFewTJg9CHDlq/dOmhoXsk0rNzj5VrjtsyLspuifQphN4BbzuDRy7bu3MvsEe7nbrooJWtACQh+me4IIm+YctK5MujfS2TMgCwZniIUWkvTumHfcTZ/55kD/dZRMfvU0W3OMmJPjVTnf07jGib8cj2fHlswDwiqEG6KVD0K3sXeATDl0wIAulIkCcFEYih6eBoiZoiBG+s2T+lGGVLQzBrxcEAzoXAhvGbeve4OB96LkM1mVuovDS4PLah1XWwPm6+WQ3AbywFcutLPPRT6rwSiv57g5t2iW7ku8aAoMg3aSvyc900jmJwUMmjsNTeXxGaVzpLhNKBB9G9AfJbskZx1HlTOStATXie2U4gKcFK1WKKVt7kVZTRqv6fb1Owzq+zpH8tQUr93HGAfTktrtjgt+FqMDcKa7CY3jVq+NxdsRYU7+ILG4/YX5oxwPFb8VMxC8dc+CN1SSuWsyUzs2beAyvjkildwbUfX0gpbIKnTi7omvTVmwMEjOYdLmReIzHPoxs7galS0DUwvnqSea28ZzaqWRoccUb8d0Qa2VDDwJ6hxId1efzf1UVI6GKfZAdiG2u0gJdFM7wa2xJu1FEabzJo+WBar0y/M9QSFw0+Q/F2VoTKkLI0ibaaOEC2zccPwaQZjtjdlbd5edjWyoUxYcroFTVyXoBCQ5HewFKhtd6KF4Jnixh3xjymKvtfwcow6gOr2N0dAP+MK5vXfkCTQ3ChjUQOKKhFk5Gvxc0TmhtHc8D9hBAiWNfWLYbnA81bzcknbLRgF4bbq1CWBxW5gEj5Tu0b1IFsyS8Kwx/iBdK2kEesE8aZ24qVb8zLNEXPgafFHN2RAo5DczBQwDwl2vSvXRGsTy7J7uKw0Gw3nrlMuud8qkKzdi7VjtrdGD0t5Z3TlCEXPDAB9aVTs9OjoHGtZGyyicW0c25MyS3s8r5PraxbYFfTxqxpLFcf6aKvuAqb+0X/Gyuf70VeniAQuXUMtFQjpsTY/1DaFg60t7nNRuRqW55mi70lV/0TR/pGH5ssD65X8aaIxhfx+a3ql0msjVL9F/bnGIyfLnCP3bil3VCjFydsI1R2glPZD8Tj/uFdZXthoNl9l4rzlBveAwbAP+s9OyrARzmQX2JUMet2bOrEknpwJpIXaxHC4AxvSbrJ25lxoZFNvfrnhff+gXII/td7GNOYWJNmn7MTNdnRK6+ZUwhPaxuXGl0V32gQc1QrEQoeotvT5c5Cub5O44uA2jaGn5sk4fn0fqHUAyswyjdhFmgJ2ZhnV7tI7nD4AFZMUs3UbxPs07l2+suSxTQZcHqcLPsEk+L608oOHu2pdQyjairRCb0ftEY5Ychm9LU2Rm1SdKOrGFP9DMOyuaN2m2f9N79ptlvaQlBtaF98At+HCjqVfPfwdflPQbTlB6q1TvXCKBfI8o0sezOP/wRjlCsWMeNUI8LgNy0gsQK5SoZxj6+MrIlfJXcCVyqA9CObDmyLkekteCj9tVVOsGOYGfwo9wnoSYVIKxb7Y6Zsm5wCiQXAyE6VmO7pRkBhrg9smQ4OMH+915ssJY/nCtALItrGPgi6t9YUXeOtE3UduDr3yT256iFFsTSR0By5TWOGhdW1qhI8UQ09BbIMHVOY+EIMVbQ5MAiFs5E7ydI6s4LMBr++b7hxGFLQKLIf5Ec55l2UoqB5RqCXRVQIsJ2I0WWPIttQXZg+8BUBQ0p+3svNFCp0wHpkclrEMX4Yq7Z/F731UFhdvQprz5DOyZC0M3JK4HitJSJ20WDimJMiSHaoZgTBKZnyT83hCWUxyfQGr+lgc/XrzH31zx0DhR+zhETdZT/wwkDu3cpteVkv2usoqTyiS+fQRaLQgPfkW8ze+dr9EvGtfF6AFtwDGsdvvJwloA/KEfaJiR8+PuXmBnTEhtqL047lHkp+JZx+AslvlOOAqzJ/1K8LQWG/G9EHfL5PkpMbESQGi17Ik8hlBfrz/p6xeUvxMbk1EMzet08eZM1X9IIJ6aPWdIKDxUud7zG8FzJwu2wjXDAXHS3eifD6zq7jqBC1BgEAX48f+Mz8cYhcrxKtcZ8TEyA+nnjwgoy7l8Ht5xlypr2ZYkGThwKaL/i9Mzd9XjClX9AsSNp1VHtajF+WB3cRPwsvGsS8DzNz5ghV0uEF0F+H3meXWTcd4acP/1iwlZFHtZuYxmQvBckWSlWC2aBG4onI267UF/tdGi4PTTDdc2sb9T8paj3rHrW9VD4DY51EFQOi+1x8tTJvk4Ln91qo6OTf4m2d9EQdBDK8Dqxkj5/UQqoD0UDh7Xu4CtywStI0qI6AdwqVMexGakjGCAqkkyGAeoRAWQNwsmRAdp99KF2UH5iSudGvBqBZUZE7IFi/QpRR2l1hHRswIRvAMC1C9uPWnhLApWrcN08m0CkL6PjFc383J4gQmxlLROWp/EE9RiZxunmB/QwrcJDA4c8/d4Yyfp+V4209hRGrm+1G3RzGg9DwEmBbiwXiLCW2i+GmOsIy84XiDiT06sEqaJ/2J2ygG8wOdvjo5jE49XuP5hkVrzgA1kAMiaw4ZeU/wVADiDmjEO+hrMgUgvM5jJIXvPCGKqvpt8wHd8LsYPpzS0fF1kfOsah3boKv9JNYXL4Nixh6j4XOhNDbWDz42SLX+Uw+/yW1sgP0fS13Ty5SwYOTCUalFXpFE0Vclp2/ZyTCfBRwU9egwtsCCRFMZQRr16NyFk5R7QyREupvHAVizNxSxXgRuDGhWMTwFkOftmnTnNZy0ORYVVgog+/WB7EyFVHpu34grbPbspstUZy5tsreuSyn3pYGqXO5e3A5rJdyDPqQkmxPmXqa/V3SwfwUYQU+oCI3gy/9opTRfXEm3wf5JshoFE4UdrQ5b+ieGG0v0QgKb06SOqXIxeBjY8LqUn5YvIIOO+QBampoH5IflE//BGa8oyBx33V0hfmcdTF93RqzorKiXx0hCzvq/8TibYcfO1DVQxlDLE3IVGp3ufUVyNArnjElB0j4nq6BNblc0ERqh7Qr9hgFvJ2VOJmBCvb2jxlXEMuZJgaUcswza3pWMl+0J0eVinXWGQQDSElqEc6Tn5f6cFIE+O52/03iB8bRVLSapCUxhlYp+0hMdOlkCmk8XLoXhz6eEZQFsvUiZ1aAjbBv9ygHo3ObASmM3wfZbtxuaUfyABRCK+zkYF+QcS6AsfThX3e0p8GRPjAyKf6MfuslWochxUhgaI+Ncib5VuTPZm+TfJpFqE+wNB8xBZfiql9O9GPzNOd7MgF9OQMifqJnozXmu7ZWri8umg/u2fPxW+MfEj9ddvh1uEWEEhFMThWdSJWvLCtWyZr9rWm6Ml06Uc7XQ11Dg9Og9uXf9W//L83iTAdLJ/GyUEiAhdYQzbGLi1JOhZ2bOF80DYu9b9W4429VUHesY5Qt4+fYVPQnZNxHhqJqEhZCHOEI85v/AUwH3OFZcUsWsv036w/VWidWInOKVfhJS1ku62mWaXNa+OMl0Ec/YTHxcx7SuOtOa2UI4Z4r9OLKK+9B4MCaSTEfgCrNKr8R6D5b5qyA2s/efaAg4m69m9UDL0ULsRYrm5PgXmOAcZGcQ9/qxXSY3zCF12kQMgl3ZL3hfgRFlZbADzUl7/t6ov33X2gnyRCNMXk0Eajq9nTDJws3SM0YHLNtC0Y5dgRGm/pEshA+bFe9FPilBt5+aSKQRUAHpqIvZjvUKWL5DSnFP76h0fL6aTY7GxxXQmuqSYWx+oHGNhuPkRWbIGA8SYVKXqUUFtDf+6N0kuxExbL0iUFBwAHrxGCWL/46xupL7mS7JctiT5S4M06sDWXg1J3S8byO056gfmz9KdAHGF0yl0nR/pLfkpCRFZVYFgLR8ogCyl6OQYuAFNri3P9TA8P44sVprkZxy0hWAjX6XhS1oPucDHA1Uch132acUemmLp9wID93i57DiyxgkG9e3RmcuYYWUEuc62y3dc1RjV5hFryF4K1HJE/LxS/QozwBnziZRQar+zh+gjGCigNjrQAmykcMUUwGwOA8c9LZgugYLAlg+UZ6FswDHaW7TOxLl92aAObkIMlcaArc4lpwbvmSvfhJMBNbagfrMy3CIHBkE0Y6mP8uLbqTL/RoZ7RShWy/3vmlgMT80QGBh/mLQ0ZjwAGYrnHxHetZihFku/7PPwVtVSaVEsWGkxXrWYzru3exbPhQP06yATvjVjb/hStTGwyGXEcVRcUx4j9fD1Byuj7yzyKNtfFnlP0ouAl2GVvLGE5HvkJDJJOHNKr1n+53cV7R/FWZmsGh8FZXkXkm8B6927IXF7TysJ0s/6to45eXwSmufsdwh9fYBG07m35eoDXPhEhU5sHOh2FgG3pFoixLOfsGY6aRMzTJUXYiyTGAwGsXc9XbTXJctz7gWrMlBfUarRDiitQUW5CjvNZrchw1t2Hy9HFhP/4lMOBqtR/RlfsokX8RJjg1HXAilUYcAlhXeshi80xs3L2zrZvpgk8Eo98QW9JNcYjdV65jBpF0HmWusMPyqEBipoW6wFWx0/NWLPn0wM7Q226/BOwQburSFjSCtPwCCtvd+Qbws9BUIeg3+DeS6yZvwfCuQzogDZ3weZZ3ML7IEvp4s+iH0ypovaLNwUE0obKVyY7P2kDijT0MKGd/HE/JZOEz54SQUjJYxGXk+Q5Iiz/q9HCb80sZ4L8ghUh+DkpSke7fzTzx1M6x3ajHUpWPvnbZG7uQKlrnKB+w3RXLLnWB8xJeDE/ZcT1DsPXao01VkPZHEaky/VSzmgvg0PP3wo12gKJXeYu+lTfJ3zIvAUhy64rzVYTwEO9bfgv9NQ18hWAmKnWWTS4xY8VDm25oG3R1LTNtCYwxfataYPBcaymlA8ZRRPbqk2ilB7MPijggGY+USs2RbNHnOZU3da8q0SFJsekNj5RAq93ZRMzI8rhTHEqwZujYTJOeKJoZrwO/t17/S8rlwcYgXM/KdsD0CvxggmBkuMUoZk12vE1c5F8EYnTzZk9h+NwRrtVAu7tYUDZJtczJB17oWce3Zc6hpleOxJ48P1jOtyu7xWcctuiRWv11cIq14D2Crm2sHggYhboLXWgWO7xmP08GuFGBJjG0VPWECIrfqMHM3yAY3WMJlu9KpIKZmyqLrs/rfSadl0uI24ceBoZd/deiCkxZguikUI6uWH2VcH6jJC7hHZrfG9c1bKqaj9aL0J1GzxONJt2Sz+Q4lC51cKpHSfSyA8lv4utAHLs5/NV2+tfsKMPYC2MAIw27IDdnD0E/UYvUU9Q4+2Mnv5EZJVMltNb/aPRqEixML8wBS4WdDX6cqiA3EcJFvwbl6H+IVw4/jvQM9dGrwfl+QW35XZthPtIwWXr7hU22d9zpb7Bf+1h8RvV2uIAGWunPQkJiTBaJUu/5NebG2ojoOiGKq4DfIdZ64JOdpKjDVPRMF9vwd9SOi/64clxNF4fXNjDv7vzNA6F5EJhqQcyiD22dZlX3adB8c7SGXd4/p6wL/+FxFRMLEca/T4lCfI/+TpdcMLmf1HvjVkVb8JKw9dFzZDwQjocmE22uV35jxQDN7yq6+UjJQJM7MvnPshN7E3Q6OhqUKxyFsHeInD6BjEhVoz2rp5Rm6a7fAGc/MHTTi8zXiaObdYQVtGLyTaSD8V4nlAfPecvPzxXMxr1pxiEhcnkC10JZZAQDlK5Be9KL6WyNq7q9EgGrVKwv8sKSp/jDX6wCgi+nwa5PHlNeMXEIikeo3hZEWVavHnRv8CFleqFtNxKwwz0kIvW3iXupHMpCGiAOH5v7ndCqfD7d2bMKnJZuqM9qHqQEiP/ru6F0vdL4N3nSqbZI3nhb5B/uvPsFyCt5kl4lbp2/axvTmqGydLFGOKaf2YLlo0dUpesi+Z+SSub2yU/mmT9d5xSuv7DZ+LTNbnaL4CzwPhlNG4CG/bPn9h8mep9ZszykjxOvzhqME2CCCUfeTQH2VeDmRcPJFRPv53NDMck15n7cqvRi3jcBqWscbUxXpJLO2FcbV8kC1k607vusv0g12acJqYQI0eu7Mf/S/ADXV+2QjTNpsHF4JWiD7C8uNeO9UbonKwsehzy2V8TE3QTWZIjusLWFg1oBoUJSUsh4dgUJY980wrvAUdGp7LyX9Xry9dsLvGGk/NMvASGcWDFRYkSOeFWiJyn5hFFTIKvWztRb9K0J5HUY5Ob1XQ9x2RwitMgrVp8xkAuSmk3TANb9xldUj3UohDWRIzilKq0TCuM2SrYXm1HJu91uzXxedA3lVyWeib7tfYCPa3Rjq+1/Ab9CNHLrZEGNhFi7nReC1BOLQrxQAoqUH0bPHIe0ifdYquTSMErXAvf8N72Jw6ij6tuv7jgCPptm9O2dhbeypA9GTpT9I7PDWUL/4tpnYFD1kxvdjHM+8TO1C7o9WuDCJQBuSJHIMjj0jY3JrHFiN7xAUuGN4l4t6KFd/YWX2tR5Etsms/cBcDhaivx8AF4INJr+ENMZhrCxvgkg2H7WKZciPjvojQwXrcLtvWPqikR7iO/YCHPYFnnmEG5SwinGgzepHuN0OEmd48RyCpRzsOuzTW2/xy3FYhwvsURZ3mrFepeUvD4dGVZOj7YN7gNAm++KOiuZTSXQ1Wt4pjH7/aWf4CRMFPhosfJ+5gJwC4BQFLX3Cbu8iMV/IAiFY6vPeMFpmRetP49Xn4V/GLhKktt5vq2EmwPXuYOmH78WjnOeC/g/TD+/qb0pVBfbiunLzS/AnFuxPpc364kQ8SZwTI5XFBPzumwH5HlhoQedbd5RN8ou7H79FAlpha9YJFKcDQrrOgKqw8/n/xyvnppyFKKaC5kLoKk6RsHrG51mFMQmO/l6tOkYNzCsM37RII18od5/OvfBNOrmKe2vxv8jtbex4bXJbGlDT40FfG9ZQvTj1avvrnVzjrJwI35+MDa0A/C7F+QXC0cXq1F7fhZe3R3txjV5TENdEx4UaPpF/io0/5X2ciXWEy34xQpK/rctFAqz5IjIjGj2VcPI3xTYURN65OKq14RtaXYtRrUSCpCozC+yoy0w5mKfNhPDEc5/mUsGkgMS1RGbX3vQvI1YZSjKcso6dEv9ZscsAuh/541fHbV6NAvDblU1dPak/JseBsmfC9LIan+jZVAU0U7zjCBZcLLwyTQlJ7TumcikQy4KBlLIY4bL2F38uWNVjFSuWQO+RiGJiCYQ8zNIy4kNplXB33kifjc43vc3uA8n8DVxz30JxmGxPcBhu1cNZAMpH+AphwCBucAoJ8HOIJPDQqCwgXBj4BeD43xZpqRO5o1QlKxz1Hofl+b0HPesVItiecVoUFuqRIWz8ln3EqFBJeOOqHCz+iopba16YZDp/ComjEsVIob6iADQeI/to7t0x1nAM4zDhrYd38dKRsi3LynsZJga4t9mbleHFR5My/tA7t8MqcqkUuxF93t6mCnKuMMGwOmguVDYz1YhTeF7exhG+5dzf3yJJb7fXahsfBEMZuESCsQeTybnOZ4DmaGHJImGeCa/tELFUkWC8kWLC9EaNFG0Ym+FfF5IkQL0VOxY3fch72DuIrS//wHEOWIs2ZndZeETQxkzVBhMhg6RWqIrw3rIiQVIS0WHfbKmLLlAa9Yn8qt2v2F3rU7/gPifgJJrGhnt4q2fAGEPcIXmFs8jS/gfn29kuEt1noIoJV4d0DP1NhnwmWQ3Ka5glg7epQwxWibJAwtW4+sAhcK5MDj01iFJUsW2BcK0I9WVIiIl0hzcuiEB+Ut8bR+P8KQJ3hsbZEtIE2HNPOMwVHZLu/+Udjybh/hdNQN3BGq2JkFg5BX6JiUVskpFgOZCA92q/UYJ9oMZJXnPg4+zwpl+cPEUZP4NFBu0YQOPZF85KHF9TTk9ZQuRjNRcyiWjKTpue+QgyzDk9uxUBDFqjhiM9yO1Viak96rqdub3Qmf0O6+ng9ONjW6FunLwyXTKSNhaC2owyd6p3X9uC2X1GPKbhOefWYAp1vujOoLFSNYGnWJv/9QczKQGsbXcetEaP/ldP4Pm4WTug3MY7FJBruPAeyQrZKmXxuk7KOUNT7Db3AmagbodFaGXBB0kw64I2p3M7mGKB6Iv2TORr6Yp34Hy0RC8sjmbzYZaeLDYfJHI1LUyFQ2bGOvXZfEiJr7gXzK58XW8wem24GdDCHwlmrJKQwVheAjodXSIdhOdHDJ50m49wOCKpn9dIfSOuY1qfKgx6wFQtuoryxgZj/qwSVnWIek/ihoxolcjWquAHjUfCNhTVL3aXAnm96ZlBJQiN8NXdkqBX48Tzngn8BCc/u4Jp4vbifwVbb98VcKBz1smV7pc6zwHDghz6fwA9TNeyeQ+MIHfrb//3Mmy7Kye4eOb5xbWqsmmB5oTbBXt3ncGyxj5MWzLifkWPKcX2V9wTT7WVas5B9+I4+c8lcHlXI8iHY4qV7KZ5m9DFF0aT8keJVg8a7oA2dc/drVNGW/kuahEm3b3aRxmehabbbvVJu8cifIPCsKonfCfeHFbFf/37iwos3V7B9cro0EQBKRz7xmLMIAGnSkoUgSfdqU662RKfi7/VjrQx8RLfUkB8ycxgMsLKo3LaYuW42YjoDi++psqmAf/rCdP+lzAZtBxadAbKmAGgMLYLH4O0TVuMY5wZ9BWWXESR3guOfaVDNDMe/1xu4+dVciytrJM2nSz/8bgxBJgzDOcjy4xB5suyclEuf/SKKQtLOK7Di3K6CqAeQzwKIBv8fz3Ufyh2K4M4wUd27yqDLBzLkJQStR0veSG3yoCBxOmJD4lpqfYWU+sJe1+VYcm6Bgb5zfnWKdNXzjqaHWJRBuuyWoOnP9H0uJFUdi7Du4sttEB8/64IO+kMtjjzc7gClH3opo98WzqdvixQvjPt4yMaCrcSnai9K2I/v7+Mma5A4LWI/BZB1Gq0Z3aBe34sTKa6bEFTryCYSzoIm7N7xSoXcd0GQRMdTnD8QsO+VRGHBlKwHGEW5kZ/OgLrJxmyPqZcoNeTSUVdHAGEz4HpFCCj9d9vOi6i7IVD398Q+kYTJEw1frtU3CoudwYlyG+5dQlUClW5YfgseOSSwNi/ggqeQPP7yliPxHxXDbFjm07Y+icalwHVWm5TtEvq58HtByxDmSLeFSk7CQlJgSuvZ1nOVeoRswIW5t6SlIktr04crVuyYRdrc8W3gExJYTcWsKeQ/sXRhll6m/nr7lIXy1QMijpHYSJDAOtcUG6XbDuAdwBAL9H5FMEPTVPZ9ty1p7B01Xx6I2no2PRErg/88EWnmyZPkd5SgZuWBkD/v/NMxY0pLezsjJytMZlDEN3cjszsameCREl5s6xurBd8XyImyW3Sai2uJvF6RwLtzmUmaLi6AipzypRqpZSYjd600EmCssf9XsxfrxOaocfV7Jqqc9xz5pUmRBapUudaaLiYcieHB6rEYFPcQipn0qC2J4RYMjqrJnEmfgcUQJ9XHrdg0NrAy4Uifnn+CZWb3tPi3TsXbkRD02G+Xu4mvsWmny+M6009w6ECRaHzSGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":487,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":487,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"b084305a-2d2d-4d86-9f05-854bce1fa8e3"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0154Ku8wfk32irtpYiPp7RnC","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser, built with TypeScript. Let me create a complete Tetris game with all the standard mechanics.\n\nLet me plan the structure:\n1. `index.html` - The main HTML file\n2. `style.css` - Styling for the game\n3. `src/tetris.ts` - The TypeScript game logic\n4. `tsconfig.json` - TypeScript configuration\n\nThe game should include:\n- All 7 Tetromino pieces (I, O, T, S, Z, J, L)\n\n\n- Piece rotation, line clearing, and standard Tetris scoring with increasing speed\n- Keyboard controls using arrow keys and Z for rotation, plus a next piece preview, level and score displays, and game over detection\n\nI'll build this as a single-page app using a canvas element for rendering. The architecture will have a 10x20 game board, piece definitions with rotation states, a game loop using requestAnimationFrame, keyboard listeners, and a scoring system where single lines earn 100 points times the level, with higher multipliers for clearing multiple lines simultaneously.\n\nLevels advance every 10 lines cleared and speed increases accordingly. I'm setting up a TypeScript project with separate files for HTML, CSS, and game logic, then compiling it to JavaScript for browser execution.\n\nWriting the Tetris game code... Writing the game logic... Defining the tetromino pieces...\n\nNow I'm setting up the main TetrisGame class with canvas rendering contexts for both the main board and next piece preview, along with game state variables like score, level, and lines cleared, plus timing logic for piece drops.\n\nWriting the full implementation... Defining the tetromino shapes and wall kick offsets for rotation... Defining the wall kick offsets for the I-piece rotations...\n\nActually, I think I'm overcomplicating this with full SRS wall kicks. Let me just build a straightforward Tetris implementation with basic wall kick logic that tries simple left and right shifts when a rotation would otherwise fail.\n\nWriting the complete game code... I'm realizing that hardcoding all the rotation states for each piece is going to be messy and error-prone, so instead I'll implement a matrix rotation function that can dynamically rotate any piece shape when needed.\n\nWriting rotation logic...\n\nNow I'm settling on a concrete plan: I'll create the HTML structure for the game board, style it with CSS, then build out the core Tetris logic in TypeScript with piece definitions, collision detection, and game state management.\n\nSetting up project files... Building the HTML structure... Defining the piece shapes and colors... Writing rotation and piece logic... Writing the constructor... Writing game controls... Writing game loop logic... Still writing game logic... Implementing wall kick logic... Finishing the piece locking logic where I place the locked piece onto the board, check for game over if it extends above the top, then clear any completed lines and spawn the next piece. Now I'm implementing the line-clearing function...\n\nWriting game logic... Writing game logic... Writing the rendering logic... Now I'm iterating through the board to render any placed blocks with their corresponding colors, then drawing the ghost piece preview by checking the current piece's shape and positioning it at the calculated drop location.\n\nStill writing rendering logic... Writing the next piece preview... Writing the stylesheet... Still writing styles... Writing component styles...\n\nNow I need to think through the `spawnPiece` function more carefully. The problem is that `nextPieceShape` starts as null, so on the first spawn I need to generate both the current piece and queue up the next one. Let me handle that initialization properly by checking if the next piece exists and generating it if needed, then moving it to the current piece and creating a fresh next piece.\n\nAfter the piece spawns, I should check if it immediately collides with the board—if so, the game is over since there's no room for a new piece.\n\nNow I'm reconsidering the I piece positioning. With the standard tetromino shape where the filled cells are in the middle row, spawning at y=0 means those cells actually occupy y=1 on the board. This creates an offset where the piece effectively starts one row above the visible play area, which complicates collision detection. I need to think through whether pieces should spawn with a negative y offset to account for their internal padding, or if the collision logic should handle this differently. I'm realizing the y=-2 approach adds unnecessary complexity with off-screen rows. Let me stick with y=0 as the starting position and just adjust the I piece's shape so it spawns with the filled row visible at the top of the board, then handle game-over detection by checking if any filled cells occupy the top rows when a new piece can't be placed. Implementing collision detection...\n\nI'll create a helper function that finds the first filled row in a piece's shape and uses that to calculate the correct spawn Y position, so pieces appear at the top of the board without overlapping. Then I'll move forward with the full implementation, including the scoring system.\n\nFor scoring, I'm using the standard Tetris table where clearing more lines gives exponentially higher points multiplied by the current level. For the drop speed, I'll start with a simpler linear progression rather than the complex exponential formula—each level increases speed by reducing the drop interval, starting at 1000ms for level 1 and decreasing by about 100ms per level.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"03a4f53f-fe70-488f-ae2e-87c03efc9dde"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0154Ku8wfk32irtpYiPp7RnC","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016uQ5DTpDJb3xNBLaAQPLMr","name":"Bash","input":{"command":"ls /tmp/loop-bench-rcr2cfzb","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"843af926-3bc8-49b5-bdc0-2f79bd4404a8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_016uQ5DTpDJb3xNBLaAQPLMr","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"9a1d5d67-6b6f-440e-b7bc-3d9393bf5878","timestamp":"2026-04-03T21:16:14.501Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01BhZ1GbD4RyeWraevL5H4NK","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Y2PsrUGJ5tPSY7cUjoH9XH","name":"Read","input":{"file_path":"/tmp/loop-bench-rcr2cfzb/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":13242,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":13242,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"c4175c30-ec53-4826-8725-a9cbce7b21a8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Y2PsrUGJ5tPSY7cUjoH9XH","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-rcr2cfzb\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"ea240d4a-74d1-40e0-8fec-a5c899ae88f6","timestamp":"2026-04-03T21:16:16.538Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-rcr2cfzb/package.json","content":"{\n \"name\": \"loop-bench-rcr2cfzb\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01TEvfuEQrMyHMbD3rSniVKQ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good, TypeScript is already installed. Let me check what's in node_modules to confirm TypeScript is available, and then create my project files.\n\nLet me now create all the files:\n1. `tsconfig.json`\n2. `index.html`\n3. `style.css`\n4. `src/tetris.ts`\n\nAnd update `package.json` to add build scripts.","signature":"EuQDClsIDBgCKkCd0JkYjxfj/PoXdT31BjvlardPTrTcN4gyZOgLLBEYf2CBQ5DP1s4077KWI+3WY07BsQDsNJe1KtfarnycGro/MhFjbGF1ZGUtc29ubmV0LTQtNjgAEgw70lMg3Uas0VZibKgaDCtQ08XZchac/YT/ByIwmgBW/s+7dSUr6bZElR4ddJo/5F4/XlyhoCKZBBuLIcmCi86rIgs/Bu/+DAdoVDCVKrYCXYUvOy7SUt7NynMX7tB3Okl+/kViEhn7JJN6aCdzJRRmC3pHcSyt9dEC7QOWZjCq2p1/S7WfVu4pkhPk+l4k64Oz/AJXQnW4L/vMqMSH22KEpbUhK7E++3d787X+kZNQdJsWrFRWp965zKR/E8E188gpla6RlznuBBlus9T2ZO+t/S8z9I5XpHd5FA97cznuH7LxChrpbvXC1/FTpnPgHPFiQXV8KXIE2iGN8ckkPX1IEDewRd9gNp6tNf8U8EpI2cRBwd4ZLCbkevYjNeKqcc59LfSoKU5JduAsyncJedNzLBRTC1qJTcxTtBB3+OIST47L7ZMDoKRMA6+6/bQZvZEzwqWdd9HfUrYZSzNUPzPjRy94yh18+TSzwAUWxY4SdBB3oNmofBx517IDi2UMkTxe4FlyORgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":17970,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"4f03969f-17fb-4e0a-9a40-0fff39d7d9d0"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01TEvfuEQrMyHMbD3rSniVKQ","type":"message","role":"assistant","content":[{"type":"text","text":"Good — TypeScript is already installed. Let me build the full game now."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":17970,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"3554cfb6-5c52-449e-8148-51ad5616425f"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01TEvfuEQrMyHMbD3rSniVKQ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TLaYkQTfeEiKCMAcrVgbrF","name":"Bash","input":{"command":"ls /tmp/loop-bench-rcr2cfzb/node_modules/.bin/ | grep tsc","description":"Check tsc binary is available"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":17970,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"0064db24-207e-4d11-a77d-8bd54451a04a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TLaYkQTfeEiKCMAcrVgbrF","type":"tool_result","content":"tsc","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"c875ae3b-df2a-4e8e-9eb2-5c06c6dbbbb8","timestamp":"2026-04-03T21:16:21.451Z","tool_use_result":{"stdout":"tsc","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01TEvfuEQrMyHMbD3rSniVKQ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JrUJiaczvZnBCMZptnTc65","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-rcr2cfzb/src /tmp/loop-bench-rcr2cfzb/dist","description":"Create src and dist directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":17970,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"85e1e36d-30e5-458f-9635-ac0ff065d4b0"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JrUJiaczvZnBCMZptnTc65","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"a8aa92ae-2bf4-471b-9bd1-300ea1645565","timestamp":"2026-04-03T21:16:21.865Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01UgwbNYqeusbR6muQQQwMXJ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JWfkXGfoAg7qQS6ApgHdg1","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-rcr2cfzb/package.json","old_string":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","new_string":" \"scripts\": {\n \"build\": \"tsc\",\n \"watch\": \"tsc --watch\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":375,"cache_read_input_tokens":18365,"cache_creation":{"ephemeral_5m_input_tokens":375,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"42ccee74-8b9c-4fce-9fbc-2640dbed1a2b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JWfkXGfoAg7qQS6ApgHdg1","type":"tool_result","content":"The file /tmp/loop-bench-rcr2cfzb/package.json has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"e160f4e0-330f-41a2-a5ca-dfc458d931ba","timestamp":"2026-04-03T21:16:24.959Z","tool_use_result":{"filePath":"/tmp/loop-bench-rcr2cfzb/package.json","oldString":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","newString":" \"scripts\": {\n \"build\": \"tsc\",\n \"watch\": \"tsc --watch\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","originalFile":"{\n \"name\": \"loop-bench-rcr2cfzb\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","structuredPatch":[{"oldStart":4,"oldLines":6,"newStart":4,"newLines":8,"lines":[" \"description\": \"\","," \"main\": \"index.js\","," \"scripts\": {","+ \"build\": \"tsc\",","+ \"watch\": \"tsc --watch\","," \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\""," },"," \"keywords\": [],"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NDwXMpVNVHp1PL4WJNrxVU","type":"message","role":"assistant","content":[{"type":"text","text":"Now let's write `tsconfig.json`, `index.html`, `style.css`, and the main TypeScript source:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":608,"cache_read_input_tokens":18365,"cache_creation":{"ephemeral_5m_input_tokens":608,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"c40da256-f317-48f5-82a0-8e1d59724e43"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NDwXMpVNVHp1PL4WJNrxVU","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01AsXgRDJLha2tZMxKRQc7yp","name":"Bash","input":{"command":"cat > /tmp/loop-bench-rcr2cfzb/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"None\",\n \"lib\": [\"ES2017\", \"DOM\"],\n \"outFile\": \"dist/tetris.js\",\n \"rootDir\": \"src\",\n \"strict\": true,\n \"noImplicitAny\": true,\n \"noUnusedLocals\": true,\n \"noUnusedParameters\": true,\n \"sourceMap\": true\n },\n \"include\": [\"src/**/*.ts\"]\n}\nEOF","description":"Write tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":608,"cache_read_input_tokens":18365,"cache_creation":{"ephemeral_5m_input_tokens":608,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"4a01ae35-9926-4584-bd27-bb953253d7aa"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01AsXgRDJLha2tZMxKRQc7yp","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"d2bfb199-295a-460f-865a-a193c757fc31","timestamp":"2026-04-03T21:16:28.764Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LEcJcLRzmjKbEQFErJF9KU","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_0166riQfdjvGztNfuEXHLBr7","name":"Bash","input":{"command":"cat > /tmp/loop-bench-rcr2cfzb/style.css << 'CSSEOF'\n/* ─── Reset & Base ─────────────────────────────────────────────────────────── */\n*, *::before, *::after {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\nbody {\n background: #0d0d1a;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n font-family: 'Segoe UI', Arial, sans-serif;\n color: #e0e0e0;\n user-select: none;\n}\n\nh1.game-title {\n font-size: 2.2rem;\n letter-spacing: 0.3em;\n color: #00f0f0;\n text-shadow: 0 0 16px #00f0f080, 0 0 40px #00f0f040;\n margin-bottom: 18px;\n text-transform: uppercase;\n}\n\n/* ─── Layout ────────────────────────────────────────────────────────────────── */\n.game-wrapper {\n display: flex;\n gap: 20px;\n align-items: flex-start;\n}\n\n/* ─── Main Canvas ───────────────────────────────────────────────────────────── */\n#game-canvas {\n display: block;\n border: 2px solid #2a2a4a;\n box-shadow: 0 0 30px #00f0f030, 0 0 2px #00f0f080;\n background: #080810;\n}\n\n/* ─── Sidebar ───────────────────────────────────────────────────────────────── */\n.sidebar {\n display: flex;\n flex-direction: column;\n gap: 12px;\n width: 148px;\n flex-shrink: 0;\n}\n\n/* ─── Info Panels ───────────────────────────────────────────────────────────── */\n.panel {\n background: #111128;\n border: 1px solid #2a2a4a;\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n}\n\n.panel-label {\n font-size: 0.65rem;\n letter-spacing: 0.18em;\n color: #5a5a8a;\n text-transform: uppercase;\n margin-bottom: 4px;\n}\n\n.panel-value {\n font-size: 1.6rem;\n font-weight: 700;\n color: #00f0f0;\n text-shadow: 0 0 10px #00f0f060;\n line-height: 1.1;\n min-height: 1.8rem;\n}\n\n/* ─── Next Piece Preview ────────────────────────────────────────────────────── */\n.next-panel {\n background: #111128;\n border: 1px solid #2a2a4a;\n border-radius: 10px;\n padding: 10px 14px;\n text-align: center;\n}\n\n.next-panel .panel-label {\n font-size: 0.65rem;\n letter-spacing: 0.18em;\n color: #5a5a8a;\n text-transform: uppercase;\n margin-bottom: 8px;\n}\n\n#next-canvas {\n display: block;\n margin: 0 auto;\n background: #080810;\n border-radius: 4px;\n border: 1px solid #1e1e38;\n}\n\n/* ─── Controls Reference ────────────────────────────────────────────────────── */\n.controls-panel {\n background: #111128;\n border: 1px solid #2a2a4a;\n border-radius: 10px;\n padding: 10px 14px;\n font-size: 0.72rem;\n color: #6a6a9a;\n}\n\n.controls-panel .panel-label {\n font-size: 0.65rem;\n letter-spacing: 0.18em;\n color: #5a5a8a;\n text-transform: uppercase;\n margin-bottom: 8px;\n}\n\n.control-row {\n display: flex;\n justify-content: space-between;\n margin: 4px 0;\n gap: 6px;\n}\n\n.key {\n background: #1e1e38;\n border: 1px solid #3a3a6a;\n border-radius: 4px;\n padding: 1px 5px;\n font-size: 0.68rem;\n color: #a0a0d0;\n white-space: nowrap;\n font-family: monospace;\n}\n\n.action {\n color: #8a8ab0;\n font-size: 0.68rem;\n}\n\n/* ─── Buttons ───────────────────────────────────────────────────────────────── */\n.btn {\n background: #e94560;\n color: #fff;\n border: none;\n padding: 10px 16px;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.85rem;\n font-weight: 700;\n letter-spacing: 0.06em;\n text-transform: uppercase;\n width: 100%;\n transition: background 0.15s, transform 0.1s, box-shadow 0.15s;\n box-shadow: 0 0 10px #e9456040;\n}\n\n.btn:hover {\n background: #ff5575;\n box-shadow: 0 0 18px #e9456070;\n transform: translateY(-1px);\n}\n\n.btn:active {\n transform: translateY(0);\n}\n\n/* ─── Overlay ───────────────────────────────────────────────────────────────── */\n.overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.75);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 100;\n backdrop-filter: blur(3px);\n}\n\n.overlay.hidden {\n display: none;\n}\n\n.overlay-box {\n background: #111128;\n border: 2px solid #e94560;\n border-radius: 16px;\n padding: 44px 48px;\n text-align: center;\n box-shadow: 0 0 40px #e9456040;\n min-width: 260px;\n}\n\n.overlay-box h2 {\n font-size: 2.4rem;\n font-weight: 900;\n letter-spacing: 0.12em;\n color: #00f0f0;\n text-shadow: 0 0 20px #00f0f0, 0 0 50px #00f0f040;\n margin-bottom: 12px;\n text-transform: uppercase;\n}\n\n.overlay-box .sub {\n font-size: 0.9rem;\n color: #8888aa;\n margin-bottom: 8px;\n}\n\n.overlay-box .final-score {\n font-size: 1.5rem;\n color: #f0f000;\n text-shadow: 0 0 10px #f0f00060;\n font-weight: 700;\n margin-bottom: 28px;\n}\n\n.overlay-box .btn {\n width: auto;\n padding: 12px 36px;\n font-size: 0.9rem;\n}\n\n/* ─── Line-clear flash ──────────────────────────────────────────────────────── */\n@keyframes flash {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.15; }\n}\n\n.flash {\n animation: flash 0.18s ease-in-out 2;\n}\nCSSEOF","description":"Write style.css"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":274,"cache_read_input_tokens":18973,"cache_creation":{"ephemeral_5m_input_tokens":274,"ephemeral_1h_input_tokens":0},"output_tokens":57,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"ca9b8e97-e303-40ae-a953-8812980f7b72"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_0166riQfdjvGztNfuEXHLBr7","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"72e5175a-5817-4446-949e-bdf164f1bb16","timestamp":"2026-04-03T21:16:54.085Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01KZEwmcZqPJy516T9ZYakWW","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Umh2xuwys1YyjNbBZEYp92","name":"Bash","input":{"command":"cat > /tmp/loop-bench-rcr2cfzb/index.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <link rel=\"stylesheet\" href=\"style.css\" />\n</head>\n<body>\n\n <h1 class=\"game-title\">Tetris</h1>\n\n <div class=\"game-wrapper\">\n\n <!-- Main board -->\n <canvas id=\"game-canvas\" width=\"300\" height=\"600\"></canvas>\n\n <!-- Sidebar -->\n <div class=\"sidebar\">\n\n <!-- Next piece -->\n <div class=\"next-panel\">\n <div class=\"panel-label\">Next</div>\n <canvas id=\"next-canvas\" width=\"120\" height=\"100\"></canvas>\n </div>\n\n <!-- Score -->\n <div class=\"panel\">\n <div class=\"panel-label\">Score</div>\n <div class=\"panel-value\" id=\"score\">0</div>\n </div>\n\n <!-- Level -->\n <div class=\"panel\">\n <div class=\"panel-label\">Level</div>\n <div class=\"panel-value\" id=\"level\">1</div>\n </div>\n\n <!-- Lines -->\n <div class=\"panel\">\n <div class=\"panel-label\">Lines</div>\n <div class=\"panel-value\" id=\"lines\">0</div>\n </div>\n\n <!-- Controls reference -->\n <div class=\"controls-panel\">\n <div class=\"panel-label\">Controls</div>\n <div class=\"control-row\"><span class=\"key\">← →</span><span class=\"action\">Move</span></div>\n <div class=\"control-row\"><span class=\"key\">↑</span><span class=\"action\">Rotate CW</span></div>\n <div class=\"control-row\"><span class=\"key\">Z</span><span class=\"action\">Rotate CCW</span></div>\n <div class=\"control-row\"><span class=\"key\">↓</span><span class=\"action\">Soft drop</span></div>\n <div class=\"control-row\"><span class=\"key\">Space</span><span class=\"action\">Hard drop</span></div>\n <div class=\"control-row\"><span class=\"key\">P</span><span class=\"action\">Pause</span></div>\n </div>\n\n <!-- Action buttons -->\n <button class=\"btn\" id=\"btn-new-game\">New Game</button>\n\n </div>\n </div>\n\n <!-- Overlay (start / pause / game-over) -->\n <div class=\"overlay\" id=\"overlay\">\n <div class=\"overlay-box\">\n <h2 id=\"overlay-title\">TETRIS</h2>\n <p class=\"sub\" id=\"overlay-sub\">Use arrow keys to play</p>\n <p class=\"final-score hidden\" id=\"overlay-score\"></p>\n <button class=\"btn\" id=\"overlay-btn\">Start Game</button>\n </div>\n </div>\n\n <script src=\"dist/tetris.js\"></script>\n</body>\n</html>\nHTMLEOF","description":"Write index.html"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2163,"cache_read_input_tokens":19247,"cache_creation":{"ephemeral_5m_input_tokens":2163,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"4763d94a-f00d-4a0f-944d-ed21ad3aaece"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Umh2xuwys1YyjNbBZEYp92","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"5c0ad733-4c82-4c0a-8f23-18be6f7e4074","timestamp":"2026-04-03T21:17:06.671Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01B6QF8HEfKXxHgagVzzqteA","type":"message","role":"assistant","content":[{"type":"text","text":"Now the main TypeScript game file — comprehensive, clean, fully featured:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":893,"cache_read_input_tokens":21410,"cache_creation":{"ephemeral_5m_input_tokens":893,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"53fcdfdb-5fd8-4007-89c5-833be9f5d636"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01B6QF8HEfKXxHgagVzzqteA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HA2snRVmfkbbiTgUi1nvLU","name":"Bash","input":{"command":"cat > /tmp/loop-bench-rcr2cfzb/src/tetris.ts << 'TSEOF'\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 30; // px per cell on the main board\nconst NEXT_BLOCK = 22; // px per cell in the next-piece preview\n\n/** Scores for 1-4 simultaneous line clears (multiplied by level). */\nconst LINE_SCORES = [0, 100, 300, 500, 800] as const;\n\n/** How many cleared lines are needed to advance one level. */\nconst LINES_PER_LEVEL = 10;\n\n// ─── Piece definitions ────────────────────────────────────────────────────────\n\n/**\n * Each piece is stored as a numeric matrix where the value equals the colour\n * index (1-7). All pieces use a square bounding box so we can do in-place\n * 90-degree rotation with a single transpose+reverse.\n */\n\ntype Shape = number[][];\n\ninterface PieceDef {\n shape: Shape;\n colour: string;\n}\n\nconst PIECE_DEFS: PieceDef[] = [\n // 1 – I (4×4 bounding box)\n {\n colour: \"#00f0f0\",\n shape: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n },\n // 2 – O (2×2)\n {\n colour: \"#f0f000\",\n shape: [\n [2, 2],\n [2, 2],\n ],\n },\n // 3 – T (3×3)\n {\n colour: \"#a000f0\",\n shape: [\n [0, 3, 0],\n [3, 3, 3],\n [0, 0, 0],\n ],\n },\n // 4 – S (3×3)\n {\n colour: \"#00c000\",\n shape: [\n [0, 4, 4],\n [4, 4, 0],\n [0, 0, 0],\n ],\n },\n // 5 – Z (3×3)\n {\n colour: \"#f00000\",\n shape: [\n [5, 5, 0],\n [0, 5, 5],\n [0, 0, 0],\n ],\n },\n // 6 – J (3×3)\n {\n colour: \"#0040f0\",\n shape: [\n [6, 0, 0],\n [6, 6, 6],\n [0, 0, 0],\n ],\n },\n // 7 – L (3×3)\n {\n colour: \"#f0a000\",\n shape: [\n [0, 0, 7],\n [7, 7, 7],\n [0, 0, 0],\n ],\n },\n];\n\n/** Map colour index → hex string. Index 0 = empty. */\nconst COLOURS: string[] = [\n \"transparent\",\n ...PIECE_DEFS.map((p) => p.colour),\n];\n\n// ─── Matrix helpers ───────────────────────────────────────────────────────────\n\nfunction cloneMatrix(m: Shape): Shape {\n return m.map((row) => [...row]);\n}\n\n/** Rotate a square matrix 90 degrees clockwise. */\nfunction rotateCW(m: Shape): Shape {\n const N = m.length;\n const r: Shape = Array.from({ length: N }, () => Array(N).fill(0));\n for (let y = 0; y < N; y++)\n for (let x = 0; x < N; x++)\n r[x][N - 1 - y] = m[y][x];\n return r;\n}\n\n/** Rotate a square matrix 90 degrees counter-clockwise. */\nfunction rotateCCW(m: Shape): Shape {\n const N = m.length;\n const r: Shape = Array.from({ length: N }, () => Array(N).fill(0));\n for (let y = 0; y < N; y++)\n for (let x = 0; x < N; x++)\n r[N - 1 - x][y] = m[y][x];\n return r;\n}\n\n// ─── 7-bag randomiser ─────────────────────────────────────────────────────────\n\nclass Bag {\n private queue: number[] = [];\n\n next(): number {\n if (this.queue.length === 0) this.refill();\n return this.queue.shift()!;\n }\n\n private refill(): void {\n const bag = [0, 1, 2, 3, 4, 5, 6];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n this.queue.push(...bag);\n }\n}\n\n// ─── Piece (active) ───────────────────────────────────────────────────────────\n\ninterface ActivePiece {\n shape: Shape;\n typeIdx: number; // 0-based index into PIECE_DEFS\n x: number; // board column of top-left corner of bounding box\n y: number; // board row (may be negative during spawn)\n}\n\nfunction makePiece(typeIdx: number): ActivePiece {\n const shape = cloneMatrix(PIECE_DEFS[typeIdx].shape);\n // Offset y so the first non-empty row sits at board row 0\n let firstFilledRow = 0;\n for (let r = 0; r < shape.length; r++) {\n if (shape[r].some((v) => v !== 0)) { firstFilledRow = r; break; }\n }\n const x = Math.floor((COLS - shape[0].length) / 2);\n return { shape, typeIdx, x, y: -firstFilledRow };\n}\n\n// ─── Board ────────────────────────────────────────────────────────────────────\n\ntype Board = number[][];\n\nfunction makeBoard(): Board {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n}\n\n// ─── Collision ────────────────────────────────────────────────────────────────\n\nfunction collides(board: Board, shape: Shape, ox: number, oy: number): boolean {\n for (let y = 0; y < shape.length; y++) {\n for (let x = 0; x < shape[y].length; x++) {\n if (!shape[y][x]) continue;\n const bx = ox + x;\n const by = oy + y;\n if (bx < 0 || bx >= COLS) return true;\n if (by >= ROWS) return true;\n if (by >= 0 && board[by][bx]) return true;\n }\n }\n return false;\n}\n\n// ─── Wall-kick offsets (simple SRS-inspired) ──────────────────────────────────\n\n/**\n * For each rotation attempt we try these (dx, dy) offsets in order.\n * The first one that results in no collision wins.\n */\nconst KICKS_NORMAL: [number, number][] = [\n [ 0, 0],\n [-1, 0],\n [ 1, 0],\n [ 0, -1],\n [-1, -1],\n [ 1, -1],\n [-2, 0],\n [ 2, 0],\n];\n\n// ─── Rendering helpers ────────────────────────────────────────────────────────\n\nfunction drawBlock(\n ctx: CanvasRenderingContext2D,\n col: number,\n row: number,\n colour: string,\n size: number,\n alpha: number = 1,\n): void {\n if (alpha <= 0) return;\n ctx.globalAlpha = alpha;\n\n const x = col * size;\n const y = row * size;\n const inset = 1;\n\n // Fill\n ctx.fillStyle = colour;\n ctx.fillRect(x, y, size, size);\n\n // Top / left highlight\n ctx.fillStyle = \"rgba(255,255,255,0.25)\";\n ctx.fillRect(x + inset, y + inset, size - inset * 2, 3);\n ctx.fillRect(x + inset, y + inset, 3, size - inset * 2);\n\n // Bottom / right shadow\n ctx.fillStyle = \"rgba(0,0,0,0.30)\";\n ctx.fillRect(x + inset, y + size - inset - 3, size - inset * 2, 3);\n ctx.fillRect(x + size - inset - 3, y + inset, 3, size - inset * 2);\n\n // Outer border\n ctx.strokeStyle = \"rgba(0,0,0,0.45)\";\n ctx.lineWidth = 0.75;\n ctx.strokeRect(x + 0.5, y + 0.5, size - 1, size - 1);\n\n ctx.globalAlpha = 1;\n}\n\n// ─── Game ─────────────────────────────────────────────────────────────────────\n\ntype GameStatus = \"idle\" | \"playing\" | \"paused\" | \"over\";\n\nclass TetrisGame {\n // DOM\n private readonly cvs: HTMLCanvasElement;\n private readonly ctx: CanvasRenderingContext2D;\n private readonly nextCvs: HTMLCanvasElement;\n private readonly nextCtx: CanvasRenderingContext2D;\n private readonly scoreEl: HTMLElement;\n private readonly levelEl: HTMLElement;\n private readonly linesEl: HTMLElement;\n private readonly overlay: HTMLElement;\n private readonly oTitle: HTMLElement;\n private readonly oSub: HTMLElement;\n private readonly oScore: HTMLElement;\n private readonly oBtn: HTMLElement;\n\n // State\n private board: Board = makeBoard();\n private piece: ActivePiece | null = null;\n private nextTypeIdx: number = 0;\n private score: number = 0;\n private level: number = 1;\n private linesCleared: number = 0;\n private status: GameStatus = \"idle\";\n\n // Timing\n private dropAccum: number = 0; // ms accumulated since last gravity drop\n private lastTs: number = 0;\n private rafId: number = 0;\n\n // Flash effect on line clear\n private flashFrames: number = 0;\n\n // Randomiser\n private readonly bag = new Bag();\n\n constructor() {\n this.cvs = document.getElementById(\"game-canvas\") as HTMLCanvasElement;\n this.ctx = this.cvs.getContext(\"2d\")!;\n this.nextCvs = document.getElementById(\"next-canvas\") as HTMLCanvasElement;\n this.nextCtx = this.nextCvs.getContext(\"2d\")!;\n this.scoreEl = document.getElementById(\"score\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.overlay = document.getElementById(\"overlay\")!;\n this.oTitle = document.getElementById(\"overlay-title\")!;\n this.oSub = document.getElementById(\"overlay-sub\")!;\n this.oScore = document.getElementById(\"overlay-score\")!;\n this.oBtn = document.getElementById(\"overlay-btn\")!;\n\n document.addEventListener(\"keydown\", this.onKey.bind(this));\n document.getElementById(\"btn-new-game\")!.addEventListener(\"click\", () => this.newGame());\n this.oBtn.addEventListener(\"click\", () => this.newGame());\n\n // Initial render so the board is visible before the game starts\n this.drawBoard();\n this.drawNext();\n }\n\n // ── Public actions ──────────────────────────────────────────────────────────\n\n private newGame(): void {\n this.board = makeBoard();\n this.score = 0;\n this.level = 1;\n this.linesCleared = 0;\n this.dropAccum = 0;\n this.flashFrames = 0;\n this.status = \"playing\";\n\n this.nextTypeIdx = this.bag.next();\n this.spawnPiece();\n this.updateHUD();\n this.hideOverlay();\n\n cancelAnimationFrame(this.rafId);\n this.lastTs = performance.now();\n this.rafId = requestAnimationFrame(this.loop.bind(this));\n }\n\n private togglePause(): void {\n if (this.status === \"playing\") {\n this.status = \"paused\";\n this.showOverlay(\"PAUSED\", \"Press P or Esc to resume\", false);\n } else if (this.status === \"paused\") {\n this.status = \"playing\";\n this.lastTs = performance.now(); // avoid time-jump after un-pause\n this.hideOverlay();\n }\n }\n\n // ── Keyboard ────────────────────────────────────────────────────────────────\n\n private onKey(e: KeyboardEvent): void {\n // Start / resume with Space or Enter from idle / game-over\n if (this.status === \"idle\" || this.status === \"over\") {\n if (e.code === \"Space\" || e.code === \"Enter\") { e.preventDefault(); this.newGame(); }\n return;\n }\n\n if (e.code === \"KeyP\" || e.code === \"Escape\") {\n e.preventDefault();\n this.togglePause();\n return;\n }\n\n if (this.status !== \"playing\") return;\n\n switch (e.code) {\n case \"ArrowLeft\": e.preventDefault(); this.tryMove(-1, 0); break;\n case \"ArrowRight\": e.preventDefault(); this.tryMove( 1, 0); break;\n case \"ArrowDown\": e.preventDefault(); this.softDrop(); break;\n case \"ArrowUp\": e.preventDefault(); this.rotate(true); break;\n case \"KeyZ\": e.preventDefault(); this.rotate(false); break;\n case \"KeyX\": e.preventDefault(); this.rotate(true); break;\n case \"Space\": e.preventDefault(); this.hardDrop(); break;\n }\n }\n\n // ── Piece movement ──────────────────────────────────────────────────────────\n\n private tryMove(dx: number, dy: number): boolean {\n if (!this.piece) return false;\n const nx = this.piece.x + dx;\n const ny = this.piece.y + dy;\n if (collides(this.board, this.piece.shape, nx, ny)) return false;\n this.piece.x = nx;\n this.piece.y = ny;\n return true;\n }\n\n private rotate(cw: boolean): void {\n if (!this.piece) return;\n const rotated = cw ? rotateCW(this.piece.shape) : rotateCCW(this.piece.shape);\n for (const [dx, dy] of KICKS_NORMAL) {\n if (!collides(this.board, rotated, this.piece.x + dx, this.piece.y + dy)) {\n this.piece.shape = rotated;\n this.piece.x += dx;\n this.piece.y += dy;\n return;\n }\n }\n }\n\n private softDrop(): void {\n if (this.tryMove(0, 1)) {\n this.score += 1;\n this.dropAccum = 0; // reset gravity timer on manual drop\n } else {\n this.lockPiece();\n }\n }\n\n private hardDrop(): void {\n if (!this.piece) return;\n let cells = 0;\n while (this.tryMove(0, 1)) cells++;\n this.score += cells * 2;\n this.lockPiece();\n }\n\n // ── Gravity loop ────────────────────────────────────────────────────────────\n\n private loop(ts: number): void {\n const dt = ts - this.lastTs;\n this.lastTs = ts;\n\n if (this.status === \"playing\") {\n if (this.flashFrames > 0) {\n this.flashFrames -= dt;\n } else {\n this.dropAccum += dt;\n const interval = this.dropInterval();\n while (this.dropAccum >= interval) {\n this.dropAccum -= interval;\n this.gravityDrop();\n }\n }\n this.render();\n }\n\n this.rafId = requestAnimationFrame(this.loop.bind(this));\n }\n\n /** Milliseconds between automatic gravity drops for the current level. */\n private dropInterval(): number {\n // Roughly follows Tetris guideline gravity curve\n return Math.max(50, 1000 * Math.pow(0.85, this.level - 1));\n }\n\n private gravityDrop(): void {\n if (!this.tryMove(0, 1)) {\n this.lockPiece();\n }\n }\n\n // ── Lock & clear ────────────────────────────────────────────────────────────\n\n private lockPiece(): void {\n if (!this.piece) return;\n const { shape, typeIdx, x, y } = this.piece;\n\n let lockedAboveBoard = false;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (!shape[r][c]) continue;\n const by = y + r;\n const bx = x + c;\n if (by < 0) { lockedAboveBoard = true; continue; }\n this.board[by][bx] = typeIdx + 1; // colour index 1-7\n }\n }\n\n this.piece = null;\n\n if (lockedAboveBoard) {\n this.gameOver();\n return;\n }\n\n this.clearLines();\n this.spawnPiece();\n\n // Check for immediate collision after spawn → game over\n if (this.piece && collides(this.board, this.piece.shape, this.piece.x, this.piece.y)) {\n this.gameOver();\n }\n }\n\n private clearLines(): void {\n let count = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every((v) => v !== 0)) {\n this.board.splice(r, 1);\n this.board.unshift(Array(COLS).fill(0));\n count++;\n r++; // recheck same index after splice\n }\n }\n if (count === 0) return;\n\n this.linesCleared += count;\n this.score += LINE_SCORES[count] * this.level;\n\n const newLevel = Math.floor(this.linesCleared / LINES_PER_LEVEL) + 1;\n if (newLevel > this.level) this.level = newLevel;\n\n this.updateHUD();\n this.flashFrames = 180; // ~180 ms flash pause\n }\n\n // ── Spawn ────────────────────────────────────────────────────────────────────\n\n private spawnPiece(): void {\n this.piece = makePiece(this.nextTypeIdx);\n this.nextTypeIdx = this.bag.next();\n this.dropAccum = 0;\n }\n\n // ── Ghost piece ──────────────────────────────────────────────────────────────\n\n private ghostRow(): number {\n if (!this.piece) return 0;\n let gy = this.piece.y;\n while (!collides(this.board, this.piece.shape, this.piece.x, gy + 1)) gy++;\n return gy;\n }\n\n // ── Game over ────────────────────────────────────────────────────────────────\n\n private gameOver(): void {\n this.status = \"over\";\n this.showOverlay(\"GAME OVER\", \"Press Enter or Space to retry\", true);\n }\n\n // ── HUD ──────────────────────────────────────────────────────────────────────\n\n private updateHUD(): void {\n this.scoreEl.textContent = this.score.toLocaleString();\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.linesCleared);\n }\n\n // ── Overlay helpers ──────────────────────────────────────────────────────────\n\n private showOverlay(title: string, sub: string, showScore: boolean): void {\n this.oTitle.textContent = title;\n this.oSub.textContent = sub;\n\n if (showScore) {\n this.oScore.textContent = `Score: ${this.score.toLocaleString()}`;\n this.oScore.classList.remove(\"hidden\");\n } else {\n this.oScore.classList.add(\"hidden\");\n }\n\n if (title === \"PAUSED\") {\n this.oBtn.textContent = \"Resume\";\n } else if (title === \"GAME OVER\") {\n this.oBtn.textContent = \"Play Again\";\n } else {\n this.oBtn.textContent = \"Start Game\";\n }\n\n this.overlay.classList.remove(\"hidden\");\n }\n\n private hideOverlay(): void {\n this.overlay.classList.add(\"hidden\");\n }\n\n // ── Rendering ────────────────────────────────────────────────────────────────\n\n private render(): void {\n this.drawBoard();\n this.drawNext();\n }\n\n private drawBoard(): void {\n const ctx = this.ctx;\n const W = COLS * BLOCK;\n const H = ROWS * BLOCK;\n\n // Background\n ctx.fillStyle = \"#080810\";\n ctx.fillRect(0, 0, W, H);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n ctx.lineWidth = 0.5;\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, H); ctx.stroke();\n }\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(W, r * BLOCK); ctx.stroke();\n }\n\n // Locked cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n const v = this.board[r][c];\n if (v) drawBlock(ctx, c, r, COLOURS[v], BLOCK);\n }\n }\n\n // Ghost piece\n if (this.piece) {\n const gy = this.ghostRow();\n const colour = COLOURS[this.piece.typeIdx + 1];\n for (let r = 0; r < this.piece.shape.length; r++) {\n for (let c = 0; c < this.piece.shape[r].length; c++) {\n if (!this.piece.shape[r][c]) continue;\n const br = gy + r;\n const bc = this.piece.x + c;\n if (br < 0 || br >= ROWS) continue;\n // Draw ghost as a dim outlined block\n ctx.globalAlpha = 0.22;\n ctx.fillStyle = colour;\n ctx.fillRect(bc * BLOCK, br * BLOCK, BLOCK, BLOCK);\n ctx.globalAlpha = 0.5;\n ctx.strokeStyle = colour;\n ctx.lineWidth = 1.5;\n ctx.strokeRect(bc * BLOCK + 1, br * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n ctx.globalAlpha = 1;\n }\n }\n }\n\n // Active piece\n if (this.piece) {\n const colour = COLOURS[this.piece.typeIdx + 1];\n for (let r = 0; r < this.piece.shape.length; r++) {\n for (let c = 0; c < this.piece.shape[r].length; c++) {\n if (!this.piece.shape[r][c]) continue;\n const br = this.piece.y + r;\n const bc = this.piece.x + c;\n if (br < 0) continue; // still above the visible board\n drawBlock(ctx, bc, br, colour, BLOCK);\n }\n }\n }\n }\n\n private drawNext(): void {\n const ctx = this.nextCtx;\n const cvsW = this.nextCvs.width;\n const cvsH = this.nextCvs.height;\n\n ctx.fillStyle = \"#080810\";\n ctx.fillRect(0, 0, cvsW, cvsH);\n\n const def = PIECE_DEFS[this.nextTypeIdx];\n const shape = def.shape;\n const colour = def.colour;\n\n // Count actual filled cols / rows for centring\n const cols = shape[0].length;\n const rows = shape.length;\n const ox = Math.floor((cvsW / NEXT_BLOCK - cols) / 2);\n const oy = Math.floor((cvsH / NEXT_BLOCK - rows) / 2);\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (!shape[r][c]) continue;\n drawBlock(ctx, ox + c, oy + r, colour, NEXT_BLOCK);\n }\n }\n }\n}\n\n// ─── Bootstrap ────────────────────────────────────────────────────────────────\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\nTSEOF","description":"Write the full Tetris TypeScript source"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":893,"cache_read_input_tokens":21410,"cache_creation":{"ephemeral_5m_input_tokens":893,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","uuid":"41d79033-77a7-47d7-b8d5-ff3b7df64224"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":396432,"duration_api_ms":316063,"is_error":true,"num_turns":9,"stop_reason":"tool_use","session_id":"dcf38a4a-12d9-43e0-993d-ed42d9b5ec6d","total_cost_usd":0.58769085,"usage":{"input_tokens":12,"cache_creation_input_tokens":17544,"cache_read_input_tokens":106617,"output_tokens":25088,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":17544},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":13,"outputTokens":32007,"cacheReadInputTokens":128027,"cacheCreationInputTokens":18437,"webSearchRequests":0,"costUSD":0.58769085,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"c9665009-e9bf-4354-887f-4363e2f2c5f1","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":355426,"duration_api_ms":270856,"is_error":true,"num_turns":4,"stop_reason":"tool_use","session_id":"14092336-3767-4c70-8556-c97f7e987831","total_cost_usd":0.5804241,"usage":{"input_tokens":9,"cache_creation_input_tokens":19376,"cache_read_input_tokens":32679,"output_tokens":25407,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":19376},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":10,"outputTokens":32906,"cacheReadInputTokens":47147,"cacheCreationInputTokens":19376,"webSearchRequests":0,"costUSD":0.5804241,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"50ae74f4-2187-49c8-9a93-b23d59b82aac","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,128 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 17, - "tool_calls": { - "total": 4, - "bash": 3, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 5, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0, - "error": "Gameplay bot timed out after 180 seconds" - }, - "score": 0.583 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 4, - "failed": 12, - "score": 0.25 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 23 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "off", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T21:20:24.698854+00:00", - "wall_time_seconds": 356, - "exit_code": 1, - "completed_at": "2026-04-03T21:26:24.350727+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=off_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,17 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-orggsowe","session_id":"14092336-3767-4c70-8556-c97f7e987831","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"763af418-6630-4b80-aff8-bd27c534bf04","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HgHTBcNXutMn4rAoGvRxop","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser using TypeScript. Let me build a complete Tetris game with:\n\n1. All standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls\n\nI'll create a TypeScript file that gets compiled, along with an HTML file. Let me think about the structure:\n\n- `index.html` - The main HTML file\n- `src/tetris.ts` - The TypeScript game logic\n\n\n- `package.json` and `tsconfig.json` for the build setup\n\nActually, I'll go with a proper project structure: an HTML file for the UI, TypeScript source code that compiles to JavaScript, and the necessary configuration files. Now I need to plan out the game mechanics, starting with the board dimensions and piece definitions.\n\nThe board will be the standard 10 by 20 grid. I'm defining all seven tetrominoes with their colors, then mapping out the controls—arrow keys for movement and rotation, space for hard drop, and P to pause. For scoring, I'm using the classic Tetris formula where clearing multiple lines gives exponentially higher points multiplied by the current level. The difficulty ramps up every 10 lines cleared.\n\nWriting the TypeScript implementation... Defining the tetromino shapes... Defining the rotation states for the remaining Tetris pieces...\n\nNow I'm setting up the color mapping for each piece type, then planning out the project structure with TypeScript configuration, HTML entry point, and the main game logic file. Let me start building out the complete implementation.\n\nWriting HTML and styles... Still writing styles... Building the HTML structure...\n\nNow I'm thinking through the core game state I need to track—the board as a 2D grid, the current and next pieces with their positions and rotations, score and level counters, and the game's overall state machine to handle idle, playing, paused, and game over modes. I'll also need a drop interval timer to control how fast pieces fall.\n\nFor the implementation, I'm going to focus on the essential mechanics: collision detection for piece movement and rotation, a ghost piece to preview where the piece will land, basic wall kick logic for rotation near edges, and level-based speed progression. I'll keep the line clearing straightforward and implement standard Tetris scoring.\n\nDefining the TypeScript types and constants...\n\nSetting up the tetromino shapes... Defining the rotation states for the remaining Tetris pieces... Setting up the color palette for each tetromino type and defining the scoring system where clearing multiple lines gives exponentially higher points. I'm also calculating the drop speed dynamically based on the level, making the game progressively harder. Now I'm starting to define the game state type and the main game class.\n\nSetting up the game class... Still writing the game logic... Writing game logic... Writing the rendering logic... Still writing the rendering logic... Writing the next piece preview... Writing the game loop... Writing game mechanics...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":484,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":484,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"8b0a235b-b8e0-4d6f-a23c-633833a2cfdc"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014xAx3oC2QpqCjiv5AYLd2s","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me create a complete Tetris implementation with:\n\n1. Standard Tetris pieces (tetrominoes): I, O, T, S, Z, J, L\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z for rotation)\n\nI'll create:\n- `index.html` - the main HTML file\n- `src/tetris.ts` - the TypeScript source\n- `dist/tetris.js` - compiled JavaScript (or I can use a bundler)\n\n\n- `package.json` and `tsconfig.json` for the TypeScript setup\n\nI'm designing the game with a standard 10x20 grid and will compile everything with tsc.\n\nSetting up the project structure... Writing the TypeScript implementation... Defining the Tetris piece rotations... Defining the rotation states for the Z and J tetromino pieces...\n\nActually, I should step back and think through the overall structure more carefully. A standard Tetris board is 10 cells wide and 20 cells tall, where each cell is either empty or holds a color index from 1 to 7.\n\nFor the tetromino pieces, I need to define all seven standard Tetris shapes with their rotation states using the Super Rotation System. Let me map out the I, O, T, S, Z, L, and J pieces...\n\nNow I'm setting up the TypeScript project structure with the necessary files and configuration, then I'll write out the complete game implementation with the board dimensions, color mappings, and core game logic...\n\nWriting the game code... Defining the tetromino shapes... Defining the S and Z piece rotations... Defining the J and L piece rotations... Setting up the scoring system and speed progression table...\n\nNow I'm defining the core game class with the board state, current and next pieces, score tracking, and game status flags like whether it's paused or over.\n\nSetting up the canvas rendering context... Writing collision detection logic...\n\nNow I'm implementing the piece locking mechanism that places the tetromino blocks onto the board at their final position, then moving into the line-clearing logic to detect and remove completed rows.\n\nContinuing with game mechanics...\n\nNow I'm implementing the movement functions for the tetromino pieces—checking if moves are valid before updating the piece position and redrawing the board. The moveDown function will handle the vertical descent and likely trigger piece placement when no further downward movement is possible.\n\nContinuing with the game mechanics...\n\nI'm implementing the rotation logic with wall kick attempts—trying different horizontal offsets if the piece can't rotate in place—then moving on to the lock and clear functionality where pieces get placed and completed lines are removed from the board. Setting up keyboard controls...\n\nNow I'm handling the pause and restart functionality—toggling the pause state, managing the overlay display, and resetting the game board with score and level back to zero when restarting.\n\nSetting up the game loop... Writing block rendering logic... Writing the game board rendering... Writing the rendering logic... Now I'm setting up the game initialization when the DOM loads, and structuring the HTML with a canvas for the main game board and a separate preview canvas for the next piece, along with a side panel for stats. Now I'm finishing up the HTML structure with the game over and pause overlays, then I need to think through the styling and JavaScript implementation to make this Tetris game fully functional.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"802fd6bd-1efa-4179-b30e-389ca35c6fb6"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014xAx3oC2QpqCjiv5AYLd2s","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_018V443iNJiMvoRArFxBdgXS","name":"Bash","input":{"command":"ls /tmp/loop-bench-orggsowe","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"8ab278df-5eca-4eb9-a30e-814e5a43c586"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_018V443iNJiMvoRArFxBdgXS","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"cbf1b951-9b08-45e1-903a-8921b98d9a21","timestamp":"2026-04-03T21:23:22.060Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SDqruoGTcHnLkqhkNaLaA9","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MJWRtscAuFE4LRXHKCWbpv","name":"Read","input":{"file_path":"/tmp/loop-bench-orggsowe/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":9149,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":9149,"ephemeral_1h_input_tokens":0},"output_tokens":50,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"7d63c51d-9664-45bd-9c67-d1f41704023e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MJWRtscAuFE4LRXHKCWbpv","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-orggsowe\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"c2e7157c-f917-4bfd-9681-ac703a72e378","timestamp":"2026-04-03T21:23:25.091Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-orggsowe/package.json","content":"{\n \"name\": \"loop-bench-orggsowe\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0161ZgQncfFUiqj3kCTxG3o7","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good, I have TypeScript available. Let me set up the project. I'll:\n1. Add a tsconfig.json\n2. Create src/tetris.ts\n3. Create index.html\n4. Compile and verify it works\n\nLet me also check what's in node_modules to know what I'm working with.","signature":"Eq0DClsIDBgCKkCIV6i31nutz6VuINjnAJYP84itdY6ZvhJI3kmarAqfI9h+dp+mSlnOTaxWYAz+tqn7RmMnzAg2EXeuUuhayuU0MhFjbGF1ZGUtc29ubmV0LTQtNjgAEgytozUpJ8dFkIbvEz4aDAFoLIZKl4OAy0w5NyIw9RaDRLNg8+aVYCEeQKNt6w+BuEzFwuKK7B0K50Pef9IG9LqHfIRH90rxOz6dsYHBKv8BlzH3kDkSeZ4Z+3rBfSAnCB1JrnKTsO+XHMzH7l1o4U8ps3SlJuwt0mtBimw+PX4QGodtA9ZZNBmtl0EchQ+3UJD4oIrfhu3KbA5Ykr26svQz/H58gFD02/KISjMpl6duqHTvFtBjq/r/fuSviZOSW/Ws0ONN+CbX/X8FjIUaf+Br9/wp+y2FcZGgTzCpnRCMMPqFxwzHBdFg7bacWVWZoJvQ440vZqO0DmPyaHN9O602r6b0DACPtAxg5sNCZD4mfRrxHR+Y0qt+JLVI6Eey7DcDM1UIOQ6dT+PpDr1Fbs6dbPQv1XUAztVvu/L5LRcaF+qV9R2OyL2VKwJpVN/VGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":9538,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":9538,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"df084f66-8f57-46c7-b7cf-a55751b275c6"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0161ZgQncfFUiqj3kCTxG3o7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01FmzquoayHHHTg1mPECQjDn","name":"Bash","input":{"command":"ls /tmp/loop-bench-orggsowe/node_modules/.bin/ | grep -E \"tsc|esbuild|vite\"","description":"Check available build tools"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":9538,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":9538,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"6aa7e4fc-d8b2-4961-b5fd-4578f007a341"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01FmzquoayHHHTg1mPECQjDn","type":"tool_result","content":"tsc","is_error":false}]},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"cff3b3ce-3dbe-486e-a2c0-f125db04722f","timestamp":"2026-04-03T21:23:29.162Z","tool_use_result":{"stdout":"tsc","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MST8VUBMC6kNwFs59amixk","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"We have `tsc` available. Let me set up the project with:\n1. `tsconfig.json` - TypeScript configuration\n2. `src/tetris.ts` - Main game code\n3. `index.html` - HTML file\n\nI'll compile the TypeScript to JavaScript using tsc. Let me create a `tsconfig.json` first to output to a `dist` directory.\n\nLet me design the full Tetris game now. I want to make it look good and work well.\n\nKey features:\n1. Standard 10x20 board\n2. All 7 Tetrominos (I, O, T, S, Z, J, L)\n\n\n3. SRS rotation system with wall kicks\n4. Line clearing with flash animation\n5. Scoring system where 1 line = 100×level, 2 = 300×level, 3 = 500×level, 4 = 800×level\n6. Level increases every 10 lines cleared\n7. Speed increases with level\n8. Ghost piece showing where the current piece will land\n9. Next piece preview\n10. Score display\n11. Keyboard controls\n12. Pause functionality\n13. Game over screen with restart option\n\nNow I'll write the complete TypeScript code.\n\nFor the TypeScript configuration, I need to compile to `dist/tetris.js` with ES6+ target for the browser. I'm going to use a grid-based representation for the tetromino data since it's simpler to understand and debug than coordinate-based.\n\nWith BLOCK_SIZE = 30, BOARD_COLS = 10, and BOARD_ROWS = 20, the canvas will be 300×600 pixels. The next piece preview canvas needs to be 180×150 pixels to show a 6×5 block area.\n\nNow I'm setting up the speed table based on the original NES Tetris frame timings at 60fps, starting with level 0 at 48 frames per drop.\n\nWriting the game code... I'm looking at the frame timing breakdown across difficulty levels and it seems reasonable. Now I need to implement the core game logic, starting with finding the ghost piece position and then writing out the complete Tetris code with the board setup, piece definitions, and color mapping.\n\nWriting Tetris game code... Defining the tetromino piece rotations... Defining the rotation states for the S and Z pieces... Defining the Tetris piece configurations...\n\nI'm setting up a speed progression table that follows the classic NES Tetris difficulty curve, where pieces drop faster as the level increases, then capping out at the fastest speed. I'm also establishing the scoring system where completing multiple lines gives exponentially higher points, and starting to structure the active piece interface with its rotation state and position.\n\nNow I'm defining the main Tetris class with all the game state properties like the board grid, current and next pieces, score tracking, and game status flags, along with references to all the DOM elements I'll need for rendering the canvas displays and UI updates.\n\nI'm also setting up the DAS (Delayed Auto Shift) system to handle smooth piece movement with configurable delay and repeat intervals, then initializing the constructor to grab all the necessary canvas and element references from the DOM.\n\nNow I'm defining helper methods for the game board and pieces — creating a fresh board grid, generating random pieces from the predefined set, retrieving the current shape based on rotation, and checking whether a piece can fit at a given position with collision detection.\n\nContinuing with the game logic...\n\nNow I'm handling the piece locking mechanism by placing the piece blocks onto the board, then implementing line clearing that removes full rows and shifts everything down. After that, I'm setting up the rotation logic with wall kick handling to allow pieces to rotate even when they're near boundaries.\n\nImplementing movement and drop mechanics... Still writing game logic... Setting up the keyboard input handlers for game controls like movement, rotation, and dropping pieces, with DAS (delayed auto shift) timing for continuous left/right movement, and handling pause and restart commands. Setting up the game state with a fresh board, resetting the score and level, then initializing the piece queue and animation loop to start playing.\n\nNow I'm handling the game tick logic—managing the delayed auto-shift timer for horizontal movement, then checking if the current piece should drop based on the level's speed, either moving it down or locking it in place when it hits something.\n\nWriting the rendering and drawing methods... Finishing the block rendering with shadow effects, then moving into the render method to draw the game background and grid lines...\n\nNow I'm drawing the placed blocks on the board by iterating through each cell, and rendering the ghost piece preview to show where the current tetromino will land. Writing the next piece preview... Finishing the rendering loop and initializing the game on page load. Now I'm thinking through the ghost piece logic—the `ghostY()` method calculates where the current piece would land by incrementally testing positions downward until it no longer fits, essentially simulating a drop to find the final resting position. That's cleaner. `fits(p, dx, dy)` checks if piece at position `(p.x + dx, p.y + dy)` fits. So I'm checking if piece + dy fits, and incrementing dy until it doesn't.\n\nAlso in the ghost drawing, I need to not draw ghost blocks that overlap with the actual piece. I'm iterating through the piece's grid and drawing each block at its ghost position, but only if it's below the current piece and within bounds.\n\nNow I'm thinking about the DAS logic in the tick function—when a key is pressed, I move immediately and start the timer, then when DAS fires I move again. I need to make sure I'm tracking the delta time correctly.\n\nActually, I think there's a bug in my DAS implementation. When the timer fires and `dasActive` is false, I set it to true and reset the timer to the repeat interval, but I also call `tryMove` in that same frame. That means the first repeat happens after `dasDelay` milliseconds, not `dasDelay + dasRepeat`.\n\nLet me reconsider the logic. I should just reset the timer to `dasRepeat` after every move, regardless of whether it's the first repeat or a subsequent one. That way, the initial delay happens before the first move, and then every move after that is spaced by the repeat interval.\n\nRefactoring timer logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":205,"cache_read_input_tokens":14263,"cache_creation":{"ephemeral_5m_input_tokens":205,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"d3a590a2-eb31-4e2b-8879-55aee61b9977"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012GJKX2An8CpMzGmBPYEunw","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I have `tsc` available. Let me create the project structure:\n1. `tsconfig.json`\n2. `src/tetris.ts`\n3. `index.html`\n\nAnd then compile with tsc.\n\nLet me write a comprehensive, well-designed Tetris game now. I'll make it look really polished.\n\nThe canvas width = 10 * 30 = 300px\nThe canvas height = 20 * 30 = 600px\n\nFor the next piece preview, I'll use a 6*30 = 180px by 6*30 = 180px canvas... \n\nActually, that's too large. I'll go with a 5x5 grid instead at 140px to keep things compact. The layout will have the main game board at 300x600px with a 160px side panel for the next piece preview and score display.\n\nNow I'm writing the TypeScript implementation, starting with fixing the ghost piece logic. The function needs to properly calculate where the piece would land by checking valid positions as it falls, using the same tetromino and rotation but different y coordinates.\n\nFixing the position validation... I'm realizing the first approach is too convoluted, so I'll simplify by creating a dedicated method that incrementally moves the ghost piece downward until it hits an obstacle. Now I'm thinking through the speed progression for different levels, starting with the classic NES Tetris frame rates that determine how quickly pieces fall.\n\nActually, a simpler difficulty curve would work better for a beginner-friendly version. I'm considering a formula-based approach instead of hardcoding each level's interval...\n\nCalculating fall speed formula... The exponential decay formula gives me a nice progression where the game gets progressively faster, hitting a minimum at higher levels. Now I'm thinking through the wall kick system—I'll keep it simple with just a few offset attempts rather than implementing the full SRS spec. For line clearing, I'll skip the animation and just remove completed lines immediately to keep things straightforward. I should also add the hold piece feature since it's standard in modern Tetris and makes the game more strategic.\n\nActually, let me focus on the essentials first: basic movement, rotation, line clearing, scoring, speed increases, ghost piece display, and next piece preview. I'll write out the complete TypeScript code now, starting with the board dimensions, piece definitions, and game state structures.\n\nDefining the piece shapes and colors... Defining the Tetris piece rotations... Defining the remaining Tetris pieces... Defining the game class and its properties... Setting up the UI element references and event listeners for keyboard input and button clicks, then initializing the game board and helper methods for generating empty boards and random pieces.\n\nWriting game logic... Continuing with the game logic, I'm checking if a row is completely filled, and if so, removing it and adding a new empty row at the top while incrementing the cleared count. Then I'm updating the score based on how many lines were cleared, multiplying by a level multiplier and updating the display elements for score, lines, and level. Now I'm moving into the step function that handles the game's main loop.\n\nIn each step, I'm checking if the current piece can move down one row. If it can, I move it down. If it can't, I lock the piece in place, clear any completed lines, update the score, and spawn the next piece. If the new piece can't be placed, the game is over and I display the final score. After all that, I redraw the board and the next piece preview.\n\nNow I'm working on the ghost piece logic that calculates where the current piece would land if it dropped straight down.\n\nWriting game mechanics... Writing the keyboard handler... Writing the game controller methods... Still writing the rendering code... Writing the rendering logic... Still writing the rendering logic...\n\nNow I'm thinking through the canvas dimensions for the next piece preview—it should be 180 pixels wide and 150 tall based on a 6×5 grid with 30-pixel blocks. For the overall layout, I want to create a polished interface with a dark background and some visual styling to make it feel professional.\n\nBuilding the HTML and CSS...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":14468,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"2fb18d21-2b7f-4f4e-9575-86734feafae5"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012GJKX2An8CpMzGmBPYEunw","type":"message","role":"assistant","content":[{"type":"text","text":"Now I have a clear picture of what's available. Let me build the full Tetris game — TypeScript source, `tsconfig.json`, `index.html`, and compile it all."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":14468,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"56c671d4-dcf5-4c5a-8ac8-87360ce36421"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012GJKX2An8CpMzGmBPYEunw","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_012K1xozHDxmqVGBKRhrW2tM","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-orggsowe/src /tmp/loop-bench-orggsowe/dist","description":"Create src and dist directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":14468,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"14092336-3767-4c70-8556-c97f7e987831","uuid":"de57da75-a502-4c69-957f-991f20c67516"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":355426,"duration_api_ms":270856,"is_error":true,"num_turns":4,"stop_reason":"tool_use","session_id":"14092336-3767-4c70-8556-c97f7e987831","total_cost_usd":0.5804241,"usage":{"input_tokens":9,"cache_creation_input_tokens":19376,"cache_read_input_tokens":32679,"output_tokens":25407,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":19376},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":10,"outputTokens":32906,"cacheReadInputTokens":47147,"cacheCreationInputTokens":19376,"webSearchRequests":0,"costUSD":0.5804241,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"50ae74f4-2187-49c8-9a93-b23d59b82aac","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":386842,"duration_api_ms":291659,"is_error":true,"num_turns":6,"stop_reason":"max_tokens","session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","total_cost_usd":0.5964482999999999,"usage":{"input_tokens":10,"cache_creation_input_tokens":29463,"cache_read_input_tokens":57019,"output_tokens":22801,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":29463},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":11,"outputTokens":30801,"cacheReadInputTokens":76576,"cacheCreationInputTokens":29714,"webSearchRequests":0,"costUSD":0.5964482999999999,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"08226950-be6f-40e9-a5e7-04254df3bcb7","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/eval_results.json @@ -1,254 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "tsc --noEmit failed" - } - ], - "score": 0.5 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 3 - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 3, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 19, - "tool_calls": { - "total": 5, - "bash": 4, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 3, - "text_blocks": 2, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.585 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "off", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:26:07.608357+00:00", - "wall_time_seconds": 387, - "exit_code": 1, - "completed_at": "2026-04-04T09:32:39.853208+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,19 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-nlkj6_tk","session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"17ad4ae5-af8e-4adb-951b-7a8560ef9219","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01AQuLYLg8ChwFynSwNGq6LU","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I'll build a complete Tetris game in TypeScript that runs in the browser. Let me plan out the structure:\n\n1. **index.html** - The main HTML file\n2. **src/tetris.ts** - The TypeScript game logic\n3. **tsconfig.json** - TypeScript configuration\n4. **package.json** - Package configuration\n\nLet me think about what I need:\n\n### Game Components:\n- **Canvas-based rendering** - Use HTML5 Canvas\n- **Tetromino pieces** (I, O, T, S, Z, J, L)\n- **Game board** (10x20 grid)\n\n\n- **Piece rotation** using rotation matrices or predefined states\n- **Line clearing** with scoring\n- **Increasing speed** based on level\n- **Keyboard controls** (Arrow keys + Z/X or up for rotation)\n- **Score display**, level, lines cleared\n- **Game over detection**\n- **Pause functionality**\n- **Next piece preview**\n\n### Tetromino Definitions:\nEach piece has 4 rotation states. I'll use the standard SRS (Super Rotation System) or a simpler approach. I'll define each piece with its color and shape—the I piece as cyan in a line, the O piece as yellow in a 2x2 square, the T piece as purple, and so on.\n\n### Scoring:\n- Standard Tetris scoring:\n - 1 line: 100 × level\n - 2 lines: 300 × level\n - 3 lines: 500 × level\n - 4 lines (Tetris): 800 × level\n\n### Speed:\n- Start at level 1\n- Every 10 lines cleared, level increases\n- Speed increases with level (drop interval decreases)\n\n### Controls:\n- ← → : Move left/right\n- ↓ : Soft drop\n- ↑ or X : Rotate clockwise\n- Z : Rotate counter-clockwise\n- Space : Hard drop\n- P : Pause\n\nNow I'm ready to start building the game.\n\nI need to decide on the best approach for making this immediately playable in a browser. I could set up a full TypeScript project with a build tool, but that requires a build step. Instead, I'll create a single HTML file with embedded JavaScript that handles all the game logic, rendering, and controls.\n\nDefining the Tetris game structure... Defining the Tetris piece rotations... Defining the piece rotations and color palette...\n\nNow I'm thinking through the full architecture—I need a comprehensive TypeScript implementation with canvas rendering, a standard 10×20 board, all seven tetrominoes, rotation mechanics with wall kick support, scoring and level progression, next piece preview, hold functionality, and ghost piece visualization to show landing positions. Defining the tetromino pieces as 2D matrices following the standard Tetris Guideline format...\n\nWriting the game implementation... Defining the piece shapes... Defining the piece shapes as 2D arrays and implementing a rotation function that transforms them 90 degrees algorithmically seems cleaner than hardcoding all rotations. Now I'm setting up the overall game structure with interfaces and types.\n\nWriting the complete implementation... Defining piece rotations... Writing the HTML structure... Still writing styles... Building the game layout... I'm laying out the control instructions panel with all the keyboard mappings for the game, then moving into the TypeScript implementation where I need to define the core game logic functions like board initialization and piece shape generation.\n\nWriting the game engine... Defining game constants and piece configurations...\n\nI'm realizing I need to double-check the T piece orientation—the standard form should have the stem pointing down with the crossbar on top, so that's [0,1,0] in the first row and [1,1,1] in the second, not the other way around. Defining the Tetris piece shapes with their standard orientations, where each row represents the piece from top to bottom as it appears when spawned.\n\nNow I'm implementing a 90-degree clockwise rotation function that transforms the matrix by mapping each element to its new position based on the rotation formula. That confirms the rotation is correct—the T piece rotated 90° clockwise matches what I expected. Now I need to figure out the wall kick logic.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":487,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":487,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"e3d29b59-078f-482d-b8b6-9b5722fefa20"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015S3QbVBcBzyK78v3FsABaD","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me build a complete Tetris game in TypeScript that runs in the browser. I'll create a self-contained HTML file with embedded TypeScript (compiled to JavaScript) or separate files.\n\nLet me plan the structure:\n1. `index.html` - Main HTML file\n2. `src/tetris.ts` - TypeScript game logic\n3. `package.json` - Build configuration\n4. `tsconfig.json` - TypeScript config\n\nActually, since this needs to run in a browser, I should either:\n1. Compile TypeScript to JavaScript and serve the files\n2. Create a single HTML file with inline JavaScript (compiled from TS)\n\n\nI'll set up a proper project structure with TypeScript and a build system. For the game itself, I need to define the seven Tetris pieces with their rotation states, implement a 10x20 game board, handle piece spawning and gravity, detect and clear completed lines with scoring, and manage difficulty progression. The controls will be arrow keys for movement and rotation, with the down arrow for faster drops.\n\nNow I'm defining the core game types and starting to build out the Tetromino piece definitions...\n\nActually, I think a canvas-based approach will work better for rendering the game.\n\nLet me set up the full implementation with the board dimensions, piece interface, and tetromino definitions...\n\nDefining the game structure... Defining the remaining Tetris piece configurations... Defining the remaining Tetris piece rotations and colors, then planning out the canvas layout with a 10x20 game board and sidebar for displaying the score and next piece preview.\n\nFor the game loop, I'll use `requestAnimationFrame` with timestamp-based updates to handle smooth gameplay. I'm also thinking through the key features to implement: a ghost piece to show where the current piece will land, the next piece preview, a hold piece mechanic, and proper SRS wall kick rotation offsets so pieces can rotate near walls realistically.\n\nImplementing rotation system... I'm simplifying the wall kick system to use a more practical set of offsets that work well across different piece types and rotations, then I'll write out the complete TypeScript implementation as a single clean file.\n\nWriting the game implementation... Defining the tetromino shapes... I'm defining the rotation states for each Tetris piece using 2D arrays of 0s and 1s, then moving on to implement the scoring system based on official Tetris guidelines.\n\nFor the game mechanics, I want to build something polished with wall kicks, a ghost piece preview, a hold system, lock delay so pieces can be repositioned briefly after landing, proper level progression that increases every 10 lines, and a display showing the next few pieces in the queue.\n\nI'm going to structure this as a TypeScript project with an HTML file, a game logic file, and the necessary configuration. Let me start writing the implementation...\n\nWriting game logic... Defining the remaining tetromino pieces... Defining the wall kick data for piece rotations... Defining wall kick data for the I piece...\n\nActually, let me verify these offsets are correct. The SRS wall kicks use (x, y) coordinates where x is horizontal and y is vertical, but I need to be careful about the coordinate system—in our game, y increases downward with row 0 at the top, whereas SRS documentation typically has y increasing upward. So I need to convert those offsets to match our coordinate system where positive dy means moving down. I'm converting the SRS wall kick offsets to match our coordinate system where y increases downward instead of upward, so I negate each y value. Now I'm mapping out all the rotation transitions for JLSTZ pieces—the clockwise and counter-clockwise kicks from each state. I'm working through the rotation transformations for the L-piece and I-piece in the coordinate system, mapping out how each orientation shifts the block positions when rotating clockwise and counter-clockwise. Continuing to map out the rotation transformations for each orientation state, tracking how the piece coordinates shift between left, right, and spawn positions in the coordinate system. Defining wall kick offsets for each rotation transition... I'm going to implement the proper SRS wall kick system using a lookup table that maps rotation transitions to their allowed offset attempts, accounting for the coordinate system difference where y increases downward instead of upward like in the official spec. I need to convert the SRS kick offset coordinates from the standard Tetris coordinate system where (0,0) is at the bottom-left with y increasing upward, to our game's coordinate system where (0,0) is at the top-left with y increasing downward. The conversion is straightforward: for each offset (x, y) in SRS coordinates, I transform it to (x, -y) in our system. I'm working through the JLSTZ piece rotations systematically, converting each set of five kick offsets for the transitions between rotation states. Continuing through the rotation offsets for the L and I pieces, mapping out how their wall kick data transforms between different orientations. I'm working through the rotation offsets for the I piece in Tetris, and I notice the L→2 transition doesn't look right. Let me pull up the standard rotation system from the Tetris wiki to verify the correct offset values for each rotation state. I'll implement a straightforward kick system that covers the most common cases without getting bogged down in the full SRS specification—trying offsets in order from no kick, to single-tile shifts, to larger adjustments and diagonal kicks. This should handle the practical rotation scenarios well enough for a solid Tetris experience, so let me stop overthinking and start building the game.\n\nI'm structuring this with a Game class to manage state, canvas rendering for the visuals, keyboard handlers for input, and a requestAnimationFrame loop to drive the game forward. The layout will have the hold piece on the left, the main board in the center, and score/level/next pieces on the right, with the board itself being 10 blocks wide by 20 tall at 30 pixels per block.\n\nWriting the game code... Setting up the canvas dimensions and layout with the board positioned at x=100, y=20, and defining the game constants like a 10×20 grid with 30px blocks, then establishing the color palette for each piece type.\n\nDefining the tetrominoes... Defining the rotation states for the remaining Tetris pieces... Finishing up the piece rotation definitions for the remaining Tetris blocks, then I'll move on to implementing the full game logic. For spawning, I need to position pieces at the top center of the board—around column 3 for the standard 3 and 4-wide pieces on a 10-column grid. Working out the spawn column formula using the matrix width, which gives column 3 for both 3×3 and 4×4 pieces on a 10-column board. For the Y position, pieces spawn at row 0 with their top blocks visible, though the I piece might need special handling since it starts partially off-screen. I'm going back and forth on the spawn position—standard Tetris has pieces appear with their top row off-screen, but for simplicity I'll just spawn them at y=0 so they're fully visible from the start. This keeps the implementation straightforward without losing playability. Writing the complete game implementation...\n\nI'm setting up the official Tetris guideline drop speeds for each level, starting with 1 second per row at level 1 and accelerating significantly as the level increases. Writing the complete game file... Soft drop gives points per cell, and I've got the full control scheme mapped out—rotations, hard drop, hold piece, and pause. Now I'm implementing a 7-bag randomizer to ensure balanced piece distribution, which is the standard Tetris approach.\n\nImplementing the piece bag... I'm planning out the visual design with a dark theme, piece preview and hold displays, and a ghost piece indicator. Now I need to structure the implementation—I'll create the HTML file with a centered canvas and instructions, then build out the game logic with collision detection, line clearing, scoring, and the main game loop with rendering and input handling.","signature":"EpWCAgpbCAwYAipAzZlekE9c5L/v1ND9+ITCQGoyD8dCv6Hg82XONsimw+8QRWkeRqdRbWNjnD6kAjiCKhSlB3cAD+HCjD57YkjR/zIRY2xhdWRlLXNvbm5ldC00LTY4ABIM+q+C19tqxnJZhzwTGgzc0C5sNgbnCLBCf7oiMMJgZpNnwK01cJsExxSsrydjN6F/bWB0dwtkqt5+E0P3LMysUlu6lzcJSd7DbJVNTSrmgAI9PBLNURZ/4TbO9MfzM2cyGVXfuRvZRXjDpprlGOfy3KZGAw8PLXpswbc+kBEBynRkxlnpm+kVRx8rE2ON+xU88Jtrc/jtAqqL7Ndtgc7iE87NlGjeSlwlwrUaPFgTZ+zieUJ/uvpJhwYCQ4kKFpG2HxQP9L2aqNx6XR+QGRGa+kF/3mKnb7Oxw6ygrujbl9/bq4d1zZBAdudx3xv95FBkqSVUKgsGwrhy2pA8wY/Sxah3/BBe1Tj4iPxonT7bYojTbTEPFoGTYSTe3TLc/qEj2g7Q6s4vQlcZC1R8ABe3LbiNrE2cwp1M72DqD8ezhCHCKtGNBBTzMOT2/iGTh9ufUDJFO/kFOwaj8azlVvEvnbWxz8czTqwB47U8Qer+32vIeJl4eus3WP84kHYvJ0HYBBevSm1QdE35FExKZShKfOQL+gOONIUJScn6BX1mz3Exm4Qi2BXvydrc0lpyvXYaGdBENb6S2s3+AB1ofI2gJ4n9XkooGCLgsHhnrF4ikwvC5mz/l+VY13oHPSE1mIs05+H/C8VQuWk/IZeLg0Ih0Zc+g2WOffcfDDkDoq1QwjXlu3HJOIMwg2Z5dVbMJWGFN+IF7U0zSLyYsQryr5xOQXvCP4Rtfd3/b8E4I74f56Dnrx1wt11xX1z9AQp+9JFl73xYcXGQPOAIwrH/mAsXCjzheimDUjv+OX2995dl1BtqSBA1iElzndfiw37t11944u5r2pH3bIUxMwcVvCUDhm7HDQFt090Wb8PL0kuMMhRR8I1OP2fNikbPuSec5JR32siuA1MOCNDwrChIwiLTys1t5zBQV7oWsk2kB79eTMZzW62lp+XCWaU1HwXtVqeUHp4IJTph5O7EWw2U8/JMAZGGuztC7tAiKfXL+7bDvUXO9GozXrt9eXGxkSYkuw0r/06cceBQDAofprwc44Jc/fglTEYMXogoJQOJAE+FqCgAC6qgR2hINsmchHgOXUjg56pRuW8ZtFfRuocZdpTU7htvqj7jswkEhaU3+LI4KlV5MgE1Yww52xC3hgjHFm+9KWuDtjZJHqvsv2TATOwpg1eKZUfbdu//UpiDAn32wjUtJAW/gpYCnRVpYlQOBh3NVN/tK4e5Ocdnf5si/XE34+tFsL7yahivIHQ8PqAz5lXYsVc0I9tAgd0AjN90BqeOYMVy5PFLaDykqXNOpXLsJAmQeh4pEg+Rmq64cGm8l6/MKNfIzVJ5fpDE54/T4VGGSxEnFKcmR5RzsVA8yPYQ11vfexD/wadBw/lSGyrY3Z01et1ulTydAFoUf5D8qQ07p8jKt84OCQGDGNAYTGtbADGuMvGo0gMFdMu7/AwA6UERcNcLMgOfphCUhKMpKPWPOnAT/ZPs0xk10f9TGFdmMlifaGit2F9txnYo5LKcsvykOMCoZJMwh8jvcecEsUzwi5/cer0JehG8AbzJCoFMekjF/Np40gQeJYrDMfgKU78FDQJay4JulB3H8xX4MNpkIZ1luR00ewAcR7H+pz6zHu9Aii7zK0+MyK5lZ9Cxb9U2NxDk6kkAdwjerWP0c79PISd0PINO6KFroO8QWIwVOLjBUT0b9VML8lFgO1YORD3fAWAIzJ8aGG/Ryg+fQZSl1nlifxYuVwIBwV9mmqz5bKBiNcMLofAWbNRRvm5B1ExByHz7YGHjmm0iSMnRZVk5HfUq8dexhFPeCk98jjpfFVtM2uOIqy/LAcQZ776PnhX/Xb3VCKoBawOmrrRXXfDusN61JFJLDdsOuqXv2mwlzbyW60vt4Jh1sxjCqtsDa21wkCaO4j7zbDpBJal57sNGp59SE9R3YAtPNJNIlyFBlP3RuBUcDCzgl5no8mKIDvoa3m5DmQwbWifNlrkunzcVq6SjPsGYB/FPnw+iBkMnbY0R49s7IdANo4faQOTH9k6Iv8qokkDwRdtXbtO19+7p7GuEz2iwmJgwkRi2zWQBS/v1idDAlkQW+WE10IMumLv9SWSZZ9vjfiSXoqDVMByBHT/9lv+zNmOZp0zVj1bsXUTuMQwqNqWxAzmy87fclbnHCM+VJ7TxBs+d9uAFrxZPoYsoqoBwPbVCdI2omlEcoYfJi2yJ8k39UMkebCAI2MXJdvNJ4Yo/Nn776c84aA3aBtXj6zd4Iuxu4RzS6NIiOg3oLWbbErticUm6BBUeeIfHCaAeIBq2iCOA4QV2/YYqGtcP9Vdo5e8nr9J8cDBhkkONFwp8QMhLo62MsyD41RNtJjvBaPf0Q5dnBkTlokU9CqUkzmE/SVhznUpp/aAG/dViAgSy1lxBgQ/YKKSsLFNPorjGIh3esN+tNdn9k8J+LsHDarG4bW4wU1/jAQdvVSTLL7pHpLjqiU0xIyZGzvvBqkWMDKRchneo1JySmM0z2sB97EG4D8QJ1ENybeeO6lvWy3CXorry2U+ftEe05Op0WaHo6dScFQK2r+ff+T/uNhDOVZ+8jpTqeSvaWyQS3TNSty7/+5/6U1705mak9vpx45m168teBi2R1yJW66oyqTRHWYzX6XWnKftUa1IzVPoRBp4ZW/mWcGO7vpieAelooS+wo5fu4yYor8p8l0M9PdizosolO+oyRkbyd7vUxAE8N1rlVjZoU5xU5fqZz4a3Lw+d+4DxUaJDz5LV0hicumBM/ZdAdiplW2ALh6Vx17h5mFn9RX84XdwtUDBEmm7LGZ6pohx1QFmIZUosR0gmj4KT0j/m+wSuSQFUW0zo4YKd9j3jbxw7Ah8L/nt1PY4PGs6489EukX16a6Rs+PvFebFlOe7rBtmKhDmKpQif0Ewkhtj01zrLvIKYrvwwTlZvIayj4MzRf7SC6vJE3Uo86TWAMeb7QCi8j+RnNj8lOLuhORWyDptsIaKCgYOfBhFZVeEi0AJRerJWv3IYyDrxatqwUoipehPHrGxh1NF32b6yX7YplnbWsXcsK4zvKSdOfUlZ0O+eHUz3ROTmBDGBdr9fJsl25KBnYMTlyN05oe0zWrkHU8yOifw6kGS0XTGeNA9HGYi4rNXKmXqEhFpZJvBMNw1xyQ4WJULyoL3poGhhDzSSI/nlN0RBwpuBZxkb3f4zws6KeiKuKIPO8LVjWpXDv+SfCBGAwCqupCRh6+nqkVF9UvEAlRYPpH5RsTII6GH8+X6bGPJ2beDJGAjHAog8IQUwXJemjoPDXmwfR/JzuMRsAOMrCFcmTuwIHV2Tf+TG1WCVzGuF6DQ3Mg43WNj7h94zQDp/szVv9/3bq0QI37c2SM/H5C10dx39GmCh7L1VtBXlLZV3CSVfCAn2LQhyLxm1R6SWmaBvXH8FUfTAJMva5zHZ2I4lAV4KzPElhZNiwajMKOMtTIDqb/6W5QvrA6gHiFY89Hlb3QcgMJ5cd961smj1dLKAu9MfgFCAJ+9nGRlm0r3gyoAVbQR/gUNn8VY2HutVKuAMwUFsPII7k67o1rmthz2mkiWPDQrc+UMwQ5wXtfGFXpMm58sfEy72dJLe1Ncx8c4zMSr07Fd5fOr49Ox2wewmnrbU4nk0VKUav/S+sz2QTNqFCPiFxLQq3HYBgfBk0EtG0V6gRh7Ga6b2oQzttpNywZPg99hfIONhPIAJUFg/zOwQwxA/97t8wnb90sK0SeD9Nm0puYMfr73WPh6umt/fNk54ZRpcdOiQOzP9cAuv+DAqzDs5w8xwflXEAGbVNRXREa+Qlp8wz02cficABsup50lqgBVmLAkYD8sFfb7FXAPZup9KUgGi9QZI3ZwKTOvrw+ffmiQYfWN14yeKnJjrCHCTdFzRP7ZlEQZe8U/7epavoYoqculhmL783NyvnzE8xI2O7RYArzoMuWo9vmihKFN2nf8KuvXXdX4jZ5c9Ssa6cKux5WRVaSyW8fyBhOE4GqNAj79gZwC21BmpqfK9gUvv2JLq1lpSs2CHyfkmd9lNKZMT9ShSILV492+TAVAMocB1NJKeq/0TmuBhRy1cRTp9XjjBIQS1NKny5wSVq4N/1BMlhYPeJ4qWVgCWaPjYAS/emN4uWrHfQ5YlRgPU6z3TCnQPyJCN+DlNQuJISv2sm+2VL1smdtQFJN8OIXvpSBF1GglUQ/9WAD0ic4nMWqS8xPxyQ7L/rn2vkUW7n/Xkna+h/N1GPY+Wu1W+nZHVGbNyqFEdqORy85LEbAenYBSvXbGeCOSlWMaZCm44vhAfC6H0kUakVYOuHauKZ3mpV5gpu2UIQSQ0RkFGmj971R1NJzemflKTJLzgNe6oieXESrOxAQp8+5KlzaiVa8jpHDsqqwiVbAlcjx8XlAbOT074zBNHSiMnD9jXfsb+WRSCGZ8/8luuAhUWw+/Yqaw5YMg9JIWY+jdArPbqtlG8GG2saGXHcX6vQvh6isHTKY/xCaMHk7tHWnAcefoUnfunfnJ9IpbN3iofz3SmruiIwCpWeEdolkHXgbTAjNdhK81LyncFXkgdRMkT2TK0As3yK1UqFFWyY4vAha9vLyqMkOaqsd/HcroMIQRZdjEU3SUmhWJwG7ZNmkPkKnz6Dmh3sQ6Op4caTO7Wg4bEMuLnfYppv/CMI3nxfq0Mda7bXBq30KqfAfMchm/F9u1LRgEM7ew88/Wd4mYZgjbMazL6klOQuvf+TlXqM8b01ry5NfsZ52pVLdyQWniOox6yl6gxWvDD793rQErk2X8k4ixrxMeNvQET6p8oLGy4sbU/7O7VDPWXG4jS2I6Q6dGulCypJaalNbUAw34YlNVFfOMhTK6o1/HoE45HmsTmdeGD75lBiYlVFbwJjpwtaGPyGHPf5cZcXnz4IAcXIHhkUL9yjtiF/d0ytCyT6AjM/YRlfsontd+GP+n3DS32xLgNkMIh6Z9ViF0sXZCj/YBwIR4o38jdy1KbJJKZSesMfAxvg4HP05dyZZHjUZz76T9GivK+aKiddbkYTohRxXfzuTeZWFk+2+dW7f0lbibcg6WWVYu8UWDkDIImSoiPmXbB2Y8jTOKSkhTZQzMPf6KVucMFoV0A3s0cehpUstG4iEEnKBGpnOEfO916IqEJQB5jBLr0P7GidAWV1WdPn7cpDyFZZHQvENRHZKTFkrbGDEImKeMYZ0uGO1q213rd/8VEtQr5MNctyBfR7JD/OGkPDEA0/fGvdh9nOiLOoGHUMhTtMIjerYtQplVKGsecjU8GrclfmyungDN2KcaUn3cNm80CV+wUL4CBashcP35S0vXmOHxL/eHUBUAfZAK4hEjN2I/sEWxIC1vls+nfoX3sw7L6Ttt2xcgtYGarXnV91oK5RF91HUUle4bM+6puzrfkLimor6U3EriIwrnkaHmV8QIQj9QpS3toQ6DTGFU8kd6LH6PuHj8q2i8IOM3g7GtcRadkl82yy4BHnjIGn+T9gZnxaQtqtDz8O2wTyZt4o9kfInPwZsujee64u/bL8gcNXLn2ASZHkDwq5rBa/blMDT2mqhXLQlwS9g72Mv0FHXfR/OC7zkVNjXzFhlcl655n5plD3RklFLDV2ZhZCus1x9qMEP6EwABq6uHPDH0QL6sR9StsySXa2zdnm325Qt4IREZbIGg4CvoDc+nmsYfZ26IFN9mm1hYPLSCPpbYuxg287mdeh3QzT0FT39LMWu3be8vk5mgQlN/JU/MRsZOnfjr4BhksWtCyUXszV+3UgJes1hp0wSSGHwu8tmgVl7Jjy/xsuPncZoWBFBzEZdA2fXrVrtz0YEToTiX14aAfs/EawzzzAp75v1pV3x/eKmLgb6DfbcBG19Pzv1TrQmhkxlGbNuUMlO5hj8r1NeMLFFXOC7XUYH9tuo1DhO/CdkVnzPlqVLRrU75sL4OEI89gpaumr5M45QBd0HQkNA7aPHRhvfi7BVK0OD7TPXO2B9ZlKgo5CFdy8KGq/riJ/rptpHqDvq3Ad2JiQV2LTA79tHHA+kLD1XLlwsawzQMlA753Qewhs+6gHhZVyPYb6phhyisc6SG6IHnCWtDwyod53+mr1ceu4LbFWxPuPKsezt2e5lQF/c6W8hBwHFeE8M/44Kaid7Cmh0CKbLZj9LkJIjpBYb4iny7RI7hvTuGELianIgcsOj6NMO/EM6z4XIMuQ6y57FgDfkipj3q08o0UIXwWkekUZ3F9jNyWLBmwGMyvNlR1UmLNarC1l8Kgl2keN+1ixJ9y77hxaY71lEa8vAoEyadLyys9d9yzaktZA9yn0DaUcw49NQ76KcCzLyvAcnrkAg6ZGqbuSInhbMNDlZA0m4By84B+FfM1CtUqmjVfihuD9Ms08vWADt5DNzosnkgl/nScl9vP8tAWP7lyIB8Dh07du05FRo+7RmOo9oLVppWxAbRuPU/dKNBMuqTAwaAb+jd1BXLgm6vqfcZYEo22fKSS1v61BegImQ2U1FrFyVNA9zJQR6uzt/sTyaNiqh81pbnEaAPsf9Jh5EFRT8luHzSzJBzDtu3EC4bq1uuvra/Uxfg/24KkrwSEIpM0lWUdOeeE2nV3DGD/JB8plCYP9T+VrXFPTAUzX9/OdO45tEYpnEVyJH9TAREXCYLOjCMglrJoIudek/SRKDMSUiAVzNdn/vkg3gEfvIMq1VvTFD8D7+zBNr84OoB4VUfq1wBAO5DVgXiBdeZlzc7GLXvbn1fb9wF25tYiQ6M2nmgVqiF5cWeXswyJNcjJ8CMJlwH0W1uIUD9qQOHDVclqKiLGEK31csxkg5HMba0XFFS8JlDyJEsvizjNauMJQFPGBvZMQe778hzlyBV5gfF6EDq04HM5Wo2P45fzwq2I/32XFAubysQShaONFiv6hpIQu/Y8uXN0wr6KwS3J4gEUi74zPuX01XWvXUpFoFoZY2jUk4ltmhyEmpivs7AGnrNj8koWY4VRa3aKchn5TNhhmNB8JKSS9kevntUGwtXZjUe7L5i2ZiKWgad5NbUlfzelymw+MZLNqXUMZdCq6kW8peTmznpwDjr9kfJ5rXAh8OfU6xf65QBVl4iH1ZaF2VKdB8LuuawKx4f7aaSHuk9ii8mZghw9AQeREyISfa4efUfS5Bpcgyq+bVLRBw1QYrr6z1CiSUdFw+G/K2TxUbbF/X8f+K8i3ecAYaMcd3wk6vzGiYqsvjaBXc210PPFhNJ0pn4r6BJXYaq7LD3omxKuoXn6fF1BIMAmzK83oqeDNVrLB83OQAwlgNHwP8X8M6czeH1ADIeF/T7/E/x0zeExJ5/CVnJeCKEqPVX5u0Ze3gjrCR9VRfbzIG+rah9hLLzrUr6+sZNnGZ1DsLJ5n7a1uwPRp2TwuG0Wa25pFaM8YEcTrJ1tLScKwhP2qBpLrGfTUSfOvr4imoJwR+2NoEcaeVm1GvTgSyq7OB5NyWn2xyYTsptDoSrsGDeFENDoKknvfgWDyYJUrfKtTIMi8+yhO7WXYwnsi2EsCXqWHCgaUYcfsb4XqhGhiJx0qkrETj50TLKwT40N1HcNHgLlSD/PCEtqGBvy57L4ssRDsjElEIJN8gztn1otPmgNK+5aKeCyXUpKhw/SshP7OT2fMd6ZG/Kz07csGAjo4JtVkqWWRdkvH+q1fyMcAxzGwiliiEz/xh7rPQme7GDunRR2wlZr6S2NF4Wa+vgqhiW1zSsIYBaGqrxxeE4bAq+IbLzMOQm0eKZbmii6nUr+4ZvZSB3hXyYORCkj+KbUP5BGNQXXTb9lH2b+l8K8MOrWOnKe9JZTyTxJKHugAAsxH0A7RTZc6nh+Sy5XBpdj2LzGI4VbjxvajjYNJMlbzNXD5LNyiNjEY91+it+rH2qe56YrHysM/zly83d5pcIME7WCmybP+t2eiYWGc6CMbu6OFFsVagMRecYmcaCeeIH9qGKDGpLAeFY0A/yzdjksi0JAwqX+OAhMKhvE7+8vBt6dh8I1iAOmqDqBniwKcPLFXW6p2hrFxlCyR7nq/pBBK1ogyYYom/Hxh7HKCYC1ICoumjJOzEZWSYw3/526fLG4fskKX6tXEwS4C5L/bF27qhxgHv2ovn09YqZPnl+GzH/Uq9atOEQlUN21BemYuBUcsN53DZrvoGUzOE16JLMXIRGh+v4LSunvPAA9+n4jgJuMyulSI081DTyPM6IpnHxdXZUh51HkHKvIiu5Mf1NVEwVR6x5ydDnqnAtbHaJbWTmr8tv6FNhJt9x3kKTyRIN2JNMz6XQZXdKGMCJljpUaF4cfXLqnlhT0g+hniGo++jWwkrvotIKZ1EHREXRMI/CdPOvNiK8l4dWGRztce/XqEHSkP5pIq1pKbmARYiJGOutUOlbx/g5rckIRFDVXyn/UhkcGDRCzEWTFLqQP6rUACMJE+iXmas9tS27heyMc9RwYECLLkZnlRmKi3y7335KAj+Tjw8+lH2tAvXSTwkKZEpo/zuKRCCPMpISZTYSsB88Dh+snqp7RM/YVEAvZfIADrtM1caGy1c6rWVci78y6fJsi9Dg5FHz+ibjkwfoXwWUAFm2U+CeJ1iYU7fnakMzWZM8dLpruDmf7GTIsFKAnAPbdMbl0V6gcQLGEPy0PCqO1kQQefuuYJgNOHsPmmKNb5AsLn/YCxK7vhj18/QFQ71Qkw8JugpiZs7F01ySNMne+9IPJRchARn6eWrqe68aqVuSsI2lnKeRDmEXTJ4z8uqUuJNrR/eEWskcmrhIMEIFBnP9MZ3ocZZ8itDSQyQ+0Ds92uFGIFeqY9WWzcLQQ4BuqiBPSMVnHnPm9yXs4xed8W7FgRupMTuMd2ZRTmNgNVUhcv+gIjwG9clkpiATMXvudDJW1RLGyNGqLynGIUG4yvb/EPHAHKAnmNyD+FqvvIH1mv5ABnTYU2/pGiXwuxxKOVtuLYkeiwotQpkrn1qaKAiSilQ6+dad1rf5CFV8oJ12ZAfGsIMLOfTIzpdLRHtRWynoflSeNOUCYttmyoGPUvjqMzeogVL0Gjcsadqo6xz06NJOTdWVXKy35fiwFcgbzbzbbRA+n99Xr/7fGNIcxBb2cGWJZucS0xL0+UpWDGD2mnGu40uQdFpbGrirrUhfjrfZHqZH6qPKuBBYoLZCiKFDTpwxc8XDKuHF5AKldH9QXisLxeUJ0npLfYqfEElKvRdj00UKHJRCn7Y8dFnEBbdrrf4mV5PmMD9tuIZaeuH5KOB00P5bSDA0gmUhqIPUDXip7WeOjf5gSLQsvXFE7qvf3FCrIMkDXKdTQ3KWuKU+S7tF4GCPirOAX+EKV7H7dlz3uMl1rbPu5TMvTnvFkSAFDkF7dYnx0HGmjlpOn8Zb0iq7ZLnioaDxRd+ZxtxbL7cjZPShi9RRDWIXdawgzahRO09y846duRDcKs8RkaeF5nB9xSl97xwGHQTIo+XSMEAuFANh0JWRHHzQpYAlv7e6rqXebHu/Q+98OVYedZdAaouT1NNsY76YvJYawHFP++ca7YQst0dHckXDGmy4BXIHLdqneOSGSWDimKYCQynsynMviqrteBBWJHAbA2nI9qr8PkhCr9hjuBjfTLjvY3yxkUZ7LS/MMtjXVHTRjGW+u5wlDPb9serB7BvLa+bBrt9yYSdYA+xgbGNpQ+ZJtEjzqsW/uAeQz6x4n1NlQDKlz7qkCxh6RrCNs/qvD+G2rOEZqKACrBcTIUFMaQg87CkXPdpyrZDHChyoQWVkuX0e2xWcj4x/tbZpwqMwlmf52vFmm7FqU7TT1kCzog2o0IUVPaIT5El1Ckf1SKoqC3wxtT8vnsZOAXtfv3IlcUsXcgGFLjxSt8Mlr6UnbmGmBjkqDuHV8YbWm6l99X9nfIubyktO3LAB8fsM6sYg228aieTuEY0MzB9nOa5f+QPLGcCgjkjVKkLDpfRAzjrBBm98tIf9t4b70L/l3Q9oFqz7fB/0QfC2mhqN41P0E31VEYBEqJK7Q6IEvFgHegmCSO2VWLCy6uiBE694I/laSFDgryj/AAqA29cgHKLVMDZA9zn4MG33nqv2r6IVcWjCTST6nZQ8mnX3S0NOPuKLNUAg0RoU8s6GxZDYxm/Uf1qmhvFfU5YR8gbN9wo9iOPbcIixg5H+xrArsgioovf/uCdfjh24+51I46DwJxa2rhdAD2zlRVV1j62yuLFQ1c7OOXGz/Cb4EaE9kWBD2jXp2H6MLezIeAC60YpSKUJch2LSl/N8Qp0KkKhJND6jQsILHPJsZA/Zo6Si0OKGMZeOyPEeI8JDhAcxFmVZfV8S5B5CQiKzDNDAMLA3fypulND6iDrbnanfV8qZbuW9q14x38/GatBTBM/WCM5UMk0DYUIZG/HgdrxpQ4siBCdn62GKJNlUOJB8tI4ltIp+uorBvUIrKObGugASS7iTK8WGwdr9uBBYyPVjv3flMQAphwA/dU0SJ9Dem1R6JsIljwjJQHN7qyvmUDVa12WtF29ajiMqKyQnUe/skiA/seI9aJcC+ovXsFbQeKQOJEa1bJczyWs66kAxfoY8dQ1BUVCxJ4qnFIag7qnxoauRj4uA56uYo4Lzuer5ZT2hx0AdXgP69iJj1o2f8uv5ymxhQOCbE/DlA07s58Po/Y2yzTjc3FR4qnwuNq9WB8ia8fAMy0jrCgDowud4hWVfPLkCvxtwCaL10U9dODm76r0fZSLANUfx+uuWEN7tZ6yQZeyop+5tCIVFCaWoSwcW3RVBBbLaIFNuzj9ximAQBgjz5zJjpXIkMahXSGuISxrSSS3XBO/f+KZXNQ7UfveSAks/3tDy1VZZ9BAVdkKL/KOO7no1RADTwELwvAg/RaZXtQGP/dRPkQyX68kRumbw1UmtvfTErh0Ogtt8HAIF7dqD7yo90Owbs/DTRQFB2mQpAehpl3iPia+ow4+Um2Fbroie73qpDmpf13oqx8aIthyIpogtyjQExxb22bpTvvRnSX373NEzOzEeqzlTeh317aZgIIu8URQRP1b9IGhDsE4XoYLKbnva/Kz7dMkELnXmMiimepDSXVwY8dujo1oPv7NW0eO9j8VkSaGCMiBPI8pZ4aqXKyv3SCfdNcgi8XTZgDmaSXUGoxX2qwXIdqenZemqeHg99dONLpnBJgpo1KGlD0IVd4VCHU4f2OFJ3WhC13Foe+KsAbU85ZdWjik5eA0LSm7VgH30IOYDHBOo8J3PzGFsII+MZ7jbGAJ0noAqCiRRjnfCl3jQseaewkdnXa7CXCnQESlWXZBs5Z4TQOcYuWWKsZGP6BxLCB6GXP6QRwdHdOka6O9EudZN/giUPMiMVwV/dM26QNOunloa6KW/homA0HyVKNmw5amgEpRfKsMtFYOXnSFEy2gF776wF6Th6aNDUC3t6VWH667EgQjF1vxY2aDWLk6AWsQCJkt/onCejQ4DJjfOhEyzlef2tqdwFVJfrSKHCyYPH20dLNRUIcGp58skTJ4hOnrRsfyMzPKXKADxvutHhUH/16nw61eMjm7VjSq4UX23xLxk++yPzgWK2VMmqfM5QT14Pn57NkYSFPnhb+Slb+Rvij8DAuak7pgzk4NVFKSuWEcCO9lkKHGNNCbJ16f2xbmZ2YOPvpsbpplsX7x339sF6ivRs21aGOSUbjFPrxjXJ7AohXVvSF4HNX/quEwiRIg/mgVN3bOXFxZMiwnwAnI9JfY+UZmMLEmdwaI1hyPVjdsJDdbsMN5r3thhXtF4xc3mLlk/hX7Xri3uQtkqnFl9R4+0yoA73rG307vTeKdClrBqf7AOvxZ546lvtq1YTdCquziVeMXKSuwStPiPAY9GxRKdvY3GTdD9vAD5dkNzDWPyjGtqmgy6KViYjmCdHF+rLgB1Rjyzuannq1opqeClwYwS5vTL85oox+3ElmhT85pWE0jmwm8BNFVVfexwP1Bxg/wPJoXHQ3mC1LlBlsHAFaVR7BgxgckDo6GD5xYuOYU8/KZUueBtlwhM9lL3KYIFpImEuV9naITLeyEtKCH17bvsr1MTrNtFG/V/4+e57nRlTL6u+toS3qtvNLtVSbBYMYYsZjnXIEZ0VvTJ5sjpK+lNNVasNPlIDauoRGSiBo+88T2iyRVjyvwqFummXU4YeVHGZQTqjW1aAvkI1RgwOlMhRi6to3lsmabRLEZwZzZm9SGmTVIPIOHLV4p8npRZ4ahgpbp8a1K1dCW7pp8PP5zl2GaIZ9eF0s22PIrbTCz+R7U0Bso5cW9A4gWsUosGgeO/ytAUu3YDjSrdYoddZnE4ZP6rc7XOXHezwoOoA+HdmGrAPrdqIsEL1XtmiChMCWJEGh1D0nLDvaHTvWjUEYTXV5MQs7dB04FfE0IjQER3svz0/yf175DjZWblzw4ME3JM1z6PGmt0mtWRlL4spZgXtMwAFu8f/AdUKeOe9V8MSwDzew0uOrRucEB4A6M+FBTf1tvcxZ1LUQIADk9LiupkQ5PwOK6u+nnfnqZn5K0G3VSUIbcynFEKm92wH2DuS82Dbw/+e/5yJwCc5BGptLG2+k6m+k8kYjOxZW2yIPFboPv9fGj6jXebt1SYIRwpaagQwKC9TLo/ISzLLYNB9DeusA7kOWGzeNF2D0X11UN7DKPfrgYt3XLhinoqKrA9pITiw5zaKzxQwCEUM60WFh8FqTcx3KahEjTDj3b1Dc9pgktN4jfo0vuGjpHczY/8MdDGanjC/9vCOnlm44PCl5/Jddue6Ahh/9hUCyW6vwjcmGVyaBE7ntY7KO/o+Glx2JwKsf24FWrWhUaAABTcI3R4Vk/k5IhswyIzhZsdUQdK289dUkcnPqQxivfsfhvhuqKPg6K+lPNtUgP0r19joWfhGaRdUh3Z1q7DHLL4WvDdvgwV2t30ux4ld9Wj5YNf7FskruaUb0LfX25RSRWs2oktbdVsGWuk11k0NfSTQmc2M9fMCi0awPAFwaPBVbJbBIKcobDcLe06Wi4qW419v5jtCPoAw0/EzeSrgZsCBstQnXrtebgveu3Cu/L0zlwWdmSUACU+M4NQaWQU7+lUTBwL/WWlqg0Bxs+iRC5OKvqOgQd6tdGuWafrBqXbHIlM2F2c+QMaWXx5J7ahMVqh+mW054zw/8fx1fkGjucfvYOU0rM6s2NkeWL+RBu6N1V5es1ryiKM3al2FjwKongZfCdukvgWk3exM/4wuNR6QVT3edYR9d14Z2bCwqpkYwj5B9Dab8a+PCW4YdnvoYFobh328sUNmihUoEEzLZG0nS4CkeNgNABqGDu8S+3KlVTlyTzcKsgIejQdEqpW9Ow1WMabU1xNjF8tbOEToC6937VqlYP3fuNwzjE6S562nZX8EpuHbVLJFIu4foln1t9gvsMp2ISynXryogC7VsjTj/AEuUPf1rk0YTqsJgjG8vtcPPgy/5c24481kgjs1Pew8QfQcZ7+iyoekcqyGO1kOGY5TZHDGQDBpYSwvTgHi3XaLqCWZbrDe1SQSu1+aWPk9GltW2DmnURQCwMn6YJH5fwTv0p5Zd75XTJjnkvTuFOb69+SCjvgyF40BoIiibQ1EtKiFd1s9Se7vEbDVqMt346QEdppYT8GWBnZk48tAjhTcMhc07hl+b3yf/1ekpfJhP4UNQA2yTCwp/hr/mVPxPe+/DQSrBeFNvCVivdUwQNvieELV83JEfT/Un8MBQbzgchvdBDA8pXSlvrBuF8DrWJ3xvtV9DT38pJqAZnQ37gGrGIvrEgAu+h5OB8/1Jrj4PARjhk0I/nJRn7aFj5q3COfmNwReHEJl1QlbQEdpp3gnfIyRyrI4GrKO17UF9ZrGYUOUIJ0dJmL++yBqSl87BDGIlqs5BikjbPXFBAcbzuk+OJfK1AJSVNxYHbLPAT7ZNW/35oyQmjPq7xVPzIiEWF+jS0Afk2zbM79Wq89Pi1UGD3a7EOVx/1ktoifDezdPxRV0pW/WxQgDP4sjI+oLHYqk3SVtl7/avAakV14dXt48FQmwtsMZ87GtE51xUSnzbdDZZ5WQFU+pvEHSogpf99Cbdt49hXCO1cMac+W5prwKznT+DmhzVaZAz8Dy0lLr6EcM2m6KwjiHqLHOAbaSWElRXPqhQneIv1Y7gbAZQYdAW7O2IOYRfOeHUrNnC9Eza0FCNjn3LR2QdygsuhpGDxMthT9PCYmsXZsWWMlMYAr9HHwjpIhv0U1QoEK83SdUiWM51qi1HWCbGqZdq1YIkPxGCGJGQkew1yVf91++egAqieECxfoj1r8rL+i2OZ5hfE2JuTUSJYPtvSdefPovEMwUxAqJ6XUTUdyJV9miw8dMYSICgs3BIpXc0NCmQKEpwWyoXNWe9HS0SYOhsVJD1Pb54iQLOK+FWpIGA8Dr+E8ZImSkDLAhOoQ/7pK9piyxS+jArSpwwiXaghwbn2eilRL1QegVcfMWNJ9xg7WEaosAPRtwHwYyD5gnCqMFp7b5o6ljp1DZBRx67BR90xVfVTOfVMg4reLtrI7XkmFde2Y+Kmt9Q0Z22Hu6yFzcw+OmtpuTZyp8w2iA/4tHIs9VJ1AJWwsh+NjJGSGiIYlvkv+w2PRpAumdDSo+89rAIqBSWBMC9bwIimvSjmBVHHU6fvDWOfe41TL+n+jlO1npc4CLVQ/ffC9/muHETP4Txr3pjoAtDjAONCeJPP+qj907exSMfGH3jyDRes25PI9vib8jWP0R7dMedohbar0avWtFgAJFmKIsHosVqDl7wg/T8XTwslpG+Rw8bHetan/LeoXXxe8qz74BsDxbN5GgpY4lNLLkwrbYl9ucvbTGeZkjCNI5D/tnyV9z85jbiJxcHh7Jn3mYgK2zo0YGI8DWtPjpMlqKn6KRBWnSlIrqztv3OuibP8r8VPewgvHwQ4XMJLvBzV+lbeEQMfNINmipY8VQQBzRJUQ2GdBwMOrYlYRPCyBYtt6xyqGHEL/xvrEBcwQzP74ALS1EYpTGSGwudxfdEbAawPkkNUxe/iFaWi7gTqLC8pKnc4yt+JwIXVImxofGoeJMTeRucmHIaKE5k6JJ4Z1psG9/deIlTVpbOs3ok7FfEfiLiN/kjEOdJyxVD5LK7fx1P+qEcnvzMQAGa/VOY1HsbnH8VQBu1K4mr4wInq948WFGnsjL1hF+5aoDxfxkLS9sGNK0Wf31PjUK8uCOtaPSrJmjPd0mzumP9+UEWGaIB3rcAfLQePaAp7M+mKuiUprkKV8bOuT/M2K1lK1hz0kmw7CPlKzRo24ge4ef7zncIjT/dloYyoOmcqn62sGICZJqcLBRga9lr0uTBS/DF/rR2iScXXH1++R5+UeBsftif+f1HlKdoKb30wTGCtRKkKNLeqK8JkeooCTWWmxZDwAMf6PcqbLAHuoCpu5lHr3v/26OfIdrvCwhm/7zTXWf09NZtnI8dKPTHZja2O/HJ5meYKaKXLDQylZvutLV4aAYhKiQ3rFrAqLl4u/m7j8g7+zBZxLc2QQIqP+fu5dOnAhcPrBRG8wzaLNDI0ReuhS/vVCyXJmNiGRhUdfhoDPXQyULMQh52/xLsHzN/4BOzoJhgWcpfoJBAoKJLTNt3+o/7MjDQ90nnZeWNXS1Qb6+JAODpadiNOge+YeM0ouDSZ79OLka+/go2RTI2BvXFSwkhy2UrKNu4QQzSZcaW5G6tYaDd/bfZNfJ8fPLlv7VAT12viuTfNqySJQyVPFR403gi0Sxi+yGkzIYqMnnR3WbbWQU6zFKU7bRneLarXi23udX3N4QHN39C7s6RpwErUvvn62yJoKeidUeeBZJW76wfqWdARZIkJr7UcSA+qVkQ3f/y5r2KDUC84/k5H+85gW5zTRMWRUGnp0atMcpzKN2InD7lq3+zhNHM0CX67BVXD2W9VQow25hWQqlvAfl3cY6IKQkQeSRFjtsJatm4RwaP0EgEZHQUI3zeL8ffSnXkw+WX5MbSEWRG9KWkXvKhcQVjxBn4vSbeutyW3YrH//MYSaPr8H7YVgiV5JbON1mIY45igD4NkLwlDyVsfdwpSxiHtAkrf/xtRwBCB2ZiesOr5Zj/XEgGXG5gDFiDezlVcbdHolB6UFDxvKRTTJ67kOPPFSLf5dvqHUBXSAl23A23ag0PWL9QGiO/v907C6UO3kXQ7XHb+mmE52ZV4U4RbxtH2orOuyi/Lh/QpuB71fGgVyAgcDzPIlPQZG1E5gNCDXmLX7K0yr11Ay4B91qgRRZ7FGq+FOg8xOS0oKIjVBoE71NjobbCCXF7ofBIo4TJJZOBMt4DXKau/JiWYXzB8NvUuwi56pas24EB3zed0eJjL5/S7o33cpBuj3IEyXog3jc1SNcXEFnL8GmYnWKn0rWHx23IleuMGCuPG6wxKztY+9KdS6QcQ9885HisQykb9/Jqtwg0rttKO2h9hzKMvSNNIYm7aswy4wffXrs8faqMA2L5FOUF5jbtRjbGMMiTYO8DcsNWcD+jN6mEDBa/qTcbwzwMSn5yydcC6I57JDjXnuhvJuGZ1sbe6xgdePp/W2V5VtKz103LSxJ8AzSTS0rHsHmy2VPwvRTCzaaG1IgzzjKp/CyrotoBGKhQUJe9kLKvVNqVal8tFNJgJLhwBFty1Q8SbpTqvF6qIbhySjeenEwMnefayfxEFoBwWt4XQ9iyXeFsws/IgF7xoMjHyOdjZAJotpqdExgXicDW67jcokgBIhWAgjTXqujfXMT3JyvE2nSh3ORwAXAfEscrl9yq1dFzI9Qd7FABF9xNkNYL1QxNc4BB0TIv+kq69zX5T1ppSqdZcoCdh0l9N+t3OapGXznb3yIzee9HDmDujVrGxqN2hQW8iKA6OaoOb5NOfTHMtCjt0YbTmZh+Af+UxMLnYjJ3qaIg0w8ZAZwdMC8hZy/KBiMwq4tS7NjJOgZYS0MM9wlPs3H9SmJDc+oy24E6Rwrb9tvJvF1Iy5kZD+U1UcWBAxtkUXSJ3nufAOLceZsmwDKNEQ7F4LZla0xBGKYg2fonTfVWIg3dI7pLOxebCoL3SOvUIflcBvxHixq2LF1FhZua1zkCb4TMKg11T9Q+FGdOhp/+8kPpSg9opFrWWVfOu5NY8liKC1U4UmukFLKR83a5XsbeING3xE6+9QOs1rVCDkoiGPFk83KKeLyj11DZp1LGxOOYlqbw6OLh5yRLYj1HT2rTvocQWXOo9FfQ6DEylP3BkH3qwtnckNocUgRbL8oTYMFHfOXKCoWJkj6qnfOGpejU08w6i06mWeSZ+2wJabGeX6XZE0GinqGnXIytMHJlgcVHxFT26kRP11KvquNl2zRTcfodfo7xIBUCavLdUSv+zT4gVNZMJuiqiTqcA7WABW+BqhRs+IZsEnLS0NWJiAguKZSHKFLg3V+ANZd3o1b5VSLIKeNEwCcEetr9ROUplKVubKQ86gZrotNehtoT+TevtzbSbch0FwZJL8smxompbg2n/elIN4IWNIAV5F5hxU8CdwQ685yIwyLOLA5irQ6znsmpDJuFTWF+w7x7d/yiHdEnLNCs/AHooXPvbWFZYu8/SVNXRB5weP5sfVHLxaEzvO4cQXQO+C3d5gDVvhH8mv2/3s9JRp65XjCDZstdYnDtOXGRaqcxJ2uIki/nujA/2rRYBwDSqW5FKD3958t/iVbAbc6DYjaFcHbAoTw5R0ET+W/e8dvkOHgsaM5OlsaL2S3ok9sG13OihjfOzCmNWLrzrE8a3zZtvOAo/Fs9lT/k7OuS3w2bA6EG8Ym3CSuMtZA2Dp8BX8EAkV1vLu9Nc6athyo5TD7XQ4SHjnzjKjLLAeS/PVXaQvL94DzE67LWoWCS/AfaBDmh0ORKbaGfA5KrAVibNXZs3DksKa0anWZChDt1d55Yaww7OE2Q8Yj0SwnU8SIWF6XaZG4IrmwBRaUvmWXrCNTjv9dmqrj7/O4x+CPFZEjrrvUdaBuYnf72cIRiWHrFOFwqGsO0H/IY1xeo817rknjaYb8geuB6+Rs3F6lAtLa+wFgkUyCnqbob4Ho0bywUGQbK/kv6cAZuDAEsg88nUcsA5AeHlOXRVWFp2Q9gl9rtzgw/MgCLveYf09/tYPVagRd39/d60SIT/IOL3H49KJO6HZwNib6ttOcOj77jcuWqJ8vP7UpVWnCNtbh8maNDBk6XRMYrmt4LDyKDUxDvGFNw6Z0pzDcxdN8UoGFAF+5St5s3puOkQolmdCo0ws78euXVFknBz6B+j1AsjzbMS29Bq75wD3bXsiVN8nRYBrq+XGaLgq2x2f5kePg117rebcTt0l6GZzQtwCFtUwtix3CdW9f3j2YQogp49N6+laAWHsGco8bayVIZ6uDZh5AyYoeKz62nt9/PjDn1na9Km0Xmu2Ckib3SlQe0qjYzVMWJCmp/67QXgVMt4BJFw5uEBIXkmRlcWrlLB6xflaMc+9CYIgXan1DnzTeAxtwVBXXYY34wW8+4gslxxP5MzaSAinhS4gD/S1PzfUfLu3jDl0S/9Vyg3DYuyiZL9urVtFOpw2aUHxTrzs5iUrPY3wiXoZyZ+xSZ28viq5kiY13tlblHidIwZy2tKsoabel/PXYC0d1IHgfIpjA564soUqTAlfAaxUZ0qrqZkkGbD/f3JMam5Hpi46qJO91YbHqEoV1xFry68Al/4dxcOI+KI4GhMBeQlEH37d4UVrYvmHJaGWyoXsNoaYyD2KX1sdzB3Y/Xn0xqvb9XVObUSq1YzYR3EmwDXQe4/HwTdvNf9I5//45YJjx2H+ih5yIQUTeTIIEPbNBZ1zyC3eu7sBzEIms6DYRSmMCdNBWEpIQc6rBg/CaBdNX6gl27Jjhn+fd9NDZJ62bepHOzQdLNPGqE+iFDbt1T1XQPbsw7GkMIT5JcH/suUp/5hok/W396/D6sycO01goY//30CXWzxz3VgXxtbRO6FlkE6O5zu4EpWCQtcReJ7Re1rAmwc+SWZtDC2Pso1jb96VGv6rMr+vQXZMbPkYlBs2zLIxsPtuKQq0U47BL2hDof1705OWKs+ezn5hNd2toRtvXqlRzUJslh5YRmaFNQqObY06XFUlr7TsVG451Or80SlwFqbIeAvAv8cvv07pL4MaHFCqG9ZLa5vyeLSKoFr6SJ3C6wtCpmaIJ3DS6PwXH6/Il076rbDWFV5D7hAgWyspBK3tOyqxxiRvNwQjqCRuvmpY7VYVPEFgUA+kc0+4PVNR91f+7wnQsthUan2NUL0O/NpldG/wTt+4S3kK161vujuOFDcWgQUPbs8tpKROvL5TzN5lT5gGx2eH2scipWl4jgiZ3wSla2EF8WCp0If1QAQV+1EoGc1jttXnqY9YBieA9lXKIyPvxfqfSmZnw8r5C3eyKxkF2qoJ+GOUiy8pqteGMPsg09tEPbAynDxlsYAGxNEua+Dpdrmc3yS9QHc9nxItu41L43qHaqpBXUV7IVLjQVzaLA210x/9teyP4YFUR+kc3cm4vvxPChYLPYG7ooE+huQUTIboXnhnuP6FLGlAswmZjGoOPNC5lJtamorufZ6jN6PFSRLcPwgAxPvi5zIlF1DmYvQi/368J6rdbtwnmE08yANRZdN1g3xagC7FJuqtm/+/3XumXSrXQgPl3XT7u9WciylTupBKbzkA9QRe5jvQEffBHTWJRsZoBj8e1KzMYKoU5FvA15M0GyfsETVr5yIXwAW5smOKo7LC28uWuC8IvFTdEp8Qy1fJy/Tuik57hLeAxHE6vv9L1EW44K/mUFmbc8GiuJxqvGfegg3rhftXNI/yUKlUY/eWHA9FVeDFg9X1vOrJoth1aSFET1f8VIIzMfD+rIv43uQPQiT8SV4+wi3CGetgbRceINuH1o/1h1V2VL4MgR1w+0/l5hb8QZbgRir5ed9Rr6da2vXSLs0JBqvBFvG/x0IQksop2rfvsHOTG8kCD8n1OTBjd3QRK6yq6r2lhMbxDiVyT+ArCMcpoBJhFd+t2bhzUIWJi2bxq4qZGGiI8XlD00aGl+SbPjtWf0vsMNfm7U1bt9TyGgX8REUmBmFhUdhu+KFb+WSi9aGCKLEIvUtZMdDhhD/1+mrfWa8VTEkuMfDQEsq+z4trGZRBLGWBvnRyt53p9vZxFo5vrelSvHW1Q3GZ5Dn9SUlzXj2ui42zGxz6Yl2c+hWNuVeLyJS2QXbmOZzpf6/PFtuoAvGv9K79Ej0alRnzXN4Hdha7bTetoTATWSRJcJfsNqnJewdeadTd9eNu6ZOAHlfcwj65s79i9dLQgWR85jk/Fwsid04803LRUjhrJ5RjKD6WTEVg8PNTFP2hLOFxy5gKhF8B0KUBrUGN7rrFZL4Wc/abnSvewJRXWG0/Bd4tbt5ghxUvYHMR9cL8tgUsDhKHMXWm0W4oBcVhG98O4tIUzqY9K3RNA8lwsopnBdq+T/naTVk0I3OJ5shryOEZss+PmKhJGaNtR2Ea4dkcT0T1rEAOkgsB1A/65dt8iiw4TJQpijpSk7yge1bqA4zes/+ZZyx+g2iIinIFonf/oN7FxidD3yqbLpjhpjJN2fvSH1sQeXePaorRzCP4kfnzp9uQVjmMi6femlqIG6ER2fEZKHzC+NgOL/qMEnZi1elXIEfTOzKYYGHq69TrJiyQIRLoYNVOu6uo0vJOb+CBWoNP23b0tcFrHGud5lrqX535H3MaD3+VBo8fQWTe0pPuL2mC1P35jcGZEljczrZRa/f8uN09fvmhJcH0YygccibBHtCFV6Tt6to/3m7ufCSz7HaT7SEvKhl9TOM2Q8bFXSt+it2pKjO7m1GSNtUWjjXTFZ2v7MAT+f1l5bMPczb6g4tPhOTTJ2ZioM9Ht5J6A56O6I5zTFUqgBUpVnt3O9nj25T0dsqflTcB4Y5R82o6HkW2S813UjWus2fnbI40v40PC9XcM89rmaMxB/ZZ7BkWmuj+7hEEN31X8NxP0F7LtR4A1Maq579EQVk2rR93P6J4sQ8gyaTtl3S8f5odS6cwxfiTV/MTGKZHfg61AKONPU3od/eh4XDXX4N9A6XUBJAOxImPtuUIN1oDJEl6YkIUrV3tajeXd30jLAQ9LvwI2UD14pZ6/fy0166+sA4a0a5MppagPTdBCmDvEEHH+10of6pXJ8w5v09VRrsdK9k4qWNhyr9Q8KTYqpfHIsDdYW+04728io/vmIaQehXy4ZqdfdjmiVj6UxJLau8oNUMW9pMbGoAqv53BZByI7OON/nx6YD8Lux4mpzD/tRmaYF+prUUCO1Fpw3kJ5utGhHqlDajZy0Fp8BCpDHd3w8TbViPAEIG1hqh33P6EYitAK0vVHZD4ft5fx8hmsihs7hNGskL6l/lJRpWQvJAJUGYpiW9DQZlNCPOALzFPHDVK0W5V5t2uzu97KQpxpSlDKYZL8JjhFke26eeIarH7R0cVbhxsK9yuPT6lmsxW1wccNSylN0AcJaM/aAcVMlWiB38c6B9zVPrX+gE33pT9TvVB3ehVRTwAxhOdMtXePxjAEjV4d/HbDLsCcApzxnZ+aXxO9zDqbw/Omcoe6GQ6/2gd0BNX1pTycjVbHZW3IRn0C5KXKGRxnk9xkWdocb8p0QIm5Zq25jGM23d/bQqxtDwODuaC+0KmlEqvckdsk9zi9WLEa/zNYnBT/r9icpM9Re8aq1MJYgSQ2VV0qY3MThLJlKkB6ee2Pf5fjQu/yccI3MaA8v27HypySlBFMhMqkeOw0FcdVUtS0Fp5XxPNNWTN6nHqQ4/6ELxveLT/szs9Ujl//i8Ypa1989gKbEHRbEZjvpfvmqUrzqJxXEiGUm1huDXmcfu7+MrGAppbnMG+Lu+8ZSS4CkNTI/S2UGZ/rMn/EyJpXGYhrrBGRTz6OvDcN59DTSc3k/TfH5AHRhJ/OI/MCsMy2dZTsy+0WfmKLmAFCoA7M8gC8GsQknc83T6UOEE6gcTDFYVqLNoLHr/ZBPX+h0hqjVt3dgKmE6c8o6yhI/il9+qt13COBLOihLxn/UljG6lTcF3GKZBG8f8oeXtqL7nmR2U38xrAot6mDkIencbm05oXft8cCuk4lgeHfTSLzgiKD+Fb5K+pe5YKNPyvZz7/+iZE1HFFgPEFv1BuSZo0yCGUd7gaCKu2sBh0Lfh7VzzMglgbph+v2tz5+gUEPvUPsd4KIARB1nacmBG7WWj/dvcPkYhWvCUAV0RyXo4vGD6cSKj9nygTnmfNc/pWIbbRYAvEAmQ+Pnvs5Y0Q+OJZH63vTG/YzruUeBq+X2xCcc67RMlvwK9ZXmko7fnmg6NM1rcvWwMMpjoMQNI7ILrlweP72kT96x1yTzmTVLlyvBJyvEH+2mi4B88uxk0POPzs4JT4Km/20zMKe7s5loGG6Uj5ACacTBxCW9dERPQdA1JTs4KAJ3M/kbm7o5yetieIiD195pOlFFRBEa/5AASw+rpXKAh8WtkfohdT2qEOQws49Dok3nOl3OCxVhNvsjal2jcn/2OPjpswJxruGt1euGEXbiYApHUdvbVxsFJqNFQXo+R/enbi/eclmbp114EJcszOqOp0LWevVRDeXPt+klvNwfFYbZqZbytfly2c8qt0CqY0po4ncsB56Hlln1+2h0s600i4Dz+U4yp/pyj+eWR/fL2Gt1WrgNKINjEkfxqe5rYiOcP3jHXddv7DbNNnZ5DXa3EU10iyR3HRVwV+PE4clLEoR/ppIakrGdZ5XYJVFZWVbnA06cpxqBBbQI5uMIGEiBX22F4gChi/ioy4ZUdtYWwIzeiVjDtB6urzDpjkVDf5kFpjNXy3LPFXpqIP4p9qaR/qwlISxnfIBLjlD4TxH6JFzpuTnnthHQmjiDk/5T4Xh1OMZ+rwynoki95F5/FdBNRYHNB+28aHrmdPEW/rnGAreRj259BhVIxjLsjVgz/bxcM425ilAJP4Pu0ke14aE2HBXn1fZRcKbl7ozwAdrXF5YQaFPHeMtKk+JyT1V+Q6k00NDrDxWE64twcTmK8aGgcjKUbm1xosJuoeWerVw+JZAcBK1kP2cCSlltZ3POeBACGxwgscgX4qqKmwRDURq/mS4gFm7DC6N0coSdWOuxLeuRlVr/+LxPnPPisugfufZ3m9V1JTxYd1PjrMC/gSi0eNGL8lBeNcXL+sL/hIwGoQcs4UN3ORlEwTNboaq7BtH/XtYUJCFMQubRomx9n9Zn6AAEWFpgJwb0lpZr4uLw7YC9tK7iJWJrOylnFiFggcRJch1G7Csow6wAvCNNFuQ9AGIauaTs3kWbF36HBWq7HnZz49Rl6X0NWJ9h3hMYWQWZVKYaVR1ioMnoGgR9DqXVxhUdws9m1rlwJHEUSGUHXmNCUJprvEvlDZU5qo9vzXRzo6//nKs3tPtwHg5hZyU41JNiYLQDyY0BjMu6AGFY7e1o0HMkw2SzNhiEyT8j/rpzIM77/6Zj7OmKiCHJLzldOfKmi6bgqfvkU5z+ZuZpG4VFMyfbJ95ryMDLQu6G2Aixm3XlpxEMgWr55yw5hdFWW+yGsWuy8Ezt3zjZrKPE3WJ473yQLt56mOiacXM3yJwVVS61yLpFHBGl1SMoEi3aMOZQJpE1Z5gHrPqbJ6XHuIzeTLXAodETUBgpVlirZRI26h4O1zQacHhmyuO8F3Z7iPkfPt5tWg6+OUG14jEBKig/8bmwfAmHqd3IrwzIzYBBWQadvB92b55diKH2dMYC7PMOxoTNpo7ifvtUB8sVjjAK17VNSf0AVxqo2OPj6P0KmuZZFi1JV+5pV2Hpi+AW1HTdhmvzvjAAYwh29GQ3KpKY0S+BT+Rgr+oNZJlm/H+Fb7wy2TMcDvnh0rRH4wLvGCB3hP1TfRe/OJXYnHEo8rdaCRuR+CtPhgfOU1Z3wdl8CvG0IHCLWZkdTJHrJSqPOHVb9wftqpSeAcc9KwKl/TD9jYPzeu8+5IkLWmZS4RfmVWQhzE/ghaBlAdICFEzDm6XuSgF/iebZOIr0h4UGteyERsfOUcWqT9zAYfYOHBw5m6595jqCGgBgH+/8eXaTQNzg1RZIPtJaa10u8akkgplQGpKKUjUcJ0I9CB+Vh8+M9guVwO1NWIqk66Xh9bls6APQFvFboDTH2kT2TM/d46NP6T0uO7A8VPtWyaMCAGY9JlgUi/QRc1DiFP1wB7OAj7a+PNPD9Jjjw9THgWJ3hArFn4aJhD9IlVrZfRals7CJC5bociwuEHa3MLxEpzKX2pd4oGvtlY4Fz42Qew/eJ8memzGdOMMUgzv6th21TSSj518un53RrNeZQL9xiiEXW+/4fM5XmW2QnSGM1PTYLxsQdOEhd5pQ8/cZc89V20l3djfgKIXkWUq1doTwuXr++EznM0g+3vKvVtXOQladwc33g8K/Vp5JbLM+GeVhrnmwKt5v8/EhDc8EW+N0wDCPcVasJikfyvzAp/63xMcvr/qXwyE+yres2lqTrapaCP6oDA2wvIALT3Pgc/w/qB8a3dVPnVZGW+ozzjuWkalf+xBqWpmvU5y0m2eLice06ryrVnbjXki1EVB7ZwneMc7Uq8ZimqxrRh/5u9QZuvxspWvU2LbeX63JmVMfJVstYmVLNZ/Wqd0CHFsXnuCwqVcq/iTjdPZ+7UYbnLp+/6Jsv0F65Aab2MEr2Lk4S+KLcUDSPbvgOZs58VkgnKHb+QG7VRXYV0tY4tOEKjrgf9m0JzfZw8LfH0Z4DUBU1EjoeaENspa+zcJbiJ3HeZ2KgMrS8v7pNZPO1CW1bgIM7i9tLDlfKnJyTUOZUfSOYJxAUZE+98QJK3ohbaWXpuLLw9JO7irZ4I2wNojdNo8fK41QGqvO0DWWC0FzYlPSZLqQWLvQLYw4h8e9gTzb/10R8YxumxuHoC0L1lYXSilwFMBF2zGhLKUly65A80Hr5ura8ljo0VFa+RdxGHKhLcULvX1etg02DAd0jes88kwtW6v0CjW8PICNGuGaovUvIH2DiKbPWcVne5OtK8d2UnWvmRwjVff552vHs0UfH/oQmadmDKjLsx23tOH+x2fWCWJXyDa/oEUlTGaOUTyqMfJ4WI6SprLkP4cSFxcScd/BX2u8Yd+494WuUxTQfCFDlQu9lXf7dYptL/byyPA/hAWKAFrg1Nu3fve2zEBXTgsXMsNqdbJyER0PnEUb2LKYHwDVm3gwXdUoXlxe+8r8kgMSUz7S7cv47SaJg5BQMSxLESc7ve/OkIkAPw1omviqB7eTZsUpTlgPhjDb/Fy2Vkwf9lsak1d422XuSfNdaaKpqukn0CK4WqLjH3XiU+tfL5GqE0gFgKSUI2kfj4/rjCEP+K1QEvcvSm35UppIlKzfWatz1DLlOT2FKWiP01bKtEngNotm/lWzNupf2N0vqXxXBxsl3yI5ymqwsin/SmjKlzzUKfnP4XzfiADP17i0xwvfDCRRONaQcvN8H59Nf53lzvP3rUyIC61cP7xizhnfa56m4onU2b4zJyS8gU8dGwjGZ5rEu2+HVjV2kJntxn9HA+C3sdTYgd6mhs2dfBAhh+UDM59uWZg+FqPYtGxUGsS7BO22JzChJQHYPUenqUiU9RbtUxpeEA0ht+qPD9di6M96CN4lXvkxLSCIswyQOfpn+UzRdyZtJYV+6jCmL+rVy86IlOh0N567dyo6q2Reqyi8p2suY5uRkKIfdVR+ZzGUvHXmWqJFbqJYTATMTqP0col9Igb4E4htYBs4LGayV9ItMHMvBntUbt9iREURJQWsk/DcytdZh0LzyJa4t6gOv4W8kDGgmBCDySkd6baSqrY2blcfb5SbmHHrvEGacFAQdyP2gNPTY/6MLct0xh+39MfKrV6GCB6xdQg59MEofc64RD4vZhIlklODCYn9AswGD2uQbZ14p6YcDLrNr7LekDUmCY1KmDlVWiJyNIOSkZj+tgIU7XZqrYt9dhq0TdJP5JpnBQ3dFiPO2DQ7b6A/047glXhAGTM9Q8TUbFjhZtq8FkJCCnZG/1cXO7QiZpNUEyQQE8D7Y/5WrZT//bGqdx/EZh7AysOzSz34UnfpQc+Uhc5sQcdaEHbt11jkGrXIZwlSJPM2dl3VpWuo+Oun4KZHbFpGgx/siLfC19tUja5JZcjFcnVKqyrZPxONAoi9esYoHTd9IU+AL0GVyxN/Yfx4Rkim5GXFO4iQKG7sm5qS+WR1KG/sNWNhWd+OI7T2uUiCWpQ8iggiEt6W/hgy3AlEVzXWmScq8rSh+CCi/iTDkUa0ez09eHH8ihFKVFwfcXfsPDLEKFCwuV5W2XLkZIx+g++pT+ETruyiVQ02fBiXL1AV+VuKbs6UtzqHf0XBbp7C2GoHz95QKuMs1JzCXvbYrCubPoqKR6uljFbqLOj189BkCatrAA4uK/nxuyMq6UeOcvsz4DNxl5J21IrMfmTT/hMv4Uy2ho6JyDeZECUp6BtUEa8xceUcb9xjpxXpNzH2d7o/U7hmhk36MjD52ZNKpgiO8qsbuG/HuwbD2cbiZAx5ug98wSArbNgyqNbiG93utwa0x8/KUOH3yzj9AdcjcTa0H+pogfie7KK/hayIpiLJaswc/EIEnRLl3L0oZIVDwxmByY7Yb5WDK3Of+RUnmeoy4Wz4v4Y1rQr5/kdAuMEUvQ2j3h0lQ78c61XmWPbhmBhU4zuOnRgz/tN6fuUzaTMmczW2AyfJ2Ncp2TjGJxOCytCyE4RAZbtYLfoOyr+hxmhXiXV+wbLPKU8wXSsflk3s7ZMNQYvd3Te+iQ40EJXnkIbeGMRy1CVAArMGiooRMODVcGBstnpZoEViqTKdv+csRn05LyIB7QiiNeOk8A2Vf+p4mIEmgSBGWlaQrKOyVQKzzcOG2OClXm755xv29W3tbowdKftNqSwFj2P+Slr/gkftn6VP5VxORYVkBi3CZ8oUQhx57Lj/SlwmXQzi4v5fs0GE3YElicdM8a/fQcKFrQr25uz7MAp0q7v69W4BiqBWrwLdRHE/AAg/JHaRdplD4U+x1Jiqh9DZPlYIVgqlWU4FPXrZUdy5am6CvBHCgiKelM4A9Iq6qwZSfyZOw4tsTo8J7Ocg118YV0fWUlc1zaJY/V4ZrzX99f4wgHikWGurvF1Q+ElSOSYxp0F+i6vhbAlJnctwpaibwDIw6T0TGiemmzeLVAhfRWpEA15nFzvvqNlLy5+crcH3+pMO4DZYyaGE7W24hxch9gjrpbN9P2wnRFprYiUbO24o1AVKrgARFyQGjnbwIPQuk6rbunPJ3yLVc4zV38XKBAijFLWP5l38PxZE4XrKxzYR27R3AEq1vZdT7Z6jvcg+hRMQrYQjPelCbEJkBviLGxOAm2gvYRLTIapKkuALx9WoBnBh2XtTMwKV/mXPRUh1Z/reqvkWVjSvbuklXoFLpjCswOk4VJuERmkkOTzMQN9TLucNAx2ZcuXhX6El0DYFloBy46OBTj/Wu9UB/tH2pKb0RKEXQ5sE8lZNj67J6TIxzbaQeJ/kg/C98KSQOX9GH4beOGHabF6cZC+PjUeoH/TeNWZs7WQccSKIX/I3Z+WuQTYe0mdRXCgyIk4O944V8nOQqF9RoMWo8+8sQPBUu13LGg6mAW1iWqjGGILH3/W76bHwb/0FrVbGHUOaXVmUhdKkSQaikMMmbsZWdLyY2Z9nXJddql4dcoWFg1sK6Ejfr0PGQwEqLF78iVP9TF4bX9TIk7mWHgQDvDmixlucMf4poC+LsZgAAk1XIkwfK7KojoHM2SCe5Jx02lqem0MFkq9Q1lG6g0flAEynVnlJFor1nZBPmXRPG9+tntysW9mJMLD8rKmBO1gW094DLQJgkgCXmxR107p6352oZUaqROykFe0RR/2BGrU41YMPLOGK0n3Q+4AU2yh7Lcc9/b79J9375gYYiAjDhMC7uWkJjQFMxnAq7l6hzQfDpuxhC8MbzQ/aYoI8EITMr6LreuYg5eKHhNud5qqzRneVkaAKQUnLOLT4nZIU2JDZjYTBy5hkMPQQT4+IinfhPM4WNf5StMWASaNfC2nFEXyafHDVo0yCLBA/88888WPfNVeFMCdltagVQwHmFDdT2v1GKd7enlmFjjIt8V8oV8Vlp+x1WPV09r6aoP4dB2v657pLSJ6Pul0Xb9JEsD0VjTcn70NjItOGrywvPHMKxyP63duaE2CSSnB0V/zQnmcG3EZKeItDQw91Xtlbm77DxTFT69Wi8GG4X0glC/bjPUjriNVX6RjPrcPN2zztxlVI9x1HG2/Om+ZnnxSp252yyBLuOmzv8iyCSb04t9ODhLd/j6qduPdFYoXjKWBDbFRj5/60OuDjcc0YDALx3hGZSPt9E3i9PG34Gb+LtIMBaLT/wyuNF+wUfkI+/i2DzGPoOFOpBW8WYCKc5vrVgYQmK6StBLEFsOL119592rp1y8IS5k1uq2ynUwWI0d9GBOfo2TBlgomVdNIgYz0cSIebr69Z28Ly1rauzTxCPNjueEV9YxGDNqv343NsXzldChI9g745cpwVH65JSoToibDhEN0a8IZmpwNcPZzZVtvh0ALMC2BQ4Nw6RYfbc36PFMSmL9wBjM6gs1sSmBZsiBTPHMCCMiFqnJOreargHQXnrls9NdsEk8viHKcmTKdc+SQJlBgE3LYI0L1xpfB+gPd1ncXyJsS8DDVduI41psDAzMfLATFJJWv8kRFoHZTuah2kK/Mv5PME6AGDr9+IsTC4m3JnfouC6zHxgC6r58Qcd61UUsI/xdMfDsod8y1zZ2dE29uypGWxW7c9R5GAtolVLPhxeZcWqfiIU4hQ6+ZP51FV27x3/oBqNW64J3RozTKzDnQOgIfq7cdpaiNCAPALldBw0xBBxii5oymd9V6lqNdIcBJP6MkYCNW4QZgQdJmoUjuobeytwht8/oFijp/6wPqdaJFf9SyZTmPDvzD8JXz6enqrVeVUOR/3UVFJOAgD2rlUEb0qCWDp2NUpIrA1JGs5OAmG2tVZ2VGSYk3gkHTXe3L114egK7KVsoVSC+IAJX7PGqBPQLo4q0ClmY4d+o7Mkh6HYUzDmIJfHh+CtsdMSvvmRCb9zWUgy7TJjkZwUYy4lMro61RFn+1De8xJdUscM8ITjk9Be2Hh8zKvZxm4+AHQQFkPEX9XOTljH7OCs/O/Qog+zd97ir+C64xrqB9MhJoz1Zlgz158HL4fPci1dr2aWaaLkReUeJzwLEnZzj51FGFH9hudwjwIQb9t99SncdtYLJnWjXbXRVukosHWoMDlrbNK9xsUVbi9j5gOADqOayqa50hU96lgUJEPksQNgh6Lvn9N6KJBjg20vWKsQCiR2x7EIXJ7p/o/rDfm8qtwNxT36QOecUM6ln4/fOSXymOqHKVQKtBrxJehRNRZVZGCMVYLkXByTgZ27aV3u7U/iMCOelkhXhwkoMWhNYonh6eOks2fOTLsIUwZPuvpRY268jH9/T7FEaTZNhUeDV0Pz6CtsjN5ciY/MpdcwFNQFErQ4ghp7Q4xT75Bdswhp9Eq6Y209g3xz0yWnnWAFu+YqYPrMGM9JlCCbUJnUkYLYSzLWfoxaI5R2trHoVsgypqYbENqVabc1JJpO9VAyv1g5HSrGyAJ/+wBQmcdN9ZLFKU2Y6joPel+PZkuuhWD14vUq+cLyxe4W4xt6k23bl7BIaEd25rJwppdrDUTfmekbgXw5agZULwbQSYgfla72UzB5F0zVQaHx6VHe08Y9osigXIhknCVgy2taX6phyYKuvLkbUPIPABeyY8ebPqiVhAUc20HeyQkoqGOjh5BL/r0djEs+vrNlZMzjKKCmBlBsuO5NgqDx0onT0gfeERst1JF74YuuCe9pPFnStdbFASE1pWRpO9GWf58CsMdYAz8zGoxNSC93tnMg1GaJZQDFwgkPUosR4hJAHLf++iXuDBEwY5mI0E/Kpuj5du/KElMOLPIzLgO+MWO3X2kCrDD8/xDAXYjH4vLaY2IgWtw8rw2/87qODkSvuslfVVELaZOTI3KwskzaiyChe0kPWO83U9U4V1nwGYBGjvkWaic+tOKNqk4mXS5ZjuNiZ0w2idCOWdahu+FE6XzSNSAUeewspxF6/mox/mYZvpu2EzRjcfYu7K7u++T/vA5I8QQ600xRPPMYSxcPA3dM9VaHnxslt3cSth8yzksbtKaioCjGIaXE90mAn+hbVoa5Ov5hFNUWrnOyzDfQuE9g13ZE2nzLz/RU6/IpclqtIYoGbAHrA2RrlZKq6SgtUkWn/rB6FxP0mYRsjJ08g0DyJD9jIEJ2p8tx0q8mvSvS5RIvTWQVGfOrFQ/pH3x5p37MhRa3cHwUOh6K9XWV8DHLLD/TnB/YnQ0l442sw63hi5OC2FHxfsJOnR2MICguqy/QT2VzrIQgPFAVxyERAB0x7DfsnbsLVsHKmJoWzfCgTLXyaQOPcohmLWMvQT/GZE0segBEFeWfwn/mGIlwCwoc4DQWwu/BuER0lbMEDSSw0hRQVrKm3SBwWtEWlObKMM798vg20JAzkumdSFnTC2H3GIjD5OhxqVcVGjCqFfe/ARj7KEnpwkhYZywWVSmhmwrvlnBEWo6kRA9S9sgSPLAbC9x44uG6Mk+nBNWLdJjaW55JS6NmzJx+JNdXMcI/ultFLNdera/uhRjxzhVGescUj5b7X60eqVhwSTKkWz6Tp1JJr3Z5F1Y55Dui0K5J/ff1li/VxGzFBZPcdiHuztJSD8nsGG45zMO9PjaJ69A5FivO0xVvlEOHduVLL8Mi1WE4XuMJjuNg/tfAOLJtvdUKjBqEbRsRaIxdrwxZ/zwH+XmG5dIJDCNeesTxkDzFzbHEvyBe3UIw5jwGl6j/qRZAXARTZ7NvnScUKzKbaDTxbp6ociUP+naSxWNe6VDRzdlh0sF43iZy9k4kCsYgvo0DvNTzT601r7p4MrJjIp11v4JbRyEwFvGTboABG0mU+5VflsFpWnRkQ3DsD+wKvaNUyD8lw0W3tQzefndwn1JkQ/1d7DlI18WORgjA6TCiy2nSb+vqMt6kbgmGRE2STssRuSBVdOFYFjHUE7JU6pMXr4JsvfomrDLU/4TknHhaZ54pV/nzva/VJsQSlXXcJcsKtvoOfEghJpUECf0BiZSeAzqu10LYg2HyzdVoqHzL/VfRJyzLzABdo/hvuzBGxgR4nErQEDEoPY2l6TXRhWyC25bDR3vG3AibGJU/Euq2dOiWWaxaado/whQTU/Jw/S+6C+UaQodxR8nxdrBpsqn4AKRo806mhSuqbGhcOnl0B1iqqIo7ZTe9fKyr9lzCxYBLIOi5Pt0+C3sDZi5/XQa+zItH1Mw6JN0Min1DuEiSwI2wAVG6dkMSsKcZhLVKaBuCoJdT7BRVv5kgB7TuSbZ0wjP9ELYPKrVEaKibecEar4MmULftA9bPmA3Po0aQFLHkyRO6tJTzQupJPh9O8i4h5Vpp6nmPpfYYEAJpBOmmKuJN39bvNygNeZ1FHw87yXVrJYicq8dSdn8bQSjwR6n64pTebw3uQJ3xyXHD7XyXVQSA6Vst+aZMA1GlFlB4EUIrZaCYZJ3OZtr2CFMJ8zvivvVNuIzHFjZJwfo9gcBwsxoRUwsGBV3wo7n8H7E+fSob6jp25LK9FDPqhikfaCZFWKHBP9UvjlbClHBkHXOvZrjGry8skTDQlrQhYlqjZ0AiAnEnK1zCzuAhdXwJJrk9lvsk1hhGMWFH1un917wNE1sMHhmSpZ3xbasbCqfdg6+VPPBSbL2X6Uuh+nOuMcGuy8omlmz3m/0kuzJLXfUmbPEiSZ472Dm/pauPgQnGCBtdfQA7IsxCxtaL9RQn3RNo/UCPQRql+tYGqEMhjJT3POxOTcBkeYtCIY4/bcrfGEWxbo4l6RWMcFLkFDXsteozdoCNEiSbhxHyReOfvDYxJgn+6UogjUb9EfoXfsluNUi/OMBEE1dlN/RyXKE18OU7pU5FarVvnnI9JcuEZEGBEN+B59FNdH/CEboxoB/34cLhCW3Mn6S6eoCG/E1I3VJSdPskw76mtPCliAdGFd3qAqaw60ADOp7ySfYNzIJVDROaPv2tNpBoJdpnnbPNT27qqVvOIB3F7KcdBRirJmDbvNsi2EnmRmIwJrccC/P0GEDnvXuNYI/xr9jhntco4Y36XkOZAmzvJ18PTOfMhrZj/Rb/a0UkKOWi2mhQNt89PWjVpKvfAbsxlIBmiNoDO32m64tbM8ubYflis/KDneyXl7Dqeu/9sqznytfxwjlwjFlwnyZ7XX/RpQII4kGA9HYWL0P7GLSNWWqS2aq7za7cpll/QCKjNw0HH6E+L/CHbLSB3pTiXpZ4LRuBNH3QJOMc/XHxP2BOaYEAhtKu9PgTUcUIVPZ77LykAQBzJNI0Mavxkn7IklSaXDOm8ACbkoqnNRklpPSHlhUuYqh+XgvmVO5+DNYJwrjqUmd0JUXQ3Az4qBNkXk3hfvI+1w6DVFQM+jE+aIKEOpp5hJKItyhzeYbI6GMEj6BoJPQFBVDa50f06Zel6Stgtj5o+liV22frng63sSQ2aIDo6mB36sT9uAQeiPbohlEF9ezhk2BLe31YikJwKXkczwW7NQyMeXQhqY+1glcUcl9i/3pC6mffw4HKUmNCJiR1RzzRtSqBtyI04Vj1+r8APY1aYwOnTaVngGzCHryG8+vLuGis/gPTherNOUEbSg/FNUteLz1/h1rrHDMrx+bLaW9S1K21DEivSxbL0onUB57Ar/cd3bBF1JwDrTcD31fWYk2T0KfSLLdXga1t8G8lBx9RnZLfUvyYaBj9+1fmEvyGBpll9gU2o2nDJ6kkPXch8myQM36JFuJ5myo74QJ2b6hIo5PIaUPmph+l40olv+/4cj+pigGYtQxqPlDgWRnKXRPJN8Nd6oeJU+Etni7YBsl4Q/Ktp5IflBkTZy7C1ipLWmlrGItGiiDFxxzM1YTUJ3GZNs5CvrrnNo01dhOq/sPZZXamcPbg2TNUEFJMvxT87jHr0HGLvEuPhWggU84X1Viv+EPnzUJzjmSbsY63dHw/YURvV1mfZqkjGsDYDJBHPl29ZGsXGevlwKVkh2cMZi8hdK9owdehBj3KxC88yca0fA/IMDXnrt0iRzzvoqCRbYX5BupiVpVOtEtHw0mmovOiu8VDnAVameTQhRDxB/9LPMxLKBDleUPTVq3NGusnnxCYWSa5tpf7ir7UayOfGNjPO1PvInVgdayvT3f8ZMf8oSJvAwgoCboWOluJ9W5Hb80ltTSEIojmbjHJvhIwcUAsvzJUu98gg0cdg4uV90hq6FxYdN69fdoShurTikirZivSQYeF7TwmuX1OZ9oap987JI2arNH/9JBBDYdFRE6ZqOcKTC1jweV+u9iiAmqyzS/E7SJWT1aj85JGxBHEx1A0BdxstNQzfT+KOqFD93yljRdl0n2yNJ0qZQJptd/NGUNbvGsCVkInMmF4y+CRjMnyz0SRZldXVh4++gpIgHN9vB0pIVl2fkxNNrfDkk23IEnzvtMEq/I+eAp2nhMrxrpWivfDh2M78zlK2eElpWdH2GdnZqSRiy4J1RqVGDvkBDKjSICA3A3lNPxk0LWA6EDJ2DwVIORWmQCDnP1cFzHhI+8v0ly3KFTh6QmnPjyVTwYoxgLJ6ZQNju/sIQ/MP1Nzm62wNKb8WnJOYFoxn9QfL/+PuTYR2IyNmGkNMOf7hw2cm9227xNH4i6AEoJdgSMBv24XKgbMad81JD8n8ez87139BgckYD2ks7qb0dF5Pz9fBaOPUoDZsQOZzKP9etldNVAZ8jPCKi98ucYc0QNLRKWWtzF4HIiyVHkmG4GzPycUKJcVJhCkSny87VG+6l8rzSjz6D1JRZCn9x+lmiaka5hni33vXgUuaBLNWKK2Rd//ZwtWIP80SmmgYYEgIgXoMIu7SyM/IN/nZnQl5FC5C+24wtESVmg5WVlN/tyzxE2cFkdJdGQYmfHnbYcjiJhBMKwc+AfuXMWqncFUzhVZphjhSvmjZH6lrMYClUDq2pkt09teTL2EwFqvuZ1Hbvp83p1UYemOa/UszKLWaZuV2dNPGDAR4H+Rk3vh8XAaBUpqPZMOoweXkVjVB4X1vanDzrb8RtpUNj+kaq8VHdBko2AHPoqZWS73ESzKaGTFo7d2OcWJIjLciwUvHbYynXhCet7yXfcOljz6x7MOot0bOI+1wHddvjvjMsCzdaRA3vG+vAU2WOCv1JKc0ckt8SjtaQzjRkaiqori1eaMLpH9PLomLh02ZWrq0KT4nFJT5eDDRMSFVw1kMMIXRuHgMR58qH12t6pDJoz7LY2fkqhY5iNqDWnT7Q+/OA4nZe9cHvLfA0B/W7JB3Vyc+JBgfkoEr/WxNy2yeyyCM8DLgrwa2q/trQKA6GSuaqw19c43jf1YZ9W6oPnl1Lxb3Y4MIA0sCpKae01wA57QnoQoMLq4ij4IZm5227Ms9r7D6qBfNZdEOLfFIKVW8mQxnTmAYgQ8tb3OJie8eqqEzfsl0a3f7X79NBtIeEWSk3B9QRE7DSQGUDDQ6SkSeXN6H2PPkVhe5Eq9tTj8LBpyLeQvL9UVBYFOKt4cCb9fcdZI8RxZC5AY1BqUtSTLxO4Qcr1J0/c2drJfIl2l0ABcBASsHdpH3KJoQR/xcnSa78AK3vLLm6d/4BWukezWlqodNNVZhtbmnTHTSTPCmc5RO73th34UHCH0sNdNBFlEnoGCLLb+mSQw1xF9WW0NerPrpqty4hHOkJbab61oiX1QXyLiUpvpbv7SDiuTmzVkJOfI++i+HgRyiuQWbD45Yap7fPlYtvPKUjp5DHpcsCKblgT+91Sk7VaDEV3aPoCGbsdIHTQxPf+z1wD0zOUslGGwj/OW3nj7dot4Uwu5slKl/OMxpMW95mso0X7uxyB547xiSS/Eh37wzjmXsnIQhBcNpsvU2GYFC/exDS77Pur6avhoAI9gEmwks0BGFc+Ud/wI8/x/SRterhBPHfYWhQeXXBzFtx+iJo0bsmpNFQ9CCXOeam8P3a3/Ro8Mp1inE/BJTN0gddYthzv0eE1YCjwigdmDqOXX4T/fV3Yx+Q6QvdPCKL8U5XPli7vYZZ5VVJY5iYo7nVr7yfsgakoJtWHF6C5wXaRmmpkPWBgInAeX/UyQc82iVuSPwJeEbcD9gXZLsBYDRWkcZdTz0M9vxNm/8xEO++6Jf52ZQqe39RtOmyksjdHjBPRHucWJm0JLX+b7jzNjulSq1L6fiRZBlT5XkBY6KGoBRdV9CliZLN/WWB3b9gasQBv116pqt7iAO/CeIt/vG1XV7cYdl7BNuAwP9zJ35wHBtsVg0RrPCefGOvc6zo7E/42QEsVKFBkYwf2DaFBKsEke5hVy7aIEG5fbn33Ua/fIe4/ghknomrm94J6RFdh8C6vow8rsREL0sWi0y8btdLueRVB3WgZlahWunpfY0wsAQIeJMA8e7hApnH1Q/2uPnCDjxU269KVE9CSpydFeh3+HRYrRxGvkpjw6uyoFMb+VKlwCIGfKQ/K/VArvG43nlA98+PNhj0DnCpRfQRAaR5lFWZvVaQ2TyVjjA3CFAXyGCuKGKEFCNwPrhgIY8BHTwGxECWc3woDoVxfgFp36HmayQ1EW3RT7K8pQI6pkBuEeAw5wumahtQbd9tDWIwXPqIpRZEenxh3bjQKbN9M/+5AGps+vjT4cf682W0MTBELTLyphsY7d3NwqgwE0n7IDf3a6QOkCOrboS/JpEyNmH6e9r8n+QS8+xLd582OF+WpF4pakZfK7+0oitYQPdXH6pwDgQ/0rASaOpzB5703HOs+3/wZvgQ9V5ljnU1dIxm6YlC6/fv6nWKqm8jJZ3hZBPVE0tjH0yiGukZfiGBFHLnN58W6wk7kYOEHGV+I1w8oyR75mjSaE6KGW/XkjDdS10Zj7BDLRKiKUgyBIxi38Xo7bumjz7FllQ/y/J7GaOE+zhrntdNA4Tsbel9XSF941Vio+eXiHiZJmUJ2TrG2LPI4tEoTfS4tPfld5DmuSgYZq1Ts+OO3vp17K1FBYa1ISVHhoNdWdmwk5R/Piu8vRskGZMuLjjuWjSZGnU7u4asValJ0YOmG8J0WNRiR1u5Q7TFEaH5GUIokp/YL9XSn/Y2+tRYTXtsw770WLaheB8MKKKw9fmC81p7TQ0GY7kpyNC9LhGLDaLtOYVMvkF/whxLg4EIE26lXHV1POwHTrhuSxpAu5GlWu5+z9FBUM4CrAB6EmNh2joChvisIkcQIP8NNNhloyG69gQIqI3hnIB8WujqeMMVZmbhEpKtlusZN0GiihSgvXMidODPXpaLkCcv5rlLSmtUNSSCpnTZ2u4Md3GHCcCLIqquaLi2M0QCBaXmSYtSNj8DwOtWAMSVAzo955sCVGpOUEkruVLJK824PEeovq3Qu6haTWsjmGRvKgz7GwhnbPXKUjNde/WeH4sEwkLeeZCD74yO+FcUF7i/QFtFlmqTPwzbgbaH2skC8YjJdqF9qAHqeRv19YIw7miqPNdelQ65U//fIyzSu+g5p268YpYXkGnrBhAc1zqJVti2ARy8EWMgkAYN46ew81PHJg0cimjBFhv8SIgkxZ/ZBQmCnSyVnNTQPCU85pheRcQ2I3S2kdJjQctA0pGT+rGoqWI3wUgHQ/AA+P3bXIkFCRjVElL9e0s/QY1/z511fS1sRxsyI7iR8HnTJyc1MUPtEEp1XdHCFJx0IGfb+NmA69kF8M3jV1B/70mt5bTvh1MYos/vVZ3k+8WE0OcVkL22QMziUAo0WN9BOYZ28h7hlL2leCI8wv9yBPvpa3kQGnXkTvP0pas2Lccap5bmgDqCu2crS8Oeo583gclOO2rWtFpUbxoF8mfIBrBkpPQdOkKeOealXXyEJpOubGN+1DNy/Pta22yam5gD2UqP/yS0KCwmapmivUg1U64M8JXYL2SVa6ZXbgvGXroPzNqqFU4QsOwigNJ8C9SYLsgRHL/J7tlytHHRHR0k8D9heIIKwooR4MUUzU70YW/Vks1qnkx5XH+cWgrzVkMBW9AmrJBVrS6kvI6lk1DevjjXIhTUQ1KeHFCZqFFmZRQRL68v45b6pZEHfULzeLD73sGUzWG4V/LUOnJV2ipSgFTGHWz2QNgzl3EsiR/TTW4OwTJbUsBYxL/g1g00MZbKqLMbDdw/OS2GGSvuN6aEzppBasW/VDvimkE+LOZWdw99Sp2s0t28heOAfcQtwXH7G+94udUKGqcHTl4X2e9LivCDLZNxFoBYsFcTXk526R4sAHdkl/kI9ZVsqRQ2jH8iK36wt2lZlk8oc2K9nHjBu5uy7tqdSUmS5cyfMbSe6rEpQn+sB9JQmGIWo7q4fhvug7dnPZt6f60bk4BidV0DO78/VHQC/Rh10FHfNL6Zhe1VQ9v6kownMnJiSLzXSOPHI0pPugVqYgObBli4wyEyoFRtbvdfN9YzD9QZaQg3CrHACUOwJeBPwiHce9TVO5vFuc0x2SR8Z4aQU/Tddb9n29UUYZ/bIvcUCZMcguPZKDTT7pI8bvX25Wa8RmJ4m/SQ8bJZW4iFL++qUONVOl8jeipMp6n+QyW1Y1NTyg2oGfqOoxFL/XsawJCsN4QGdIgtLlgkR4wxBxcMEr+0EDfoo/fPgBsIn16AzEySimlVicMquGgDLnuNX0R6uZ75l5/b4OpWeVA9khnbp3EYML+31gxvACQNylUtkv/0ijV4mAsShHeGLIowJUMfcQROxow7rFt0BrDDi3xVbk7i6oRt+iCqxfjMofA+nCTqlpUVtMV8s1cziJNdEfi9I2NKZiD+Q21NRdQvKUBQnPXGsb7AImGnCKZOB86EQElTrSyFw57I0GWZ9QROKHJntR1zM2DUooSa/jRaiQfEiZoJZTEcQ8IHR+uwRZ6cs+Xxw1OccpBxb0hkBplcLTNo8XR3WyCJ55/sxQo8eA8ax0uOu7vHumFKdTJRM959k3tE72RhnZAerfDEEC3OoDQL9FhuPjojO5YahPZRVafKW//+ECsKpC1A4FGCzFaMVL3rw0mx8yMs16yovZPcrunOlHsvUQaTsguvcEWkX0Ks3DyHwXshohneJYoAIMHNow0UkLc0hL+0aKTx3VLp3T3CUBgqE+QIsybsfHpe728iu1rKK7n+YALPOpQFgbtT0fS/kc7sqA5y1qNLJt/8hUkbwYlnrTIpTd25hG+Gl6LXaAdVWy9W7eITBtgFGuxyK31kkiWoQdrtVgmu8ivglfvH/mvy0p72JWbdSBoEkAjQcLvsi2B9IT2akrKSFFxRu9KThzcXVbq1LzxZ2wzp1x4JDsPOEt8hbaHzyHbY/ayrLrIH7cXxrYyBiANKUqi8Rq8NKLv0XsXGPSDM5X+REsThuUfLnbefFslaAtChfei2NDXghGGLiK1hOlQVKnloeaiObzBchIeGgX7bo8ETo9NOdTRPHCmA6TYCj8UhXj3iT/YlyKCIMRBTP/bi7hQ99gwn4siIWUEUzz40yHoV7QhW8RM2XBr+q9rsIEgj5X7k5FqwINj+UnNGw11atyLKOHD69aCrgNOht4Dutbki8FdN2R+71vnVLDpEFJuLOWh73igv1wBt+CixPcrFZMFKXLNmF0aG69L+tJ3NtRL7uQa2MnUlUOz0cyGfFy+N3NAHv8DnGET57XlVrkmz2+c7Q5yFJmFvKvDTVuVEMowGDkO4Y0eQoxC1E5i/qIszgUF64SjNie0ezr24zXYGJy2vcZvcXuHv7tPY3P45IGueaIyM80m7IrwSCIMcZ+Zf9ZY6eCg6OG0Lw/3FPK2D70P5bFU4TUs/0J6/T5HnT5iOZ+Ikh8YCGEUaWmHx+wm/w3N//bRyQASaYlybyPvKDci6ff2qp4+Sy4oQmLYauEzjI6381eBmvvJYGZ1yR2nnqh+XUYc2yvJzG44yS+pdea4VJz4d3prlDEXAwW+14/cHSljqGyc+VjjGGiLh+/Hnbbtu4DgUjhXKOYYXBctutF1gkF3tYtgVjWJEtehuMVe6vJ1HBLKa9ROnoKqA/UXwjQKzFA7qmSGuESviiHNhdmTLjQJZbSbXjwBP/BTtJniDtguud4C7H7RprD22rT0sxt6SyxUZnbBDyFWBPuMOcnokU52YrFgQ8fWAhhjLsCeaxqwMxQ7+/mjPNICRluxlN8B04SDsLMWIMoViMx9iX5TdYDRXBJ/W0isqA15iZAqRnqs5YwIc1jrE11NZLF3D2tB2lr4zDaauntWedIA6iEEqBDW+93KP6vI4onnuCLKiurlAC+quo1bG66atlEosmVTgYyohW3fXfIbLhKICfLfpmGcv4XDOVOLHqJ0GvyorcYXXjkPdVHKOqioiatpEmnLmXE4ns6ckPXtk9C2MA9e9qq4cKKZU+GYU4e5GfVlmmsPqsstEicK6TDmGOjSwEuOY9ZEY37q2t7iYbOa6tvR5Iosq3EkxyztCEmvLop+DYJ5YB/wFTJO0uMJP89DNTqrjZtTh0h1bh07Gn0N8zMSadk4V+cvrZHb5c9Kw/PizMNjn3elaco7HRWc7Y6BEpLGs7Di4udkFjoEZuSqQTppEa4vtSsHW7QsxR2OEq8NqFKPG/z9OrcXNYvnnlqLTso0+ZGojwZ9folYpIgX0OaXwecThGDJF4/JuHY+OMRt9YT8O+rEyxQCLl+/STUOhA1KqdzSmHqHXL8zsuNYZv52pN4Hfwf8Z5R/WDl97e6erH7tmyA7zcvUZ0bWQ92lanunqg/3lj1zyWyzj69o5l6FzNF469qQvcjEntLA3eF6LfQfpLsXOAJSfKiqz35yJGlIB24+EIS1qv1ci+3ww0NAjw5BLv5ZraIDmSjwr9xwuqRLc1GZb5Ahf0yr9WUswOHSHlj8HQxyAvaclD64ZBY7sVNg+zydCpF8WfdhxcJ23BKzb3m0eGRdaMIVfCNgBULFaYCHUXcigIk6HMOS8q2v1tz7pc2wQQZKZJlef3mhxBLdx44HcX6BevuU88p4HqAK0VWrD19n0A1qfrsjPNWjhqVGFTZSKl3SHJGi6B51UA50ull5i1Nj8QpG3MDdtjTDCsogdCIt4qgpN9jg9cqEN3zWt0VJ9msNmI/B3FwDWVyI6O8oGKKo17k5X9FQpQ0EZIC+3kLv7hnUXsL0oAQ5vsoSneAWD1ZxOHbHxKjRGqIRPMMMzCHiJYdWcVdUJGWQUzSVJ8LZ5SVC8UjoqBK+6vHpv3zzRCm+0BbV0yMjIrnu4B+fND12oCW//d4mnXrNFh7hBGdhFy76C/V4kDorXI8M+8012cAM9IPr5CqIlRZ1TaNr2aRfs6MuK9BhiSQ38sViWV/l/mu7IU0r6uFangMJoDE58gu+B04Gh6A4d7sNR9xJ1Ts4gOfI7D8JqxI14T5Rvt1YY6D7RXEtxFXSoDKgcfdWow3Heybtw+kEXm+Pq11NQz3FdkFvEsxYWAZGRM57aWTFPIrMTneo8LXR7pmlYcPDOSRC3ZguqGFyOysJZokxXictqziEfbaBKsZe76T9sOuAt/njELejNOEJYTyWAIdUHujqDeag5kdk223CrsXR51JcypR/giE3YYSYDb4TrMVh3ENqbpmJVQD4bHPoDPsi+ZSZcsoVXGrg7wkhqbxMHwHE8S2mVNZrE78sY9oJ/nfcz+Y9KHqlPe+nUAdVsRQbNQtcKXrzQvW8b11BrSRE5Zus9Uv3HJR5FKzjKMxD7+hHTH9iAjrQH9rC4nlhPur6zAjNh7O1y8ajw3Sm52UOG9NUyhoFl92K9NHj4hVL3bEsZ34hMQAkNDTupayeKnWmZxp9GnpPPGQZHXOZAkRkPNJAP4T3/hzU02dtsxo2MxUnz202dyHGNc0czkVxZdtse9pa/2IqJrrxa1Rb9UztUFHA94CxSrJh6nezsTlNV+qWkBUgks52Kt1dKGDVF8/EX0c/vI2oLBUwNTIRvVEATg+Mj1i+kYLQeet6U885CVojOWb2zlsZ5ogRwenqwWKJ9U3HJ+WqaRW5te7iF2jJegSaEcHGt6Me8DN5xPwg5HFBRrb05X+MNvzI/1kUngjpqDPQvzGNWkizT9jfKq6TJHEzmtpJGsMZHgfuiCIQINZv9EWxVv+88itHZZq44YK+19RlaA8D241/M5uFiBuvfCnEH+xUWfbLplUOnQmdpkR5V/O4Ydpm69iqx93uUv6SdfKT7JxmBAgyYgawRi8creYRuUj6Nn5SK4AIUkKAW+zYPlhFCqlzjLIWwizEHlO9mDo5TNN1WzQBttEvD38gBEXzF3gOlqbKCsYY3QyvqJG1ZmWLuRvNzYBtcn+iJ7frPHptoZh3Ire100OCSLo3X31V+76qWXiY8URBRhqAkN1R20QP4jtao9JYaTaXwWfLXUwy5M5urzjg7k37HGfr1yYxA2sWZ3YEyXVIb4MUJ4i10behdS104GS6yOgR0HQFpIsADJ3PTV+2OpknO9op3AR1GYjL8k9PQvS0Q4lytctjKArr9A/5ElHTTVqquGdiA0WO6Yc4Wr+UWTHWJuWCesEsKi0j6NUwu4wuqH6euIMjLPCytwC9du57sOHhJewJ9dATqXXOxI3refS+iuu9ipDgxrgyUtaN9TdltCL58kjUifXx8EAMcq4i/eBRMsrpZWpWJ04zymoJgAUOoBSRf9Xbee5amzJeH+NJa/qgsx1VTwEGBPgGfZBj7e3vxDLPezrvCrMSZpvJ6RCkDXSgWIYDxaWfxvlCF65pW7jLw7RnUGUeonccEic9Z7VNrkX5mBZLVKj3gaMk9yG43zP8UYz9QHgoaNfR7/Q/WlBRIR9UYReQCQc8laeBVsmbqwnpnrfU6wB+wFrJiRBtKF0NJtb5Ov9OTCyFCPAxF+gP4ozWiB5guTWmh6Sch8R9VMWjnK8tDLc5KO3Kf5WZ77fRq8SvQWzJpWBZ2yLywhXzpjxzzhlfusQ4EKu7dVeVW8BZdg+rLPjKwQyQKsoLyTI+TeSVORhMvUH8+f+QdbeLRM+Ecuy6gDcS5QkJjXvzSGvX23TmZMU/QLelplk1P9I7X6KYy3Yz60xzFhn7YAhvz+ex9pYPHz46NDDLwanWwbKfwcGvX0MJ0gxuMx3Vqr2QL+XFv/47CnGvqoue7OyIhixyJO3EyjbOzOD3r+ueK5zAPP402PbqY7x5hKv9yK1servhkfOVCjpn+wI4saVYm+W1v2ah3dys0JbCMkge/XFj5mY5lp4yOodv93ZYdzJRUYcBy/qghh0vV2OWDoyeajS9z8k2myFRaSdnGfo/h8OiNhScq044qxL9DZo+Hu0C3jFKPvPFbLjwSNuSOQEwKLm9rpry9KfnG0KJKqkiWn9JJyn7XGN1Hmj2acyCPcBfTmXGC+T944T37Km5mSwdnAr2nOFFohgSwOFluJRYg07Mo2HwLibWXj7gC8GsKhg42BjE+GjD7wB5NsQTUjI31j54f5AlHLRjbQMl2eUitgnk6vt9exVmofAPVZnXjQIRZGIVd9cOLBptFyTUBbAGb9/VT9dEibjXDFkB6pOlXpUrU7iLAEcu6nqx0EVUuP7ZMCs4tLn2iEgrzOkXlzOmMYBIhHVwszWrncAkbrSu/hyNjFFG04yI9PJ3AzFLtAaWkxUThs/g586Lzs+oWabbrRH2rXJ9hDENNlih9FJiRXc8xcuwPNkL12vgi7LKwuAR186cuuOdVwC15cOIRJxxTbcp8euxw5WXK51dc2s0fZYsLEFIddANCrLL8RSGfk4sGYBU2FArwJ9tGgpdbk/2ZJ8gpHiUOakY0+KxbgcwPG7TUJ7JNhVh50VN073V250B2aTy8ENEUpDNy7szq1uof1VSDQQ6dTZ7uHHmf4WhmkWJZqeoMac8+Eq6VS3mG8P/MSfTveSRhXEnecYYEVHSJKM+ZaEKSTYXFy/5NATPNf/MM0anPgBP9PW2KfAR5lFKdWF6tgWpMAuJh+1Dn1xCaTppB6atvX0hONlxULs6WauP8OoifcMXgKIckhwV6hQoeXMNZPieIkbNhmPs+mUAzl75zzPv+a1ijsakxbAi5YygYjuOEoEUbUyfTvVGDYhWm5sUhbT89RAqdYEmtvag+MqcwLnYqnaRop8b7Xg5Zbh+eE4IsgE0eVb4+nU1ESVX7IBUdd4fT/EdYTaHIxLRShguKVwu973DIjOi5ru4FXjgW+LRYw8+GYaM1LefnYxkX2JRNY0MOI2JrJj+AUA+5RZF2zs5EW59wViFy5/hTBlbk8kre2RoWtc3DNZFeRqxt+Kd14BM9Bb1109Pfdq0rpCdGZ5LLKocXziH4bAta4tQzNm47QQULcqZL3CnWYOMBA/uT/eNrwGSDA3xlDA0mO6FKY7e4Ed9qtaDaznJtAYCOtWZ1Oes8D0QXMBU870Sxq4YfpFuGGRE6W6lMcEAoFza+YeU7xO/yLbmuLI/hRcK2PMu1+Dwm6J4Yq5jEWbSxWIKzel5l/8ZTJ0ccXfbwUBSbo9TchmsZSu+FNtNYab8GkRJGcPBUinIxsHqMGubNdyyMi6qmf681KVi6RcOJ+M8pF1fc1xE1KOfPZPwDpLH68rPRug0ZRAkkoxuJe+vX09f7G/xBoHPGjOoCeOx58kV4XJPo/MhPPQexNioj92WFphB9fK157GscRLQsMQOIYwRR12JbdRDMiLSEq4ijTkak81g1lTbuDtajc28WibVlKetLn5ig/vUmZsEMkwFh0SoiGGk/wHKstXEDYhrFiv3gvtqMBkwadNThtvVh03FK8DXsja11CWiGFW+JxtINKxngLNIJlZO6QeVoYz6IGOnm11Uqec1MHSKKCQcRY7TQ9D8DVDncOp91UkQwaeDv8KO8AP2sp0aHYgIVO65ZvmfwE3ZvxyLqqQGYWYC0cAKGqg8e6KKpXtzDu3i9/zZ6tCC0ctauoJw+J58SHgDdHCKSMuRulgA3HlhBE48pnSjj5kG3Uu8iEShye7GnA+sUpzYp4GZcgnyaNqOml67mueSXE7r6bwKUu587E+WFsMrafcyzEZhE2DMJPaz04o6HDXXckdw8thB+5m2LesB9dg2RsMo7gvfaYgoZuIRcHbljs9ajOCP+8hJVIhgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"74b44a3d-63ae-4fce-97be-9cdba4990427"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015S3QbVBcBzyK78v3FsABaD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Vz4cBMeA8FuYdhsq3XdQLg","name":"Bash","input":{"command":"ls /tmp/loop-bench-nlkj6_tk","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"8512b8ac-ae4f-4d38-82e0-34d18b0a2a10"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Vz4cBMeA8FuYdhsq3XdQLg","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"4d374d45-82c1-42ff-8bdb-38a36a5f5458","timestamp":"2026-04-04T09:30:52.555Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GfJrS8smgbAfHvMNfV5QBo","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01NNrDdtxzdT9samHeW8iXnV","name":"Read","input":{"file_path":"/tmp/loop-bench-nlkj6_tk/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":14147,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":14147,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"d2eba886-9c7d-48d6-828b-6e5af94d7318"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01NNrDdtxzdT9samHeW8iXnV","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-nlkj6_tk\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"1689f5e9-b827-4fa6-a8b5-397d31f22d1e","timestamp":"2026-04-04T09:30:54.321Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-nlkj6_tk/package.json","content":"{\n \"name\": \"loop-bench-nlkj6_tk\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01PrYMRh5F3KKre6aoK7d36W","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good. TypeScript is already installed. Let me check if there's a `tsc` binary available.\n\nNow let me set up the project. I'll:\n1. Create `tsconfig.json`\n2. Create `src/game.ts`\n3. Create `index.html`\n4. Update `package.json` with build scripts\n\nLet me write everything out.","signature":"Es0DClsIDBgCKkBuZSQPShOTBv1/GVCm/OGLvkuMwfGLl6cyZoC5ly6xZYL/MWiII/DNbGkeLwUkS9L1tr6b177EXwbZtwMhUcStMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgyJ6rM6HLXQ4OxipPgaDMDcjhz8W5fCGU50KiIwocaR/ibxGSUDp+f8fPvbpZ+0RhDzzi7uKxjLcc3UrVKPsytB/h9qvxfUMZeDaf2BKp8CbtFj10wL2cwpzVuln2ssavHW27y/wJh78+X/193YCT606xvB8KUSrH469lKlfMSaRQbpm+8oKmDEY3rIFIEm6RFlIi73xb5540qq8/IIz7ofyRSAnzc0Hqx/V8SKRRWRi3dbmu1YD41HrGXim/0mLK+xkMZbmngqh8+rMuUtXjjyTRNfRcZt4ZUrdsmhk+sknk5Qz1/28q+j1niAgvImJXV665Q7GKtHk3M7v9PvEsdhJrySi8sF2oDbCB60AqfWE95ad3BcwddLXtfecXCtbNAgg2XIsGjOUZRVvFmvHmRa5M6n139OIT9vyoKLIlWLYy8FUKKjJvH2AiHjkq5i4RZdH45SCyCbbdVoXHR/Bfj409J7A8xgIALvtCrGNosYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":14462,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":14462,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"5cac29c0-2816-4853-a3c1-472fd7f12f3d"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01PrYMRh5F3KKre6aoK7d36W","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MAfVWpt2FtrmSPNrawxWbU","name":"Bash","input":{"command":"ls /tmp/loop-bench-nlkj6_tk/node_modules/.bin/ | grep -E \"tsc|typescript\"","description":"Check for TypeScript compiler"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":14462,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":14462,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"fef5b136-aaa2-4d3c-be7b-1ff77c1904aa"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MAfVWpt2FtrmSPNrawxWbU","type":"tool_result","content":"tsc","is_error":false}]},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"c427b7a7-2458-45b0-a4a7-204ca3eebd4f","timestamp":"2026-04-04T09:30:58.185Z","tool_use_result":{"stdout":"tsc","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DZcLWYzJyWL62iRpV38KD6","type":"message","role":"assistant","content":[{"type":"text","text":"Good. Now let me build the full Tetris game. I'll create the TypeScript source, HTML, config, and compile it."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":214,"cache_read_input_tokens":19190,"cache_creation":{"ephemeral_5m_input_tokens":214,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"824fcfd2-66b7-4fb9-af4f-574fb221ecba"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DZcLWYzJyWL62iRpV38KD6","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_018fF8srmh21QPwhY14J8qNX","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-nlkj6_tk/src /tmp/loop-bench-nlkj6_tk/dist","description":"Create src and dist directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":214,"cache_read_input_tokens":19190,"cache_creation":{"ephemeral_5m_input_tokens":214,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"485d6bd9-ce18-4c3e-a0e2-61a114b3e727"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_018fF8srmh21QPwhY14J8qNX","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"a523a4d0-d84f-47dc-a343-4d3130243d4c","timestamp":"2026-04-04T09:31:01.007Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01P9cxFRyMuAENHN2z5Bp6ti","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01SzB7MBRV84h6ggMdFcXoow","name":"Bash","input":{"command":"cat > /tmp/loop-bench-nlkj6_tk/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"None\",\n \"lib\": [\"ES2020\", \"DOM\"],\n \"outFile\": \"dist/game.js\",\n \"rootDir\": \"src\",\n \"strict\": true,\n \"noUnusedLocals\": false,\n \"noUnusedParameters\": false,\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true\n },\n \"include\": [\"src/**/*\"]\n}\nEOF","description":"Create TypeScript config"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":153,"cache_read_input_tokens":19404,"cache_creation":{"ephemeral_5m_input_tokens":153,"ephemeral_1h_input_tokens":0},"output_tokens":70,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"c93f67df-e7f6-48a2-acb4-25b8ac3e6f39"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01SzB7MBRV84h6ggMdFcXoow","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"b4882b66-3150-482a-a630-2eb818f6e4e4","timestamp":"2026-04-04T09:31:04.357Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_019ekYwTvheEZ2vbX5eqBGqj","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me write the full Tetris game TypeScript source:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":251,"cache_read_input_tokens":19557,"cache_creation":{"ephemeral_5m_input_tokens":251,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","uuid":"d8cf9969-ce53-45f5-a30c-8fcdb51f0b68"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":386842,"duration_api_ms":291659,"is_error":true,"num_turns":6,"stop_reason":"max_tokens","session_id":"e3a77d3f-3512-4e83-9be1-854b8a426427","total_cost_usd":0.5964482999999999,"usage":{"input_tokens":10,"cache_creation_input_tokens":29463,"cache_read_input_tokens":57019,"output_tokens":22801,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":29463},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":11,"outputTokens":30801,"cacheReadInputTokens":76576,"cacheCreationInputTokens":29714,"webSearchRequests":0,"costUSD":0.5964482999999999,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"08226950-be6f-40e9-a5e7-04254df3bcb7","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":330764,"duration_api_ms":299591,"is_error":true,"num_turns":12,"stop_reason":"tool_use","session_id":"59856856-0d28-4626-b264-1712ed2b2c42","total_cost_usd":0.5162108999999999,"usage":{"input_tokens":16,"cache_creation_input_tokens":23562,"cache_read_input_tokens":141617,"output_tokens":22471,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23562},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":17,"outputTokens":25188,"cacheReadInputTokens":161008,"cacheCreationInputTokens":24010,"webSearchRequests":0,"costUSD":0.5162108999999999,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"e892bac7-0a66-48cf-9599-a49e78efa703","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/eval_results.json @@ -1,254 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "TypeScript files found but no tsconfig.json" - } - ], - "score": 0.5 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 7, - "code": 5, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 545, - "dependencies": { - "production": 0, - "dev": 6, - "total": 6 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 27, - "excessive": true - }, - "function_length": { - "count": 24, - "average": 4.8, - "max": 8, - "long_functions": 0 - }, - "max_nesting_depth": 6, - "global_declarations": 4, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 188, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 44, - "source_lines": 433, - "ratio_pct": 10.2 - }, - "separation_of_concerns": { - "verdict": "separated", - "files_with_rendering": 1, - "files_with_logic": 4, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 34, - "tool_calls": { - "total": 12, - "bash": 4, - "write": 0, - "edit": 7, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 4, - "text_blocks": 3, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.06, - "total": 16, - "passed": 1, - "failed": 15, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "exception: page.waitForTimeout: Test ended." - }, - { - "name": "hard_drop", - "pass": false, - "detail": "exception: page.screenshot: Target page, context or browser has been closed" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "line_clear", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "score_changes", - "pass": false, - "detail": "exception: page.evaluate: Target page, context or browser has been closed" - }, - { - "name": "game_over", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "playable_30s", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - } - ], - "summary": { - "total": 16, - "passed": 1, - "failed": 15, - "score": 0.06 - }, - "gameplay": { - "pieces_placed": 10, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.572 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "exception: page.waitForTimeout: Test ended." - }, - { - "name": "hard_drop", - "pass": false, - "detail": "exception: page.screenshot: Target page, context or browser has been closed" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "line_clear", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "score_changes", - "pass": false, - "detail": "exception: page.evaluate: Target page, context or browser has been closed" - }, - { - "name": "game_over", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - }, - { - "name": "playable_30s", - "pass": false, - "detail": "exception: keyboard.press: Target page, context or browser has been closed" - } - ], - "summary": { - "total": 16, - "passed": 1, - "failed": 15, - "score": 0.06 - }, - "gameplay": { - "pieces_placed": 10, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 0, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "off", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:35:39.213608+00:00", - "wall_time_seconds": 331, - "exit_code": 1, - "completed_at": "2026-04-04T09:41:14.143593+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=off_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,34 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-732u9ti4","session_id":"59856856-0d28-4626-b264-1712ed2b2c42","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"9ae098e5-5bc5-4c40-9497-cd62951a4df1","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FR72bo6DEV945dm8jBTXiJ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser, built with TypeScript. Let me create a complete Tetris game with all standard mechanics.\n\nI'll create:\n1. `index.html` - The main HTML file\n2. `src/tetris.ts` - The TypeScript source file\n3. `package.json` - Package configuration\n4. `tsconfig.json` - TypeScript configuration\n\nLet me plan the game:\n\n**Game mechanics:**\n- 7 standard Tetromino pieces (I, O, T, S, Z, J, L)\n- Piece rotation (with wall kicks)\n\n\n- Line clearing\n- Scoring (based on lines cleared at once)\n- Increasing speed (level progression)\n- Keyboard controls: Arrow keys for movement, Up arrow or Z for rotation\n\n**Architecture:**\n- Game board: 10x20 grid\n- Pieces with rotation states\n- Collision detection\n- Line clearing logic\n- Score/level system\n- Rendering with Canvas\n\nI need to decide on the best approach for getting this running in a browser. I could compile TypeScript with tsc and bundle it, or use a simpler self-contained approach that doesn't require a build step.\n\nI'll go with a proper TypeScript setup using package.json, tsconfig.json, and a source file, then build it for the browser. I'm planning a fully-featured Tetris implementation with Canvas rendering, ghost pieces to show landing positions, hold piece functionality, next piece preview, Nintendo-style scoring, level progression, and wall kick mechanics for rotation.\n\nWriting the Tetris game code... Defining the tetromino shapes...\n\nNow I'm planning out the full implementation with a Board class to manage the grid and collision detection, a Piece class for handling rotations and movements, and a Game class to orchestrate the game loop, handle input, and track scoring.\n\nWriting the TypeScript implementation... Defining the tetromino shapes and wall kick data for rotation mechanics... Defining the Piece class with shape, color, rotation, and initial position properties... I'm thinking through the project structure needed to run this in a browser—I'll need TypeScript compilation, so I'm setting up a `package.json`, `tsconfig.json`, and organizing the source files with an `index.html` entry point. For the actual game, I want to build something polished with canvas rendering, a ghost piece preview, hold and next piece queues showing the upcoming three pieces, proper SRS rotation with wall kicks, and a clean UI displaying score, level, and lines cleared. The layout will have the game canvas centered with a side panel for game info and instructions below.\n\nWriting the Tetris implementation... Defining the piece shapes... Setting up the game constants for a 10x20 grid with 30-pixel cells, and defining the color palette for each tetromino piece.\n\nDefining the tetromino shapes in their initial orientations as 2D grids where each number corresponds to a color index.\n\nNow I'm setting up the wall-kick tables for the SRS rotation system, which define how pieces adjust their position when they can't rotate in place. I'm realizing the wall kick data I had doesn't match the actual SRS specification, so let me pull up the correct rotation system offsets for JLSTZ pieces and verify each state transition. I'm continuing through the wall kick data for each rotation state, mapping out all the offset attempts for J, L, S, T, and Z pieces as they rotate through their four orientations. I'm mapping out the complete wall kick offsets for counter-clockwise rotations now, finishing the pattern for the remaining state transitions and confirming how the test sequences mirror the clockwise behavior with adjusted coordinates. Continuing with the I-piece counter-clockwise rotations, mapping out the wall kick offsets for each state transition through L and back to the origin. I need to account for the coordinate system difference between the wiki's convention where y increases upward and canvas where y increases downward. So I'll keep x the same but negate all the y values when converting the SRS rotation kick data to my implementation. I'm going to organize the wall kick data more cleanly by storing separate kick tables for each rotation state and direction, using standard SRS offset pairs where the column and row values represent the test positions to try during rotation attempts.\n\nDefining the kick tables... I'm referencing the SRS wiki data to get the correct wall kick offsets, converting from the standard coordinate system where y increases upward to canvas coordinates where y increases downward. I'll create a clean implementation using a map indexed by state transitions like '0>1' for clockwise and '1>0' for counterclockwise rotations.\n\nDefining the kick tables...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":486,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":486,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"ff69dea9-3934-4653-bfe7-214ec6addcb5"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWp5Tvc6yptMAkzMHEuZWD","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me build a complete Tetris game in TypeScript that runs in the browser. I'll create a well-structured implementation with all the standard mechanics.\n\nLet me plan the structure:\n1. `index.html` - Main HTML file\n2. `src/tetris.ts` - Main TypeScript file with all game logic\n3. `package.json` - Package configuration\n4. `tsconfig.json` - TypeScript configuration\n\nActually, since this needs to run in a browser without a build step complexity, let me think about the best approach. I could:\n1. Use a simple approach with a single HTML file that includes TypeScript compiled inline\n\n\n2. Use a proper build setup with webpack or esbuild\n\nLet me go with a clean approach - I'll use esbuild for bundling or just compile with tsc and have a simple setup. For practicality, I'll create a modular structure with separate files for game logic and type definitions, then set up a canvas-based rendering system. I'm planning a standard 10×20 board with the classic Tetris pieces.\n\nThe game will include rotation with wall kicks, line clearing with progressive difficulty, a hold mechanic, ghost piece preview, and next piece display. Scoring scales with level - single lines worth 100 points per level, up to 800 for a Tetris. Controls map to arrow keys for movement and rotation, space for hard drop, and C for holding pieces.\n\nNow I'm writing out the TypeScript implementation...\n\nSetting up the file structure... Defining the tetromino shapes and rotation system... Defining the remaining tetromino shapes...\n\nActually, I think I should restructure this more cleanly. Instead of keeping everything in one file, I'll split it into separate modules for constants, types, game logic, rendering, and the main entry point. This will make the code more maintainable and easier to test. Let me sketch out a file structure with TypeScript configuration and then write out the complete implementation. I'm settling on npm with esbuild for the build system, and I'll set up a package.json with a build script so everything compiles properly. Now I'm writing out all the files—the HTML structure, TypeScript configuration, game constants, type definitions, tetromino logic, board management, canvas rendering, core game loop, and the entry point.\n\nWriting the HTML and configuration files...\n\nFor the visual design, I'm using the classic Tetris color palette for each piece type, and the board will render with dark backgrounds for empty cells, colored blocks for filled cells, a translucent ghost piece preview, and subtle grid lines. The side panels will display the next piece and score information.\n\nNow I'm mapping out the controls—arrow keys for movement, space for hard drop, C for hold, and various rotation options. I'm going to implement the core mechanics cleanly: wall kicks for rotation, ghost piece rendering, hold functionality with proper state management, level progression, and lock delay so pieces don't instantly lock when they hit the ground.\n\nWriting the game logic... I'm organizing the implementation into separate modules for types, constants, tetrominoes, board logic, rendering, and the main game class. For the renderer, I'll set up a main canvas for the 10×20 board, plus separate canvases for the hold piece and next pieces queue.\n\nWriting HTML and styles... Still writing styles...\n\nNow I'm setting up the game board with a 10×20 grid and 30-pixel blocks, which gives me a 300×600 canvas. I'll use separate canvases for the hold and next piece previews on the side panels, and I need to be careful about piece spawning positions and rotation mechanics.\n\nDefining the TypeScript types...\n\nI'm switching the board representation to use numeric values instead of null—0 for empty cells and 1-7 to represent each tetromino type, which makes color mapping more efficient. I'll set up a colors array indexed by these values to handle rendering.\n\nDefining the rotation states for each tetromino using standard SRS notation...\n\nNow I'm working through the wall kick offsets—for most pieces I'll try the standard sequence of column shifts, but for the I piece I need to account for its larger rotation radius by testing additional offsets. I'm laying out the I-piece kick offsets for each rotation state, but I realize I should just implement the standard SRS kick table directly rather than deriving it myself. Let me use the proper Tetris Guideline specification with my coordinate system where x goes right and y goes down. I'm completing the rotation test cases and now working through the counter-clockwise logic, which reverses the clockwise offsets for each state transition.\n\nDefining the wall kick data... I'm laying out the complete SRS rotation offset tables for the JLSTZ pieces, mapping each state transition with their corresponding kick offsets, and I need to account for the coordinate system difference where y increases upward in the standard documentation. Now I'm converting the SRS rotation offsets to my coordinate system where y increases downward, so I negate all the y values. I'm working through each rotation state and its transitions, mapping out the kick test offsets for 0→1, 1→0, 1→2, 2→1, and 2→3 rotations.\n\nActually, let me step back and use a more practical approach: for standard pieces I'll test offsets starting with no movement, then try horizontal shifts in both directions, vertical adjustments, and diagonal kicks. For the I piece I'll extend the search range to include ±2 offsets since it needs more space to rotate. I'm working through the rotation state transitions for JLSTZ pieces, converting between coordinate systems to make sure the kick offsets are correct in screen space with y-down orientation. I'm pulling the standard SRS rotation offsets directly from Tetris Wiki—these are the test positions for JLSTZ pieces across all four rotation states, with the coordinate system where positive x goes right and positive y goes down on screen. I'm laying out the rotation offset data for the Tetris pieces and now I'm ready to implement this in code.\n\nWriting the game implementation...","signature":"EtuqAQpbCAwYAipAYXmV/SlRKfYOp9ZBASmTTO6Ak8BW3HbTqWeMTE5CDOQkJwFM1HeoGPnb2aBf04i0UhlM9fK/Igloh94JTAH1yDIRY2xhdWRlLXNvbm5ldC00LTY4ABIM9YhDbM3lbbORub4RGgxctavI4bxCjXdAC0EiMKMt/F1tl1BNboaaqwD6+iaZON7T6lxlawfDi6AzoNRnLVUqwuHpUK73+9fwwO03JCqsqQF9a6hYRsk7/HXv86ZL0xCQsk16OCve02n4FJiusCIWtwKIpeIVQwB7W1uA3RRDt/9krFkcVCiDu85/XMS35prkmYqdSpyqluZll+8uulrv46QNGRRnLa/6XrgonAW51tx7ON9xQUmF6qXtfsqwgSfNsEj4wDXSeqg3GumHJME+U5Q4BXAdmoyL8QC9QwimvTESE95xzfReFK/gN+5hkLsD63rBE5TgjlN0FIPAMuOqvPhvjy1Phd2BXhh2ekuWYzBWwBFx3vpeXDzGTwQ0Oab5wdCc7fEuzijBJhCHCQ8cltH/Armmmz2DHZuZfKhpBSuqPEtFzzS9Z/8H/qPP1N2fKzJU89FwcovcdzPGejHh3fXkkW6AM/uZR4Eb4LwFsEFoepp+N37mKMqZrvkx7JnvNtGt/nD5jRRyk+lcWkOSbZx8EtWFzF0U4IhwHxU7uk1o9JFd/YWg+yT9eiKYhtbduNi7pM7VWuHTpAqVlMN5403sNRQkfNaKpdxp+1fF1/zTzzCoU24kXuhNVspZLBej48O2MVpLU8s7fETeDncG27xZsU8z4OiRbS/uSxENRpN9KMe7/uRJ9MlaRwFbM1yXiU5iN5tFDRyO2fUJos6WtQwnRWLDZBmyOxPHB9uGaznbM3u/0H519WumEW0DkhvXKeH1tNIJMsDURtu1NjMHlSYBbb1rFvHOXWJnZ55Ef0kswxkEb/RJtlT0XslxL64VGnFBpYv44TH0HbGm0yYLeBYyWDbguhZ5suTlFJ7RiUOzHshVVlCtN/l1u71mPtrIPI29E6qUc5nvC0wyu45sv37StNmoOz39NwHigYvSrFEIIVJIKH2keFR7hAbZtdsDiuj1JJk4PbOxUvvIjHmqydbR3S/+21HfFZ5EhrUHLFdWZsH2sgd0h5Ai4zRmoaVLaBO8S+iyHODmk66M2xZVcKJ6Vq5ljJ2GfGri6gjKtGOG78ceqhCEmWi+1E4XsKY/wfQbc2fYyDOJwub0D0aJl5ps5e+sLZrnVAJ44OgyaNWl0lzMmwWkHglgv73Ex0+yNqPSqAesfe0mVWQV1SVn0+WBpvet4XCCNRQEDxh3NLLBbQHmbpP7dM5kv68B8R5QWhxNtXLdquDw31po+/c2o52pkal92D+Ktj9Q8LFBxdoRb1xg/UfvPwNZcsuDI2JEpzHVq8cIKqTQuGH3DCi2nTvWJYXKoIDJPFH93YGdF4dTAkNaluVGY2JRSbzym72ak08NkqLSh+P9Dm1dRoUU3bw0F6KQ3jlOJOXB2jTXEDg4CWq+VJYBcjzSW4R5t/Z0ptVmgwqE/UxQ42mm0zlghhT9bazllIxR+Bif/2/ZWe49dbez3fTATB7pnsFHxRAw9IizGGe9duotGuRhxPtdS0R1rnVSAGeIQXswkQUuz5uVV0Xd41gPDjGlQcm2vrs5pMxhRmdBaHgdPvSRwSl+qCTVZ13THrksZT2WKeq+abuYU9Ot7Z1HIaO4UTobnXh3hv3zkwTsYRKVaEN8hzFsitc3Ni32i5vm/EIYlEn458mnfEVekguGvnAgHEVcwFz4PupYXXp7sFFbqyClifPpkwJjqQ0o835PxDSoTJBNlSPPh6YW2lYssCQpmQZbsZTGUJomI+kW/rFpMqnnWLoDV4fh+ojV8RJxaD6YELTx3sT4bxAMXPIV8XGY5S61U/lkvakOUfhBw7QozLqRd1Kxul7ileFJwBSibfKhD+3MFZ8+dWCSrH8L0w0VRZZokFZtWZSHOLnQ2SnsQh9aWXLDkZjz9EDaJoYOCZYCIuoOIyR0XcCMoOwXRnkhDJpbnSj/gA8YnykvO1wiFEY1chJea4Us8+09qI0y0eHpn1CuxE1SQTQ1F+B9MBEulv+OH4HaYlXC7+P6Q4fsrOykPzAw6eySQC6s28Py3S4n+b/Kl8wQIAY9qomnZLsacbKbguEsObSgC6qZQPpZ8Zrz95gQBBno6Au22ieiN/bsx/D6JoRYIOnhgDyE1NnGlnlxFL3hif3nUrAfNMd5xswS+6VC7IldL8JIUNIpx/2as22oc0BK/1N8csF/jrgNLtu6IqAdtX8sUvJ3zpA7g1HoU8RV9G34F/Hq6H9EsFEBKJSu2Ef2Y96LvG7aD+5kJP2FhoWD38Vuw04bUAvBLWLeEwvjDO9c1LW6XPEHioqVzCh3JJbQ9LTxc1EkK4u//KEfbulL8fXKt5XawrzGUsjNH8paU8bRUjpLvQg6uQxK4aijkMYfUxxNb2LDrGp/TOlyq6JagGtiei1qosrItrQP6Sq1ICnZol2GEffZnXx6QsTip1ORD76gRJ42KcY6JzaHEQVNMdt/0N4at77oY+zRDumyWfJsBGBnnRakuEIdq/b4CvbIpMLlCvAK/phvyvimOi1ifoOL1zFB4eOnhHQDikEa7GzAJamZEwlF09HDoyvYQfQUsVpWrhRYNV4NxW7dFjoml6uVce8LyjZxF6sSe7Frpl2224LdpIgsICD5b8rUGH+wPLv0d6cRi22ZvdBUybujLLzxQEbPcTz4NyLnT2LFGC8nGfGxpfl2OVRTvitmVWv3Ji+TN0wAbIIJ9WsaLlYdIPEMjOd8nIxGHlDKu9i17QwVdrFuLzN+aUb1Ms5cH2x8uBwNE3HCL6sMvMYgZPW9+MO7/Obl4sNzuUELidpFhwpwJwGtHKprK0+tImEqQzI1v8K2F6iAWLzvMxJfAAxh+EQArI5sQzuSFFqtI/o43WGMwSEk94QGMNlKCKE62nrWsM1/U3wLIOlXg2lbYAGf9pLN6mn0AdJ9dpU/aho6KXhc9VE4+Jp7bIoOiroWVjyNKf74AQefO4Tu9hdAYS1CanwDb6lP/Nq6FKQ6fBml0Y12wpBn4Akz2FChH2Bp0yWcvCYrS/+ww4BGddjGFYPjjJeKiahBsZrLSIbpv/LoCU/LQq2WswLh/qhJrkonhmQXoTwedTKeJEfrLpxIEs0IAKKilsOWqyww2Hk7WHfIhF0azRkpo1vkKbTc7qZ5nfhIlT0DLpZ+ChvhYQ/e76ZqF7ZEEfrYDjyioFea5KLRSX2cpaCma7X4UXEqpSdaJ9WhB06sG1lKrVsN5c02C+1e9M+mFstafiNSs0yIoB0dyI+utEgSGceL/g80rA6xvjQu7cjH0LmdASEYvelt5/hoDycR/qkUFSLec8oSOhKEH98/tGzWo6T7tbhJjjuTh44n5EYsQMd5KXWFwChIaGVxMHCoVp5DOYKdSCKlYUvIY4k1DZ2KUSMYuY5ktS0M2bJIaGRL3gdMz8CvTpuWqjq7NPCNJ0XHX7opmj/4NxjExTlE0535e5T5wRkzsw3aj9xuv4wK8Gb7WUEvsTsNCrRoCgqFT32GOaJVycqZv29tqxw2+oh+P9LnPzyxknZVWOklaiEfF61a3AEfEhVeXTJ1380XmaJ0FAeG3rTGC67NwkLOUn6y6KT7Bz3zPr2lkBcJwklHL1qOxGOjWqYPzfx33I95By/FNBdMNZAce7PksUhNADjnwe2aduG0WHry6oECjmo1Clx6kpJg6eezsMPVetZeuKcvYCsPRKCxKkVu9nB3ELmb2FS09YTpoUnwzyoORGUuRbAUXUCpFCCBmG1NfOl85Whhbrr676qw7BJlHkG88bDTQJPvtKXHIVB+zY9ameFTBDJkb7qJ/vVed9WOOErEjGVT5oTMup8BbO1kBw9Xgcoe6IkT4h7DnMxZtvSIzhpHmZxa1nnX0wItn+8KMR/vtARjKmkADBDdfNGevABFOspkeoiDvN2VNedds4n92jbvBbRFsavAmgU1IwJUqejD361nnXJ2BLKenixaN6N8WMtaKCaiwSlHNktD9zpt4VEK5b4asg8HRKhUvJwI/FGERlgn4nJEZBCoeOxD3syjeuFlulhqlVn5wkJHYVHUAZ9ORCroBIS93QnTAjxF+ExupAeln2L+mBZt3n/kuqUan10845f4chmtsrXxZyaURlC7TdSUp4MoLEZpaRpGxH4rj22MmcWEtWZibHc+s4CyePFrosVTKR09QVgsxqcCcDtnNkrXTn4zgFZ8Fr3qE2mkJEtipM3JhjQEwsHvMmlHXmFIxMGG6Evhdn6uDpzcCEj2+YIUsvtf1WyJUVXMjzumHc75LpzYwss4IWzk6+7//dbPtpdfyfOmphtKZqSnMSPxpUoTWSPmLQK4cd6PmNIZgDmgGf0O+7523XDJeH/lHAm75H8qwo99Znxz6bzhyvI/CE0flmIm8yTdcAeJN+QQcE1g3s/D7q0WQweZPijT7BHVjsp4GUNJ9fAFnzJSTaTtvwEy+gF02lhMROznmjkT3YWdDX4LjqdGqfzult2+hgDlduvBwtAruLMgYNcfhp2cU73oeDghVY8JUHt9ILxam6azTAcud70Lw4iZgfPAY5IbYAZ93sNTgIhWTeoyyiWu6+Eaw4LRJ4DJBQiVxVmXa/++Dz+lqor1bW6BMdbU/eTccsx8i36drVIU+nz80WgOWu3vqRdXo41qVMgh7sFFb1FdjwssWplqXmPbFdPjUvH/5tf56MuobcymXx3xhXF/saba4XCejQOFogC5Dyj51LKIU7akC6oOXygc0lrDRJM8Or5Tq2eyHAeqI0iMPmQcnhjAA1wVY07FNQr334B+QZXcA8VApsIm1gwjRkXJn/BYp4zYrSf8e5w9NmZ/n4XdVJSCF+NZuMtQe22wEh9H4lOsGHb1JWlHWx0gUh6sHd2wB0a2yXzzJMEV4lAvnNHMrsDenTHaSl1vqJWctA5wKGQ8nubmvzAOt+lJyd1UiMagOcZHwd1wteIF608Ns+WfqCbK3rqqCsOg84EY4TnVMWWQQXTet19pYJVoCq70XzaNDrpW2qc3/+DHoCGWxZX0xlmb5UqA93pWEK9KZ/ZLxj7rd469KOiyukjPOxQXF8fTT2Pw6PgSFn5g8bXfLKqSXQW/GC05REAOdYE4sU/qawOnV9gxymqGvtY5J0zPja798j1LsEfgeVKKCDpHpXCArUANt82RwW2CSC30tQfi/2IwRtayctq18kN7nGUnUbC7abIYLMQFsEp6gIOVXXeF4S9kg90m+Ff1MV4ESNwikm1m1cxuykuwflV2lJjum7XAyKqlVeuwuDBn1vhyuKQuy4T336cvDAD6VvAd0qPGDNfoEDHHVErbPbf0NKdfET9kco+V1wFtcJv7qL9Bvn3lSZBidx1L3iM5ydRHPqgkEH0THGZGqscC1tttXjxphle6rpE+0LIpmzfqi5TA+/J5k9GSG0H6bOjZPc4k0sFH3FNmOfAklUB7ohlspW50dutE0VdPo9FMZXWLiyLBhK2wecfgdxvpcaJlrhZrAy85+kN+i9MsBPQhSH8c0SIsRqTjeA79SfiOTRV5sMMYtvyZymoPtNQrXBN5IMydJl+zSQ8hJxdeCL1uFZ6q6unNyaPgCsPqwDnxYLJ53e/BroLeanEF7vkedDImZ367QrYk1yVdfLeYBEZDkCdqdEDQxukWFmavb8s89X0FUR6rR5Ho1SV8KvfotuirSWckcf4syhyptG0GHJTU5uZdYgJ8SiXVjQONQf0k931M87S6Jhq92ZFGVzogUFURoCyCQfnlGhtZYYpsqyz5WFo8x9SIWSDR3WyPIY6kZnEZRlfsxKfqSkEG894IHnpgZTvnjVEdQzFZhFZVJMGv7F4LukdZLOLR5WoQndiA/1VbixTxjBvpIdKSGMW1oELZcDWeVIn+OJc2jZon90DGUzUN7qJCQMtdJ4OfE4l+DxytKArnU7nTw91xwv4jUbkELEKy57EU7eg71uTj05BNnxgj+J/3gUp5CNaAfvvpi1FsDaMV+yOCGhN2nFL3wQTiemiwheI9Q5TDOSkMLGuynB7LVhJhwJMKrBSuOQUuCkylmORXSBjc22KEfcVf/PkkQlnaVKEGLOwkhYf7PIMJtA9yaDbX4JXsFasIUEymqkikzP+io5RNFECqUgzETHp+g7OpTquWkt9K8OMVYq/KdFYshjtDjWMkhYXEqpFzJV/G03OqumZIOsArNaC9ZKDA9ZQ46dNLuQ6Qm5P6YNc3TYKj7YE/s7p4tdaE37eEjV7qyBPpOVq7AhvlIDMG/OVyGpP2aEX7LL5uK5/2lsTB37/mTUaetHMrRhmKJcvkM5lvFVGCJvlf7GvBnFxMu+xQ7RtwUhZnBkilQS9FWLZIBo/WEN06RN9pZbJEq5he5/VG9quzmkeQqUO3OOeUM7Jm7R14vl5Q2enRzfleFrK9GvN1KrQiATwX8IT4S4dYwzaQGaH1NqPFY7YgknIRakhZjC8X4aOqrWcwAJnDkEHKIhFpTSJpPQS4GVvqvTSREdiKsNMt2U8h7eCIGoq0FB2XWtlxgzSAEMQziXfmjI5tq9dcV2CNO0ijbqQ/QY8rqlN+MXVnJrF/eb9LFn3NSXrGCOFRZdhbjy9cjEkUxG2+CITenvZjt7XtVgXUIGCI8wGcvIGP0nwMZB3zPzKbgQBELI67yOEaJS4DnLoEc4YtphDrqkkyWhVsS3tJcx3ch58uO2UrPakmMX7JCFNIJWuL/MrYL73kQP6Us4fpoF8juO+UmK8bSELxLsAgX03TgyS1tDilARsDliahMjTBEV9VsyFFq3j6U6RvIg0aj1Zazg8FZNOMFIG0vTsNOtexcAclnexWvXi/2t1GurA4HG2+i99ioMAKmiM0scQh5pFrzwEmbKdX9QP8ONCiFWBkgTwDdSgBqUENYOv5VN+h1aIuJbIdNSsmpJLKUITMqKdFUQ9p6AOcloiyddTu14Gh3n8H5RxUHz6Fe6VhYvnEuF6M1a340CagIOzVyF7CIrXT8OLsJ+bRMRhFtxKwT7XUIqdtxWMiYDM4PWwg0l4XM1YOGYsHAgBCn3EVCMHgG4HcXSfhaIwY1fY8sOqL2mCVAJE4of7QH3CWhT+A+HPxVeGNHlhJyEzZLXCkzQP3r4sZd26vqvmOOYSbwti9JoB/IdsNSjiOoYVQGbqpNob3Y71grIT2luyuDakObRTdmCzoA6Yvzml0zdWnqInd+BLXDjtuqYP0CSgmQuSMN8ZdkeYfMvACnRD3Gch9nJSF/Q6nyM5RK2Q2bgvA3LjDHZB6po2cpvOv9zykYw9EDoTr61RzZ/NaQm7vP2Z9poTeiPvzoTZlJXBXWYN+k5eFr/oYgG06HhzGNxzy6Q6dBwQzNGi0S0hQTSCrN+iVyRho5Acjl1sJAplZm7JKG9U6K99deYwfX9CUiQT0pcb7L6U7cKFrxI5IsiGcMmJmOj4KkR4xTyUszen/0e01dptljTEjDvmP1NcPuu/fpwniVlA6HUGfHPla+dJUh7ToGi6DadQ+1sxZLqrR2lSpqpTWT7a88K6E8zLiakKg0p/OwlA39nY4DOylLwmJBKPHrmmxi8Jvo5sfcguwUkbr8cvnxUUBQbHKQrdlqAJdBEBgEnjSEQKssGd1vbmuuHwZTFrn7IbbCzCYu3srBPMgX7U98bu4KzM4IXzqCZztaGuCxLEe6/CPT/HX/hy1jbvnLdFuCfssquusTGsy1EbwccYh4BEM2m4O5ZDln5fHcsBuK8vSyujt2HWvgC0xS1MQaITRcfAYQ2RWq1ZYYEGSCTwKt+65YX36krHcdFSr6FTJqxiTGdqCLa5+d1k0fMA+9DS/So6G4bxnvQIIFtQ5Sopre/NT4jikZakl/aiIdgO62iWl/s1LGI/jOmTcA9rj71r1E5lYAGjEr9ZjOaGofVBscfB6IHjD1I1ynfnnD2ZPynDfi9ma9W2yGnFpH/N2v4Aq+C7CXf2RN9tE3HllTdZyXQ+IHRqziq327gyCCppm4GUkinDuowoO5VEV7sWpMdt940XRw1UtKjMWfXPADjaHaaZ1kvPf4q8F7xlgtt4zQBoPSVoxyewhDM98HUqRLDZWqT1lAjTp9NjwPSPSkaW9nHrYbECf6vE/uytdjOTABc7zx+fatZfisZwHH8y48D/4HXR/Kl1AbMPZDFYiQJAou+1cI8NEF2bPe6Gz9YlDLZxhTve0hUCJM2zTTsFYETSmH6jAAzZxZuVa3lnjW43RjyyHLO6dLdCgjUBp6s8iMMXE3YcROoVz9ptMlJ8yLMwhJODpdp6r0hpzBAUbNYoDScg7jxjpRSrF//VuoXINtSozqM4nPdW2RguJzZkqNpNgpFJFWOk6+aRji453WuDKmIsHL8fNOBKYiBsHj92hwuCxuCtXjLW1qrC+6lX6aIbaagiCZrxjpplsuJZr1E6y2ZL7W8Cz8rlIj5RzUI9IoMuC7w/mWjIbuc3o3iwy0ORrr6v9QqjsDJTtEUW9FicX9RbTJ0AACaa//psD4uy50ZPBDd20TME5pbNDTUsaRcMD8clGk0GpaWV3D9wVFPmnNuIUrGEhCtmR4x1EzgBCF9LJSsXx/EQUgt8yC109lZIoSkXw0Ql8ZtBPL7DqW/d67dwMkdLzp9sNLLsstGqir8LwanYXcS8eCe0OK9oV5DKBk4Q34iKHfH8szLA0UMHmFfjKTWZ5O8Frv99twI+7OYj27kXuQz/ksF6vjLQlixAokjN/EwSq1dRCd11apSnnJF/EZoWM8q6IZrwYyfXuXA0643h00bnnGRNhrtbGmlRdehCCtmUuvLh2RNpos7CtcTQp4l9+ufDEnQTw1kNGpvwuiY9psEDYlnygHMRFWP2FF8uONpEWuY+arvv76hfZXY4LLltlKAtft9LJKvKsSSGAANopsyEPbTgDgW/TvQLSnnQSUrUeDwXP2huFMLBx4I1Ov9TJ/oYT+YJSmeGykQteQ4RfRdUV+Mx+wWsgpIVe9t8CxU5jfie/4OIcQMqOlUM1Tda+YDA/+74ojJlo0bBJ/icpaogvQn9v56cnCoKoBfWqh0MaFGut//jtOL19p4Pfk0EDacJwhBfWxj7yGXGOptDOkTf32llJOJtVR8hPpfIIiboj+sLJiRX5HYdFlBqwVpr514VkU+dWkw6QJFHMLNbU6eCTBdAdTP1T1TgijcxufU4G5YgCnWU1JON6v9JG76a+7EwpB3lwxGN+fz6auQSj6o26htSdO+VXX82ATR9kp+ZoW3AdOjHcJ/XqDg3oOdu5ME08jhG0C3naVM0/Zp+vcNXt2t3uYFPny2qCpuEjUFd3xVJ1RiRw9IuFsD8ufbJMj7wuUvnOzgrPAZMkm/qaxFpqg7wxshNsc6vanjTI2BPr+dQS/oV+HQt14JTlAykHYjtjkWUAbZcn6jDezd2oLcSKT1AsseyBMZC/5jnTwPvUzCgUM/KTN7eGMItJM+6sGhs9RNg8WyvFAG7VVBuKiHs7SwIbUm0eGl/Yp+nRer2Ypg371mdusIi3g87Ncnd7zubQZnK81FNgmVilgvzAfl11wNne5OooiCKwWIS2b5/iyVmlNkbYG/va0zpDLRvlV/rk+/YS31e28Y3NyqJHBdKbzT5eE9r1Q1n4VyFi4J7axpvTBdJuAHNhWCLAEtiBV2pOwRpKJe/zwS2Pjhw+IsSW3L0SaF4Q0TdzVC/caNUMkrFgxZaYsGRgOw3zgVxWpYEemVBHqBZ41HEBOTn6DKqkc+fmQEoCVK5v+lgSXtosOCa8DxtwOBy7MF0QsWpxNP2PL+xvRocOadqAgjfx+JH65+ZI322LMjnFH/ZVMGRcj25KRI67Se1iL2oE/63hdVkMDvPcufsTREfuGRhpi6qamjSTsE/14D2zrAWRURgX7k4OYrkryhPH0DerTYZt3juIvyIwekBbIJ9L+r8Z/aIMIS4HNbWT8W1fKUkLs5Se6hAJ8+sGh2tP1jCk5Do9Dz2DUxrSCVSqQ4SBYmWiklQObwzKpeQlrMpYkIx8mu4uQOGRTThFl1EN348QDQjTcuQu3IO4AedHLYm3b+dPrfkqOrvxbT5o9oreF8270StNj2gVlH6T2Kfh/GS1PUrX6c12hWKvzh+zLmHCjWqCIN1Oyx29wDsj8oRIJ7JyhBA9ntuJeMr2EItGnMa4Wxg8uHhvJJO5UHxnLWUbIAJD3+yEtpOZRc8r1Nxde/W8D85KvsONjqBx7cpJOSyEj6CslXgzVSyBRhjinTWroibyo2jwErPWOH3H8+EuhC2q37hwM0+fHcUhbbqDBvPIYJRwTHQ98YGaJcuKHaOOlVZrxeO6kbZxoN0yKRv5EXj9NP4neO0ZmKdzYTmDeCKvpgsBRLpXETKgWQ81gAXquldTTDkIRw5XcMk4GeOE5Mju1duJlLX16IkcdjQDSZgmeCsQOvgUVi/yld+GgEr9RQ1A16OU17khCMstNaPuWZIHv8oS1wdVZnVU0G3SLdj+1BBl4gio93Id9qCfYoDXEh++H2Z4TugL9GjxcCkoB3rog+xKlLsmgwaSMlJiSSy6JcolcHbftF+jdJOqaISKn+aiaWnV6eRQHJ8Gd72jRqG+77wDQCtHWD66CUxzrt2PuZRhQw3QdzaarQX+uOoonHeKJJxMwdf0DAgUot5XDxLgLYiEVav2yiWYqKaBV/mVPBsjUi1TC/+3wkX8nBS7FrMhTySTkfI3mouvCGEP1DIetZgYhbYqj4uZmK9Jkb/GyvxILZLUg32vz8EPEOlijyeJHHwo/iQr8J9lIJLKYKrBbvGeQnANVBHBUTOcQizV0lnuHdNBAgMfSkw0u6ShpY9efJx/rDBzllh/FLC0Gk4wcZybAQH0FA1138Eihh2jZs/DpT2fo1e1qDUp3N2KtR4HqmD2tdfwVNv7S+YLYrXeV5d+ssNPbIq+O6ASuPXRnDeky9jfqa8jLIAkMCS/wU282IUh2qBO+YQVeVLbdo1PgN2P8v3r2hf1MuUjY0UE/QtJNL2LTVV4qQ9Ro0YiBjN1Hf2PDMSWBM8xCczGeRuIw4YDUzvMZ2SRS4KYifPdqFgm+qbHYnmtwipknNj/jKI+frqEPVStxM8K81WH3S7EI0dcUdhEh7noemJh01gZAmlV61Pl2/MYN7y9MjeXgIjoou4PX74IOOC7ku8s2uyP+/paaZ8wKnhdf+Q7rSa2ktdwTjsZ2gOdxq/ELj0VTDHnwuV18918owHHv9Zo1tWtw1Vo6Dx8WsmHEO6AL5WMoqRUc43j6XtCMR7D2rnGxoRUX1UFbM2SlY61jd7oWdn7D9+7o3qTmmN4wIlvXhMEhExxfXFLgW/GLW9U5kNvbDXFwjAuihVgO7Zo+tWjByXN4OzbbL9BO3vDAJt+qw/JnWtCB53q3KFggsUjuypDiZkcMOlHbL6/gxbrLO2QuIoRkwQftfKOvYMLLya6/Hp3FtpPT/OhLkRf1VuC5dtozfbzZieiu2S/2S6UAUIG3FRifkQeWKkqBfh+2zu2ct73X+hJiWFwyfkRYqK//Okny3ufEAkEwWh6SMS/n2h5EDZxj0XoiWNpoouzXHx3RYGVgCPCbajgv3nRMdfdm86bU7PHP9fnbRJOjcSbM/FP7Wqn/u0jOgsxnZWskQYH7hjkRHIINIHsuBeoOhub/ucq+fdx6pip7aGG3CTsn0y8pl5ydvD4aIK+KTc9C4uxr3U2QMZ6cNaFDPE3MzCURNAKOaeRR6sbnNzEAlMubsw68BuVrdYS3zZVTGv7w4O8uAnnc7NEviWw9qdSm4pm/7h0UcBOvnLQ5Fh5pxAj39nVHtxvKI34h5HBKZ+uN9jXeB9smFmFgoGMv1rT2DzrCq1KNiVOYcjvzT47XKGORflRGClpaT2HzKknNPVRTUziXvQ2KS2U2oXMZU4na21Q8YS8ArOBPmswJ+LalZtPWvOSTgQ+jKLfG8IddqZ2QVcq718mdN9tLh3xmqR/qmlgG+Y5Ock7Bcv2gyhSIO96KpYF3aAylSEdyFkzJc2dQiviO/JeHTVCJlLYgTJJS50YHP80ye1WwtoAuAM6oKdvV3290bpVgQdxxAHQBq1H0/LMDSAR1cAYh0/+2OLkytJwVAD7ZjyGs0pQda0ESFTL9NQma6njFgQFm8PGSRgWm/rOSp4EySlkzXgMVnzdJh71gTO/5AnscWsmcmI9zZ+Z6C/tqYx/yUhuPxbGFHsWLNF6/djm7a2LRM1wTF5rl2prouxTLjALZ8QsoUgdYRKSQnTX09gx8rdma84yW96GV3qGv07ODPM4OjFdnWE5I5FLozTpJpF5OtDiTxYK72cMS8se9Vr8WNpIfG/ZVMo0IPVRFSLLBgwJmJIo388XuOzg3S0N/9hA800SYCaJLQYWCcLw1XGAcFMCoDkxY7IFDr0KbVdAMLh6uFSaxzfEBZ5WrtOhByy0P8UQRjfxXuOPPt9wd95bMyuPxcphrbXmWu2XKoiXIf8153R3ennQMROneKFn8yy2xRkk9f/T6Gtj78UwAsnwbvYeSfr6CvHYb07qSRNthAbpM8oSD02G927l9DeDKvUfDo7Eu119YQl26tom7Pd2mRhRGPXLfjnr6JGrrZrhV9gOSh8zkzmZXtEau+rLziLFBRc18DbQw0C12lyFDeOP+cJynDG5Pj3Q5bJHABKdRq+tuqvmm20lckwaKK1ZwH6mxi2hgH7su29NoEddDFwC59ZLfl0tlqZX6Nuf/5Ze4VQ8T0LbVjgLw3k8rx1eNJMoCvIrLvSXKBOgtThxeLa+3/oMotldogGL4/Fd6dx0RjiZC+oNq4SDLSDwF+IsvbKq/pIPo69ef/t+mtiU4uZo1IEVGP/k2Q35puiMQNti1fMtiI4P2xPq4u7MX4Z1NLgGph8PMnMZ/lEL5PJUVGA7RibdPpn8BFhtvV7ji62D2/5spktn/KhOg6/idqzUyjA0Em0j/MLu5XebK8RSfZ8P+Ohmdo4p0wuIgIwxi6QlLf6R/FIHT6gJiERwCeKMQYAmQQ8Ve/AtvzHJCMOm7B9Ab4gGXvA3W3npL+D6DFdzeeWy6jKDp5zGk+/UO4pKBfjWWtNT0z2LGBGjVCVFBONVFCo88wIHZ2WlZ9BSBduQ5DASzQK/WzLnRzKEb0VxNVzn5omMWMI+Y00ETq1kJICIGt6YekMZOXFWIU8aackEasyrzoXHuBQx7QDs+9VR6ISj+rMxqHeYbDtBE6ZNksppUh7X7nz0G8vIHOZIOJTQ2SgyVq6hyd8pqvVnAnpY94Dj/HiLVvQOAfJpzbnIoDH6Tk9xM5eT1h7fC94sXfz06Pw5S+Hdm8l3SjklA3Pok+0moLoTMACHTZipNzcJHMOAdzny7FGwips4Ip5CiFETf8K3QU18N/dZfVbfaOx3Vtzm8wCMspVULBHIPqgN7rL4mt/Du5fPZ27swhkCLOzP566psLVYOWrb09Y8tYNLF8lysldg+7koimpaLV2flmCopMf8uLluhz2icniouL4spnolgKaG88surQXmZ0LNGE70Qcrx/nUy5bsbUAOEaAyEDDBSvhZt3vfEBtUtEvXKlNTurpEnkkpqzwOt0CqkXifKNniMM0aYHHoaK8WiipZ1+2oBJQD29MO0mEB9+Sst1RiRfB0Bag5ZgaSrl9cEW9Z4A1Ofjr7Z1D7UJPWABkA9SRI5uGW9fupf9YjKab3T1atTuKXegqBPnHpjz5lsplSBJp54hPfdHGAG2zZonDwHWyKNEaQci63sHV1by0fy1/7CY4tTvlvgAlVe3aZWtg8san6ryrBezSSxZ8P/ngYfiARCoGwPhZPGaqpiHMPN8Q2bilOqp+af+for+0UT2BQFI0sgOqzOtAFpYXR9TL157zzKA9+PNn12kz+AUcQ9j1DwK5/RMRrphUtnzPRHuXzNAikJcctUip3G+H6iud8EAB5dfmgHe0dcEE3hRZwCtXeFtR15pm7azFIHNY+fFoxzRHHf8QMxdGQbTamSlyoEGxlvHulHpeRyK+mo6Z5k0jzZSruOsvCQRvbiDfv/JA1J6O5cfJWNcaB37OqCTnzLCQyYJ8ZxTns6ruPEcNf/JT8BzwJ9XBIRB/RrECYnJbAOqSM6nbARUJ4vGpvd0900Eop4U+zRF0yZDHDXt7GFCEqCh/+3G4T4I37BkkXnzRWhyETzqxk/aQZdRttFr+zKc3el7Y9W1qdfufdeVDcwFrP02X06tL55QilcCNAtEsFTSxBV8tjq6fJAsKK8nxFTBSVYiTe+FhFsarYhEvEN/ICKR2b1/5Dl7J3Jl1ac6lIZ1gjtl+hhaX9ERsB9mkykGFDCczq3r7QS07ZqUq0R+6zdHtblbtlinstKbmLTI6YBv20uKADHmU/HOigpEU0EI0NwrAB+hcWbCB1DlRCL4WtXRg+211LuvrrrFeYWNUHYjQvkNk3+BR8LZ8bjgpsMIdhjokGtMtwxXgB+VJt+Qh/1Z4+35gktNqXNuzbxNnVeEzEnz6lo/Zu6Bzl2sGk/3WOzIYwOYA6oredF//kMdngHgLQWg4J2cHrssCozCY+BRnTOaYOdxf3jKXjGT/CWbya2D+wl9BpN9sGtPuKm6rIvRvWRuSqvq5eqxI3wcp514AUYtPVnFDOd3/sa0sumYXP5apXfPgsJS97hI2oiC/uLM7Gh33zLhqohs4KvktiPQArXiGSGEAy3HNn2F9BnsmM2BQa6nAw2RjMa0yXmWca1bRFd7U3gGbq4yMYSPsljXSj+fSrFMkDfmpxCxHI6Yxu8C3dd22B3qoJkzK/fwxV7T+o9OLbomKLhJuQIs+J1lp6+SFYQx5YRNfi1HlVYvnv94FV+Bh3ArXqMjweOeG/V4NniFROxXQj9BK8pdwd2l0pZcTepo3uD17dycJmVBT9xumQqAYlQMG+NEbeQgeQUwFMdgqoq6n6wAn2M+qijmJx8g0GvebtnPSAwzSaUA+bSbmhWHaB5/bQTADJ4H80ZY35crhF5qv/3oCX+cr2Mlz8D1VUQ/qJs/Gnq0lIJbewHiUFFgZzYgDANSPnseNJOXFzkIEzPo3sof5/Xi0ydkII0pemxQl/0WmC33S5ZhxuYiXj1uqF+yTUGrFrNBKHM5b85AQ7PXrCt4VYKgBEiRJTW+5vbq33gnzztBQ8a78CNu41ndGgnW+BoO+pSze+y0DWs8188RJ/DfoN4XHgWVI+E+arCjL6JbQ5HHdVZQ/ZpWxQMzLtZGzbh/IIgwGGGKoUrbHD+Xl9gB+Rsi+QTc/jeNo/8dmy3t4k/Nw7MQNAxC3eCCjWOLztCaPWcPIh4jtPcis72hMii5bwXrLjTZsHftQ7OkUZHAYUDgHXlZY4CoXToZrIggeLai+PEv/jLvVi1veql4KjfqJmt3jziqBpxJj+jYJcVjw4Ewkdq0LAhb/jRtvO3Z1E1GyCMqAMEq7aJedrwnwH0Jg8wAl+76wWP/YAoJwoZ2UkesutBhkgxdT5QgRMgGKhfqeEhYf+6N76OaSkMpFStuFfpdi19nKzWkmcyJ3+lOzD9tudSET81kPsvbG05ktUW65f+co7ZO7N8K+TnBjEN1ofSF+qV/cvFCW4HFI3vvD2xRpF3LIALDNFOqR87jtNmyCBdO7wE5wHCuqY79rQuAitDilZCyLf0XgdU5Ekk8hLrquk0I/4QFA5LI2vpjaSdc/791uEpW2TjL2hLQ6/eqrBCoyOjbPdD+TQCz2J3v7YpvF7xIBLzIQyFutF3TRR5uNN+AEFGhnza6i8Ctw+z4Heor0OyB4Mr3ngmpwgjIGh/sPG2FYP+rvZP7vALqFyfmgfews4mLopaMtwspOkulqE8Yzjpi3332VsDYG3cxkwL6moxVK9HSqUyYXBjatX2m5oH6gImMUTI1OApTmRwua9IhzGJmJqW33FAFO6wy+WrjSWrGm/wIIulNe1uoGZeOeNT9R2GFh/uCJNWRncNe5d1S+EnrgEzqe9V2U6Wzwa3rxJ+vDyBh+Iw71EFh7TzCm06DoUXomknyn0z/8tjqE4elIG4JvElg/UMTrVrGA6VTDIsUaIcby0nKtKR2ib//m/PXLBg25I8bCMaVfjtaczmyDqOcx4aJCNiF2dT+/DMMj0WaY8iJ+R1yn+AyHKl4Z8+aVrmjy92EJCozFdfeO7FUcjB5DFms4b59XelozsycMNeeAoRTr6gUIWu3jiAKV4t9q/c6PLZKJwY17mHxpTAERDvglbzZSkxbvX6W/JihTgZuRIX6vcL5yszk7BD5aiX2FGYS83RQrdHOgazG3y5LhQ3YxqY9+K7vsuNR4YepEeVLaKEHRQ7kGQX3yl3eFjP3nXXw4LyvhfZ9tk7mJFE0QKaoyRSASTgKIhc9nWtMHnH4gElmreI0BsBdAiPmLtOsg0/k2IYenf2XM/SszgQgzOVAcp+hGs5nNOvyIPSV6nLRTrOh9jqA2byidUaggcj1QjkO+4n5BHSXvp8cMmbIEruADeKtcB9um/xrdkecWL9q064h6zsxL6X6H8txkMURKwJMGzY2bMORCcmN7Php7IFYIrL/iy6p0GsWID9coQXOo4GRoELEk4RrsGwAL8HuRWdp8ew8rGI+RHKui/9DB4RiPxR/JRf6xuDDzGGFtgG10m48/eR28TUW7oprsp83cFpXEu7jVFSbm0pAL6PhzweKo0s3laBdfPrQJ8/u9AwsjR5B++irXB+2rX6En83zbtgK6ijZmEjMy41vOOVULZB65B9YNv+2hNi8pifbMyiJTgubvegOv7i9Dxcxd0hW+TB/ogp8ixRV1A7sDiNZezC+K84xWLRnMPtI7RRfgVgDRdu9k3lyn5Im2FKO3RoQI2oLO/TbGKv5bCLADAA4XD8FGQ2XyNtUW+TZtLLpadu+5BOCfjkxw74xBmJmOog51+q52Zk4TdgvIrqoVC1QeqD7ddJKDfr2sBbiyZmxdBtTJaodE0NMMyQ5AxLgQLB0Kd5BoFXKUuterMpiVOZmRjS4Z6MH38qNqO50VjLzbtEbPPtTfOger9QHzat1xHT5HYWmP4MVe1ZDd6nZzKyF3cNulXZ6jlLxE/HizzwO6d8OcSrv2tXRdukhC1I18DAW/gG06zhkFZiB/sL7rT7lNJxQOFD5MVBC5sHl71dnx9DisUOOtbixf4ia6PrQP3AMJr5drXHxWWmZbHiXngDTQlTQhNQyc4s0+eSM7BuIohuZAEzgzyaoRIMLGieF+rzAn+j7bEuBMvFJZv1Pghe8vljjEkK0iz6lwQR0w3hDvHBEgpAdZGqdjXMt8Z4rk/piPjzLfO+Tf/86lacvNGZWzxU6JR12j8X7qlZOpYZWS8xr4bkCe5kbCssKE3x9csjtknMA4RkiFVApwt4ISGOEPh1ZrAd6/CucacTvGA8wM3pPngaTslYkSxwb5bVwu5JSgGl6kB98Zu4SD0hvwgSfYNthG6LI87S37Pa3WopK9gV+D3aj3gRmfVsHH6Dk5r7Mm5pVrwTVCTnTehfL3QMS6smOutgEXJwF6hJMnyzjW9NzPKkDEX7av8MnGaxTg+oh9NkwesRMxIpMijh17el149T+VMTiSYsZj+xgPfdR/KBQqphrUYYnUHgIXkJs1gBOcusfjEINp1ifRrO/YgdSOXmB2DFPO+ZrG2r3cIr6v6cLTsqSR7imOC8dA5zEbiiMrYFbu6rS2H60Lydf47AX1L7CCpBhS/s3LI1g9AVymcMBMAnaTrWo5tbNAzk68LstT4RYdrxjsrSazd3F5Z0mSTt1rZsyACgd0gCeoJQqjMtCLbs37Imoqz+pW9VhoeE938ue0M9QBjOUnxG1xpNJQp4VmVRJR8+Tn9o8sQgZncN8bXGWzuLL9C/0wUckykoaasvKxJDOVQ7ryItyXeu3Hk5fuuFkcvAeLyUkwjIunwdXZeAIo1yR+laY4G4+0raUZFi2rOoFZnniYklYkXDUJk9c7xpNjNEEhKO4riNUnKZDg0h8uVtORLjpQHxOsGfE7Rk9Erzv4Qai91IeL7TJzKx/bd9nY5iwA7VbNk6jwuUayNS0KPw/asRfn+gV3Ojv5k6kqbmeQOyZMliUezDLO9Mc3xd4RQuOKz8WzPuNlluiqCvcapv3/YR8fsEo2bnaB3RwwXxfiHCBEIarTlEUlKdHELJjKzDUrq7K4n989WX9Visk03qduwVl5/sSr/zI9ctiYHxhvqEL25cGa+xq/nn0AOwKbcemRPWJLKC2Lab+hM0XWXHDezkvOtxIk8rOeXp9P1TSWqCk3OakZPsO3jFzCBZaXH2rRmi9LfRGTxWSV1h/kPDgAbb0s2xfTXjsBpsbYp7VdUXhh0nFy+cqtlIAQBsZ5QkMCadZo4eRZI7FBaILRad3jPEsdU1UC+3lYVhQDynwzw0d04H+DZFI5jpKzawQrqn/HSpIIBDlOiJCnrsswpYwlQtgz/0lUJ60iqukqhtzuyq1KCQruHDzZkMGRSChxxH9bZYAaW/vLMcKVNlKe5KrFdwoT9k5t+3liiVKjE1NbWPYR7XXq3hWQp5bn8NVq4/MCxUpoXnJQy871CwspZZq0j2UnndhMyRhpw3D/TtDrQupHWGfoADLaaf4U0t7NZQOUo4xeAOqhTa0PdInXDIKvPaHRv/NfJ+jWqHT/rXgJt2bDsaYHpv5TuXfqRRwcfYIKMfQegiFLZ/YxFo7HuGxBNcolmgp5O74VM+bSWX5/Dd6cdN8Az0rNwfZLpp+8NO3Cd9wF3+usasBA9OJAt6NwKSx3JFGP/AeZBBz/UCQ9RGEKTqdHWXKutRr3Z45m8+k0Jlev6IUoqF/JKVthCY1kgzx9P4RLy1ECJ+cvgSmp8QE/i0zul03psA6ot3tShmNV0k7hTeyp3c7MkUk6gxfW/YZcYBtn8IdB7ppmfZQxpNN4g+FAKlaK0iq2a0M3Xg9hN5yiIzA7ZzKG4uQeNg3O8Bro07JS0ZwVNMQswMFK71PXW3JPHssMvEMaYdxzANkbwAkRk+haQkKI1lvGSoam5vopFiL8xaawHpjg/DvK1HFAV+tsdMMORnqIvBCURNTuWTHtgHX5Q6wgof/SnpvahJkm5U0JcMGCjjGJPg+6EnLMWtV4w5k2dK/9D1Bs+EXLFWep+OiTZvIbxxhndGt/5uDcOAKzCRdh82sePA0/k7r7yAYS8rrlsdn941ML0F51m0Gg4nS4DSBWlkwRHBm07iDdi/uPpBD5sCZUs6lrhRyHZu5CwhJ5/Zfi8TIXJ5bfpnNj15+lAm73C2YaZ0RU4+lQIq3UsZrX2wdPZMjUHrYZ4AMvCynvudwA4k3iN/oY0cANcxzWsa28YDftXD4rqaq6y5aHLBniwEr0DCfkA/j6tI+Genn3IwfLoNJ2hQpSNO/k2YJlHDdr+Lxuj2eag78FBiDSDvAgIFdk1w78FUSKJ8r6SmxbLx4zhNGBLgra4a9st1qjs4Fdjbs/3msGfCA3m3sJihI43hYRazjuA7tMHAVjchGBqOG/irmselufI9cBDS4ioDSQNyhrSthrLdC/EfjYMGxFP0pPgQHenHzYalKsIR/yZ5eBp/fIeaJA+/PoBD/Qt/EYmGCkR5miauDIGjy+Ne+DBXiROJjOefpFVURN4wsPblCVc19XozVGs9nAsIFrWcvTkgJENK8I4ATwz3uzcaYBT1hlEQEK08JvPsX+8hdn7whh8vm6ckr4ov29IM/IqPwzrXtOjALZxTKCDQaMT10OKR6TBhA6rxiqlmBi5Mpp3OY52Tt9irFXxYCJuA69+3cj5UDKCSe2hoOOC72DW0xdJB0Sk6f/3S/aSdAEflaFS6pZmeQY8xkEOykFJ4onxvWepadyI5F6e0VSa3wp7LqBildHhjoARzwTyRRgWR4PN6MvbBgTFFwXSWsxX1lyl1+8jzT1KF+/OWZrVgS7hCDbsZHwnb4naAC3Vvk6CtOaR01wQuHCMeijBIND3zL3awoEgz1JxGvonZebUNJSqTs6MjKW4r3dPQF5oRqf/LkQjRDGq5QD+uLaODtAqf+vVWGsm/cRaeox4mDwNMyMMfoHj7OxgIg0IQq0PeGuNOtn+w9+sbyGUB7OMfBDp/dTkKBObDmi3ja3c8rrkSS0FOh56EGD1z31j39PDuTj4gGawFBLmRxoLW28qhgMp5MzEXDrtp/oTGNLD1PMXkITGmKFER+fwO8VScl1tlzsctXujEjEWSOzSthev1YEooB3tjGqA6Zqb8ymwDvkFokYdDg3gIWeO+b+w9cXlbr9YUUWrtjJIDSxrnTIac+0BM1ahwgqgxCetjrTV/th7tPMYq/ldtGkZnbBMA+PfqDgcqcBPQW+jBAT5BUZfzg1gkMjLsD3+X8OXI5ojdKm+ADku9NFQ6UsNC3QrJKPyrtsrptGrPQQqSpk0XaUPlgp3JlmqLwRo25M3i/urCj5LrHuXYzNVHsEwV4Fq36zSZNdRYK3nDoacu7rOoVjMUbQln1W6nUa93y88wZyHzEhGYKYyEx1Oajw93GR2iigwhcMoPilJ8v4MnMGztong+OiKX/LBQ802+4t+YiKnQIRfhaWv1pOuGYH30IGnR0rTUdbaoKz6XY0uxuGK7cHgTeyWN4uefJODDGYclM1u9WfD+6KsL2CHgWKxbhD9Ak62Z6xk6zWUMD44qX+JOsxAM+cSZYdxF5SdNnef9kY11pgKGETn+tjBWOHo5+FGUtWTcykPbz0rA7dVUHttSdSZmLUt8QbDK66Y3AVcyo5WVG2qy/A67j+vL+Q9MhqaUjF13GSEkro2o9ImVXGlXTrWCXQQnBW/wQBQIbkW9NAtKwiCwRBoo55H48yfSMtsZZWqdUX37mPnBDo1R2YtluiOo509b4cckLswZFWsFa7jKOCQVTB09ElcGR6cVyl3kBe7EghGxXWLLc4pto4d5MaPVzmUtG1UqHMHjBCYZ6FfVJJ+3HPxjGl93se4UZUuWkQzA3XXTQe47P/Rq/NK+BSBk3fngF5wWdP0j7mM4Q1FdMDerbUVfzbwuHJaFWNkgGdtSCwj5a5bG0oDPNF2fxGOYa8NKlBlmJJptFRnpRU+RirHy58LKy7Ky+F6GSTtquMWGoKolejxGjcKuabh+NKjjkuqmgMB3IRw7vQ4t6UnchlF6RW14GNGp5YNal61UvlJvIg99+4/g5tgtU0iXgdRgGOJ7bq7CYqVLXSxhCOnd1z6hUbuMFULKPtT9469NXnjruYx2ixic6fcVaDJG7S3bRMyAUlvZ9gbufie3BQdBzVFZ4sHOoC5kpLmViPi7zcfPBR6AoU9DOq03Sg0leWzQA1o/uOBf73rxsSOLwMHk2uwuT6Kxcp7ZT1jjOObMy8Nhekbk8vYfgxh09Etmww9mORi+OPVe+xIT4RkuqKcU8zXnyhNgFkCnnepWvL/Psv/LsJIgwejdYxQk8kFVBR/Dhapf4k3awMUJVteaJNl8Dq2EH871B8UforNc1NK5w8SgdKPpS5vr7LEosbhrX9ch+Q6GWtPQcoGS/ih6CKfQTGhwcUdIsfpi09/8BUwD2U8cQvIqW2jdmuDdFBiYy3y9ZliaVeS5nFSmALh/GbDLwnhzht8nFJzzXpiLD44R4/J1/FUctCT65/uYxU3B2bh8PBmAB3B5o+bhtoGTDMX6zYEirmoy0d1x83bydB+Oci8vOOiWjTABE/8kJ1KiqXsgUcz9SwKyxLiOCEM5crvDUQqvV6HBioD/+g2FZCNXfL4qFeWArYwvHtgB6+AUEw0E3ehfaHyisp0wLIpz+FDGTQ50jStR1RRGcC1PZNwa9zPOwUC8KR6itKq0QYj/IjQTjYOE2bfyNFfjqmP7R9Z7HvU99q9E7eHzNdai0VFkmZ5jZkbiDxE9iEJ9LAb74ttoBBU/8uSJO8RQbMkI9S2j56rXIlg6g40rBz7D3wQz/UHPfExl5vcaZhlINkJGreZPS5/mtGFeG4SFI5JTHi5avBk89zu2phyox8wTziCom9QzZaIxoWSIEFc02YZ6D0RjmkZUYTsfRILmxsnkFigyqquSgivqfDT1mqU8+lZx7RwCVXhnXj2mwwz39ePFIYoW8tHHGcTurjX9tLueyYXZtQzFstFXdievt9+/ugTNTtDCJIEnggJgrFJ2NZVmNdkaP3hj8B7fzWqekWDrAH1JhG152vHv+NbYCY/RHbH0TDrfgCl0oBcP4HJGKrKdxSsLGjPt7LMnYPXKllnx3zVaAYO1UxN1RJdUpyb2f7d71PQ2N5wPdV/OKc9goo5ewgg5cMhyOcM7ZgGOoPNpKIfqHu5xkrfqsqVuU67aIPT3I2jBfUC8GgvbrWB5s5Ol/hBF66lVGUbXwkpNtYJdh5VOptQ0KIPk//eUcFa2xBpm53r/Ia3GUPLQzZDx7DdsSCWnzsn1Jm6/ZrXsMOkrf7w2n+sG7vgMzUC1C/AjhQAyEKs8eXQsKm0wlxWNGHHpGvB+9BihDyiUjmoXI67+YNlgIqanNq/eg49weH+UER+CXzjUHl+sDhbtvTGt3yvdrZaDrEpM9XdeI+xvyXdTdK/feDH0ulkHMxTeu6Cz8LR86oycfzJKH6mdKyz49RyBk+PY7OE6UzhMmfyiblW5z4YX7AYshbHQoFkJe9VVnv86duXa93UqQ/BfZflB1BPB3OxzLdY+jl2onPgf4jwq8+U/GnAKaDK037u8YgSNlPAeOBSV9fVD1OIlgTZoAoxQa07sDd3N4uTuFF9720flL+dpnx4Rq8qQUnTCj+OFGfi31ZGchqyhXNOUQYirkR0Py5eKRXeI4Zrfv+0hepy0698FEHeFt7UZmHmdBcWzA2xNEeFwSvuFKMGXEPRNtbgEtpkedSFsqPCxMkOyloyXUxKPP1fdvbtEJn6F7g61cQslrGbQHWmaZf72UfcmXmnRxaPeAz+SqMC3dKkj8zu6Y1F3fgN3lN2TkKRdN4y5HNLBAxUlaaqGJnJkC96LnmpIl38zaGNelZFsGogXKg56xerLcncIiwVWHVgHh45CAvcIOJ/TSByZt2UIyOR3EhOaIQmB0CMJ2rSMWBEhwPS+j5HJg0Ym6gsiWouEna7kC1ah+E9JS53e1CGKT/l2mev/jI7x/DgGoQQkV0k2ZAVhV+HpW6zIEu0xthbaZgL/areUSiLIhEDegF9mL4qczLJJnuQHEWpclYp6JrkC+gBz8wz0awRkqTSt9zPXvVes7MW1S73mkp3KRSahgSSaudNzWRPjY/5R0lcsQ4kMyLznMFBdEqdknP4QRRaydJAwxuQ5jW/0E0hjxzc4ZC5pxuqBDurM+kN3agtuFcfR89xHvgYGfyvHROgkeg9/lLWzt3hMdYuRU3r5NTlbioP6a3L2a+NzkZSQULDx3HRNtthFnmdoZL1iEUjAK7wGlFoNImCOxBBKiq0rGQgfTYwyk3VU2TPreXWLg2ytibf+3ju/Evgfe70Fy1/t1iGMikCS0W/QH3mnIsiDTCklvPrV7tzs+iq3jyMKyRriBvOm4vqfe1UC5lz0r4d2tF+8yK44s4O6QN9jTSnsWz+6WjtcdFOrYYpIXigBBfOLXylgvLbQCgl9jIUYV+VuMcai2offoSImjfl+JhSRVwBQeUlAFFM8L368VzqNt/K3Pn+2k5aZqThBvucVHlxrsiHCc8ljzWZmrYGOrGRQfh+cVTFF5QLQ8EH3rhWhHX0iUzY4DCBJyhGpXKGYcwl3nATd7yH1ge6RHl0tDdugJ+pt/W+ng+ioyxIawio40rMqjHqExxouO/NCxLHMZaAX+V/AMqaclby81j+wf4o44i8pcOM6Hg1I6L5qYgIUHOKXurgUQjYYFAHxjhivKfDBUoW4ibASDJVa4qxavWJ/QZ7xOq8r35ge21r1i+wuGR8/B8t+QG1Zbo7SH9WZ/vIqiL3hb0WVlyn0/1upgpQSMvxNB7rHpoDq+oLa4Ff6HxoHHdXctukGTimHgvNNP4M2NjmVrPe7w8Cu9uw2BpyIeUBq6E78GpQT06VgeZriTtm7zGIpCa6cjbJPopcgwjL+KcSCVJIZbY15afmqonvZMrajRYScGSo+MvzwqPsGzukLV91nCszOYH7h4kr0KA5xDQIuZ9t9v7PCRdxJhrg/Uzz8gaIhCoY/MFi7QEESTHDCD0blhPOAWHpjS76gYmch4B5lqLb5spVUAWjCFIdFUpukWBnLYHJEMudcM0NrSk3lbPJpfD9tcy7p+EK7LdRWcS9CrJBYq8izt38QlpV6W3S8ubeje57O9VZeg2RVmWnfY/ccTKIF2dSk0ubzwOHerClWqV2sdMH5JFUA8b66zOOe5u6MRlFa/xGbx/ZpVLedPzGGJOtku5zkE1o55CA5btogSBc4eEkKKSA+QWcXBsXtmLTQOtcf6be/6XXo0SalrQTHoAfgSkYevp9QGpcMdh72hfxIZ0CrewhZA9uIZJirai8cMIxsZV6PZG7QXIX7eK0MhKnrd54I09F28VC0ZsauhlhOEIAFPeDxC86ZKOj2kudyqPMP4iSljrN0uVKn0S8XhFQQkL8ZLbi5nN395zIjiaHTxf9UnjxcoOIndyfZLTDHPEX/7ERoRZjWvQEcawxuMDa8rJOVvqPJk/lGu0i2YHZIAujpsz0Ih93Wtdxr9LP4OxzL47zTilit7vfHD69q2mTysnxOUFc+uvu/nYOxrPbyXReU1EojWntdn/j1sUfAmYj6GcESUa07gPIj8998XX9CESwMtlOzx51Fp7agG40+Z8XTJ3X+11w4OTVvaSiiAc2o6VaIOOaTmRigG24rx1lPY0T5ncHhNqKZ+kzRTlXml4UtHLxBqidio2kWH2XNHRCRJCum+oiegnbWzuW+Rcx4q9EsXA28oSMhON8N3zmXf7z4CHN9iT+zSmm3L4w8cS/wsAhPlUJcWNUgJTC5NQ1gkPeB+NRYlG2Ti58vFPOytuAs9KaV+3gu5jkZ6TrqZ9eO8sq+PhMqvxU2h4Wg9gFZIGGb1antNCw5Wp3QAa9IXbW9RISvxtExSDdljV9LZ3YLE74iciLRktPJCxUvX+h3P+fKxYpfnqgrp3tBOAYzT/4m4qRoXwXhUmkIVX84VtfdBEq4UoNZ+HxPIAJdBORdVnfydUfs30o/hz9/hTK3q3vlsa2IvVxSfbIhD9uFHcX90wLFhZdfkxvAhtdskpdfH048Eisl+2ezBmKHzGSu5XcPGBBZHn9wskwu8SSQJsZALIe6XgBU7Bhq4ytqxlDYYLn1RWp8P+16ewox87hEp5YOSC5Fk3uNA7c9C6Ec/8Ob8qLCsIqYBt7qaMtySntD+wp+3JnlmoXd/tC3T6hgNrgjdNx/wJofsp+wJCe9cXM3Fu4A7Ai9eSWMNcG4ezn8nE/IcmmLq5kg+4NCI/IshNGV/QRZbDUgTOyNlB6VFBstCLn6tjjpbf15/nhcJkr1UKBTDaIgo5Mw/0FMAHONsnSBFIRx4glqYTynRTMmKyT9aRUn7cX1P96tLClZjUbacdrzw0Ii+m9+ksWARvr8W/SWpXVdqegY6xyC7azRVwPmsjA5c/P4+ecljZaNXwopS+bYu+0Q1rOsDyAZCqmeMTDiQrq/RpR5gxEWIIzNk+N7YKkXIiUHkFA73i0W8hQ+iO2pxalxfw6pnq+GgGABy5MCzDlPxlY8++LGR4tyV2l3pSEsmXT0Cq7MetbapoHFsedGTqNekznKHas/hauhpQfMeTN+UHRuLe71JhqgS0FuxOsXM95UynF9C6/MXY+qiFcbBQ1oW7fS07dRiH8S69IiKdA2nAErCivQYS7SSk+/84Oyz9LtejJBoagKY5W/oDdOT73VuDtQQav+JCMqJ53aA8M08yn9dFyzHJh9zYsOJ9C/4cMjOohKMX6IK5JR0beGEnO9pIWOEHiIOIUxA/CNNnxo8UYVKaJOtTH0b8YEzwIJJC4QCk3NEV6cze/7PLczA8c6zZC9U3FGND/1YDmhC/p5tlwU3m4VCJ3zQtX+zGg2Xq9T4FkvBES/rS0elTJ9K/Jd1q1SbOlfY1R1Khq+v3YqXF4f6HT3HeQodOKdRLQaB83RLXT3cHkOG0a1qOvml/1SUFGtggaOa0imeAGbRyjF+yNvV8AJixAcBCQzs6IWsPZtvRWhecYuvPCjkuiHlvLcyV7b0pKIpLi1AGHPh5dhwIJE5x1j5YIMV0slDhv+X71cHxaNpCTRo3KFJLhyNUjpHXupr0ihLtK/GgJayyPXzymZrYCRB9YYNx8ruzRJWQJwUTQNQb0gXrdZRncw83p2yBzrnG9pOF9l8ubDADf+INrktaMQklHDar1ja332RuJEowadRMfAAtIS03LP9SWCdqLsCQ5IerV9oaqKTn2rJT1qbxLdBGeJqfrgVaTUs8yX3N1db1NNExwcDjIpKCgpqrZ06D+iYyr7CznyeW/hFJJdVhQj7vPDVfjyx/tsLCFbF8wAQ2Mzw+ECEDhQ1NIY8j6X+f9XKrSJM83utWOq6V/HGsmTj31vlI9TQ30kzXeqmI9G5yD2thoJqctUNTn4h9H7P6hDslOAKwQV9Q4cIUthdVR86+z/L3nm7FR0UqXLNbpYYwnzWMWl2CIJ/ZSAjpkflpfh5wtM+Ar1Cj2xvvlWBdQVGba6pDTTF27cDWYA4jHbI+Os/L62jQEDLbQ9fB3EI+CyqpfZUBU7SDTuuFLZCh4MQGxKOF19bise0tJcm6qJaq+2AZJf2yZD4neFY1ie4o3lwbhGQITAUDITPv3fi2IEMkvNduVQeHEfjvHwr7U9W8xbVSozSv8DEBNJ5s+no7WGJwVbdQ1gGyIzVSg9pFINk568rfqryF56vYuRImrawdF+esmhRb7e75TWa351XQXObKD78+xBDj71WOujn7QqrKd8144YkYdkLl7XAB2xxyDiDMikppPAmV4kuimneabPOSPAmGiVKnxgrmGxflL2XjwyShspa+gNkiz1r7HtaQ3FvWLXTIXdMPlz1Tre75WwLR2D+qzjRfkrD+Ph841SPK/XwWaCJvgVZBAJsw+QRjonO7zmfTdQnucqfYShwNfuHfQKHeU2uOuCgPVOxc4LFmUxrSjBIM44P25dBux/ZqgVfxemH9h2L7A6/KmKBQzPzMOJSnNgJmwKdlgzi31bQC8ntcJICe37I5dW7OwUeZEyf/PtNNtWJArCSqBymY1dF44mBub5H3+c5ocTfBz7ZJgmKRytoeLscZMo/2gFAq29irCQ1svYpm7OziU+8f7PtBpQKEpQaFEYKduTL9zQCkfRbnWaKQMl/zXRkJOH/Yz4BrU9pgw51NL4u0o9TUimJ1gPBt99Ccu8n4lXumlqfMJBXL79cvlIsJpmiqcKNtTbnUb9iVdWOyIyv4Mw95G7wz+DHLFnYVaEF2gyzs0rfLtwCqxR57Vk+Ym5QtT4ZcJ4hn0Nj0jR6Bwe7xh7fJ17R7hu+DuNqGshWsKRMBGBPH9fyS4CKGNHaUS1HlV+gwVTLEbpK67nEVBzlBLmZ6OF1RnKB41VSMQk6l/vf2z7C/TU3YNgtX/nRmiMCcV6+TxnVRPP6oP/6LhhE0zVGJRZDPiquIUVTE3GH/B3/JKNZLbt2g6DH0pjZhG9Q/DRjS7iPmxnz8iGWNmHTPxJw2/nJZSOX15ZoXStdMOTDXupRGbSzN28/1lfJtLClYgtIEi7KpVOrhShq+7Z7JATfmxvdOReJ+Dt1blzvWV8Qc6faSw4VYtUVMNHTbP4P/i2nxvXTE/pEibDaWyoXUJQkPrqlZJzKClC9qfPnkBLG5L38gR/Tdjq9v7fkZO77o0jSMSXkkiSoIxKEy5OjObLV54cw8K6XjW+oOPPGBj38hCi3vipQQrYHWWd4nLEFxzuoLd+BjAXEW64bKi4RmNPusdSfJ+Z3YT56NdRks4vjfhVGfhsUZLNLt8ijU7nioyVaExPGCiQpD18uawsrgTnsZljLmRb4tnFyTFdHgbYA0d2CJLG2dtE3pPHPuualSREq1Q59YJipRfWVNo/Fun9pwVu8TC1XNe10RGdmWzHNbdCZN3EdcZGMDWilBoPWRNMazONC/8a964zkSRCA0f1H8MZ+sttOYpjzWDHutS1t3soC6jIeifRmU2MwYuQyeJB9Xode76w6XzSn86bs/Lx76NPZzI1/PRZTfdzXG6CVyzAmKaO2c63LHDxvMHInxQf2XqDFU1I0wLOmQZ0NlKSMcSIAmushK9T3bbuy59YLn1cgkHrEWlRV7RTapmNtDjJKZ3kMROGQpE+wgCPAmdeqL1CT1xxBKPhiw/5LglcYe357yUL0zAd7N7I+6/UGSRlNrO0aiq8m0EQQyNsWIYYO8cO9refCAenPF95noQSIt2MZZ6eb66y84lcw/E6aBaC6CjwUoIqrD4zAc8Dq3qdKvIZUrmbt9d9PcdKzMRDWCF2YVhRf4bT7gA47DV0e9zCynLMbHXgm/sHnfd2EQi2oGb0zORyOf9ghy6QgEZ7gi6lI+qdXIe52sWRtzA618n53ZfIxedH8sDy9/LIWdI7k1oVVf9aUdz8amGDtpVo6JeOPgLaRiDdvSYPVq9+zpPeFWOA5068YU7yY3r1+ivV4A/f7hRjQKRIZLn18NmofVhwSiaXg9UjOsGH1nrHlJORcPeQtaN6FekJTAi0OsGpNem3Bab4jKKdFD8vpHam3mvA35a5kiXXWXgSDC2tNnajG6Q3V6HvoelklW3Lv4uBx9dR1sfHh2qCzg/3KbVStH0dpFq2MaK2I4Z5jFuuPXfxgPYlGoqHjHarG09fKRBQo2c7mM+jQ+kHpV9lL90cNjGPuIlkPNchRY2Am13FWFeQfy7BmTkTxzQW+VeqkXYxFSOXJy+S9lDsMqYcD8Fn9BQJOqD0knE51NG4+hx0ObR4j+o5Ta26L0C5AXF4uwu2p940Vur34k1Q741S8GxICnWK92qxzX8jDDZkZEGz+JribQEHqSd8pArxT9oDM28VVJAHYTBGoo9EONXKPq+3Pk1UjCI9PCzRGDA/t0TedGMdcuhE70ZoqWtGaHZqEcLp3kC+WHldclRg2RM9BuntAbU1n2DPqy+Nd+4sdVmfbKrWWJObOKZDEHptnM4ef8QkJFuoGjH0U9ReYMHsdHOxyrgIDkzyix5lL0spz4vKlakFGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"1255c473-74eb-4d35-851a-7fc07f7f9dd1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWp5Tvc6yptMAkzMHEuZWD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RKQTi1y1P59ihJNUb4azea","name":"Bash","input":{"command":"ls /tmp/loop-bench-732u9ti4","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"c2a19271-ab70-45e2-9368-9472efd434be"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01RKQTi1y1P59ihJNUb4azea","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"a78d0d2d-8aa5-4cf5-83a4-7054914cc87d","timestamp":"2026-04-04T09:39:06.643Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01PmiwxJZJDnsceVMur8fxAy","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LfD6b4zZVZs6RNJDMF79Ey","name":"Read","input":{"file_path":"/tmp/loop-bench-732u9ti4/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8412,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":8412,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"dbf4e17f-710b-4dbf-89be-f705a99df630"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01LfD6b4zZVZs6RNJDMF79Ey","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-732u9ti4\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"3aadb13b-81cc-440f-8dd9-d7a15cc5b40e","timestamp":"2026-04-04T09:39:10.123Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-732u9ti4/package.json","content":"{\n \"name\": \"loop-bench-732u9ti4\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01WFJFpt9z2jA2jE2V2iFQyz","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good. TypeScript is already available. I need to set up the build with esbuild or just use tsc. Let me check if esbuild is available or if I should add it.\n\nActually, since `typescript` is already installed, I can use `tsc`. But `tsc` compiles individual files and doesn't bundle them. For a browser app, I need a bundler. Let me add esbuild.\n\nOr I could use the `--outfile` option with `tsc` but that still doesn't bundle multiple files. I'd need a bundler.\n\nLet me add esbuild as a dependency. \n\nI could simplify this by writing everything in a single TypeScript file and compiling it directly with tsc, avoiding bundler complexity altogether. But esbuild is cleaner and faster for this kind of project. Let me just add esbuild to the dependencies.","signature":"EqALClsIDBgCKkCWiYWntiCgEPZjrdnWtkkJC39o8yf7/kVE0PCSh4tl2CDvy+0TXtQ0H6xOnXF0HMGrrZ5Y8n0u+yPfWKgGIwpeMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxFbKCcnK8YOIPeFD0aDM2hAiKqsHPMMiZgkCIw7jLy+8Ozykoow6VB25JLJWurDS+8xobOc4KmTfei6t3N8/MW15fkLtL0E8KLn0D2KvIJ6ZflGYXmVy0PvUf6Pz3afbmauiq9pL9EP50xdeSSM6UEBR2yzqoj1KsVIyPpgGzabKaMJClnMiblN7AX7ianz9TOTBx/guiNGWcA2HQJBQK31VwgwNJofzjhOq8U1I+xbZrRtPWLBbj/5Ii3InWTdel4wEpARoRfIVJoRauyMmZTWrKubVFU4rRbLRuhK7q2NmjEKFd16jdElF/sf2Wg69JBMWvYkB40w7MVfpagsuJoE3TcS0J2/eapsy6J0sEe3t8evnQmZ/XJIgEMdjATBsdZfc+CoGFeaykmUzP5fjTlYHQus/vXgwOTTQmnDJFOyF0N1Ps8Y1WQoNXE9xOpBXgK1yIr7+wtWAUIwz4ZuJSQ3PFqecPChiUcylfWn6YsRm0+fkE2WNKpaewl5sGFgAkv4Tw6SA7RYZ1h1Dz7mUzfrTU/LwaoXo72/r0wDc32kgQvmaWb+3A6j2WUNehEV9PLN7Ae/xXwAnmy0uEOaUu0Ftcm5r3p3CAxtRjmRPQQdiE6rPcXQAeiWKxZ7I1jUH8+udwbSKlH5Rogqu726nRyzYB1zRszehSBkqA41ZRMQasFBl6hJYeKoAYhT7CvtIlgonFQAQRTRsllMPtMILG9oHnRuijK3IA+uj0J4UCvFNyhkIMV0ysI24XeXDSNW8xbqopUdK0WJrjb51QrPYsLItxHorQP7FkcPmDZsFYrC4DvFXLA/+MvbVgSmjxnAhjX6+7qn7xezau5lHrJNMhcAtG0Zzl68eVRkHhHiGS+6uVV/t+/Z9BmjQnoWyi465DUWI5pk7KlBOzYmgpt/NMt766e6StliejnDYNg/H/v1o/x/MHZKf7DorTH/YqskKw9NDBX4M/3mGa8P7qYPz8WYcSYM0WdXtrxKNbMWc8PfJCygTnoE9UOT9gz6b1ia9qLP0lr9PQ+mKS3toNrrntbgpSnPPv3yNBGrTLjafuKqAOSFpIxre6G2i+c++AEQsJtUCNbtZKApSwQi7XyadpsPg7/26jebHFJEn7rEC0CUbahE2sNOmJAEQwpRLtBttngv4J8I95qDErBE6b1JjA2iQ+Y/kBpWSw8rEPVyMKsGzmRGQn8A3p7JPnDtdUgC3i4Yuw6XYmQm1kgO2Qca0YGAGR6igfqQqSg3f2Q2Vy0/saTLI4VogothVi50ucEGmBqG5f1GCV4FWvzUX3HEIx38rZljgasRafmTMWj1KV3QH0Vk+PzMur5zrR4+cwhT96Ooz8oALidfadw5Awcu0qXT6H1pSHXiNSBVRL5zF3k+WERxiLqQ6uABPxjUyu4JFjLuQLyxEggWkXdAjJsFkxUZ03hFEkknvvq3pwGK33bPddwkcv0s3PQLD/n7Fs9bNshXjOZk7n/0mpzD5K2WPfg4paaniVf1uv6PS94V8JEeCWo9HhYpwCzZmj9GWVYp/ypfpWMLiEsxThLas4eKbtCWQLdflGIZaeqUjn6ZdNo0aCwZnmt/0KsOZljdvvhoX94pDP/4qpLuUZp+615ADp9eVX3Radk8MOfo+IUs9g5SeSDcaEv42vDWmTvDqJ2+96Yrx6VF5Ihpz+I58wz6NkjERQ4LfYlh8AYACDXAOTWOPTzAlfo2uM+kbt0Gz88DX10edsmyVCraUnOWQRUihBZaffFrWFWKE/s2p9wnauK/uHFontcvlk2Nny2yKSiQqYLGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8725,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":8725,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"3e94bae3-5f01-4e3b-aa28-f9073b2f6ad5"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01WFJFpt9z2jA2jE2V2iFQyz","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01E13JFCWJfum2iBb3fC7R59","name":"Bash","input":{"command":"ls node_modules | head -20","description":"Check available node modules"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8725,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":8725,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"bfe1c489-bda8-4ce0-8129-ea1fc1bfa7bc"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01E13JFCWJfum2iBb3fC7R59","type":"tool_result","content":"acorn\nacorn-jsx\najv\nbalanced-match\nbrace-expansion\ncross-spawn\ndebug\ndeep-is\nescape-string-regexp\n@eslint\neslint\n@eslint-community\neslint-scope\neslint-visitor-keys\nespree\nesquery\nesrecurse\nestraverse\nesutils\nfast-deep-equal","is_error":false}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"90a0f2b8-8db2-4834-9ac0-a8156fe1d2b7","timestamp":"2026-04-04T09:39:18.788Z","tool_use_result":{"stdout":"acorn\nacorn-jsx\najv\nbalanced-match\nbrace-expansion\ncross-spawn\ndebug\ndeep-is\nescape-string-regexp\n@eslint\neslint\n@eslint-community\neslint-scope\neslint-visitor-keys\nespree\nesquery\nesrecurse\nestraverse\nesutils\nfast-deep-equal","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01183HAqarRx65gTdYKWjiv1","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01EppeAbJikJMjn9c4FF8EBZ","name":"Bash","input":{"command":"npm install --save-dev esbuild 2>&1 | tail -5","description":"Install esbuild bundler"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":519,"cache_read_input_tokens":13452,"cache_creation":{"ephemeral_5m_input_tokens":519,"ephemeral_1h_input_tokens":0},"output_tokens":58,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"79e1e5c6-b8f0-4521-b070-fb45c0efd5b8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01EppeAbJikJMjn9c4FF8EBZ","type":"tool_result","content":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","is_error":false}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"f5412ffb-f1d1-43be-a409-c064e983f25f","timestamp":"2026-04-04T09:39:23.857Z","tool_use_result":{"stdout":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EeBSVZnFWeQ6KELcJhiU7k","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me build the full Tetris game. I'll create a well-structured multi-file TypeScript project:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":126,"cache_read_input_tokens":13971,"cache_creation":{"ephemeral_5m_input_tokens":126,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"25ac167e-78a7-445a-b328-99e4fd80039c"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EeBSVZnFWeQ6KELcJhiU7k","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01J33jhhoobPK3JTvPkFyZVk","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-732u9ti4/src","description":"Create src directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":126,"cache_read_input_tokens":13971,"cache_creation":{"ephemeral_5m_input_tokens":126,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"28d8e858-4c7b-45c3-9b7f-156da9255171"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01J33jhhoobPK3JTvPkFyZVk","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"bf48ff9d-9fec-4c79-b1bf-abf2350c64b9","timestamp":"2026-04-04T09:39:27.878Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01UAp9bQdGTLLxxaZhYd7JUo","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01X1oFDTdBUfFYoR8xk48ULn","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/types.ts","old_string":"","new_string":"export type TetrominoType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L';\n\nexport type Cell = TetrominoType | null;\n\nexport type Matrix = number[][];\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport interface Piece {\n type: TetrominoType;\n matrix: Matrix;\n pos: Position;\n rotation: number; // 0 | 1 | 2 | 3\n}\n\nexport interface GameStats {\n score: number;\n lines: number;\n level: number;\n}\n\nexport type GamePhase = 'idle' | 'playing' | 'paused' | 'gameover';\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":131,"cache_read_input_tokens":14097,"cache_creation":{"ephemeral_5m_input_tokens":131,"ephemeral_1h_input_tokens":0},"output_tokens":53,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"8c86e036-68a8-4aa0-bdf7-d7d3bd3d7348"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01X1oFDTdBUfFYoR8xk48ULn","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/types.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"94e7b4a9-677c-4b57-be51-6fbd57845e9c","timestamp":"2026-04-04T09:39:37.944Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/types.ts","oldString":"","newString":"export type TetrominoType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L';\n\nexport type Cell = TetrominoType | null;\n\nexport type Matrix = number[][];\n\nexport interface Position {\n x: number;\n y: number;\n}\n\nexport interface Piece {\n type: TetrominoType;\n matrix: Matrix;\n pos: Position;\n rotation: number; // 0 | 1 | 2 | 3\n}\n\nexport interface GameStats {\n score: number;\n lines: number;\n level: number;\n}\n\nexport type GamePhase = 'idle' | 'playing' | 'paused' | 'gameover';\n","originalFile":"","structuredPatch":[{"oldStart":1,"oldLines":0,"newStart":1,"newLines":25,"lines":["+export type TetrominoType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L';","+","+export type Cell = TetrominoType | null;","+","+export type Matrix = number[][];","+","+export interface Position {","+ x: number;","+ y: number;","+}","+","+export interface Piece {","+ type: TetrominoType;","+ matrix: Matrix;","+ pos: Position;","+ rotation: number; // 0 | 1 | 2 | 3","+}","+","+export interface GameStats {","+ score: number;","+ lines: number;","+ level: number;","+}","+","+export type GamePhase = 'idle' | 'playing' | 'paused' | 'gameover';"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01JyWibU7K3v7THgnzcgQnDN","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017BY85n83BGk7U6RqjK7DkM","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/constants.ts","old_string":"","new_string":"export const COLS = 10;\nexport const ROWS = 20;\nexport const BLOCK_SIZE = 30;\nexport const PREVIEW_BLOCK_SIZE = 24;\n\n// Tetromino colors (index 0 = empty)\nexport const COLORS: readonly string[] = [\n 'transparent', // 0: empty\n '#00F0F0', // 1: I — cyan\n '#F0F000', // 2: O — yellow\n '#A000F0', // 3: T — purple\n '#00F000', // 4: S — green\n '#F00000', // 5: Z — red\n '#0000F0', // 6: J — blue\n '#F0A000', // 7: L — orange\n];\n\nexport const TYPE_TO_ID: Record<string, number> = {\n I: 1, O: 2, T: 3, S: 4, Z: 5, J: 6, L: 7,\n};\n\n// Points awarded per line clear at level 1 (multiply by level)\nexport const LINE_SCORES: readonly number[] = [0, 100, 300, 500, 800];\n\n// Lines needed per level\nexport const LINES_PER_LEVEL = 10;\n\n// Frames per gravity drop at each level (60 fps reference)\nexport const GRAVITY_FRAMES: readonly number[] = [\n 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 1–10\n 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, // levels 11–20\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, // levels 21–30\n];\n\nexport const LOCK_DELAY_MS = 500;\nexport const MAX_LOCK_MOVES = 15;\n\n// DAS (Delayed Auto Shift) settings\nexport const DAS_DELAY_MS = 167; // delay before auto-repeat\nexport const DAS_REPEAT_MS = 33; // repeat interval (~30 Hz)\n\n// SRS wall kick data for JLSTZ pieces\n// Each entry: [dx, dy] in screen coords (y increases downward)\n// Key format: \"fromRotation->toRotation\"\nexport const JLSTZ_KICKS: Record<string, [number, number][]> = {\n '0->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],\n '1->0': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],\n '1->2': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],\n '2->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],\n '2->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],\n '3->2': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],\n '3->0': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],\n '0->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],\n};\n\n// SRS wall kick data for I piece\nexport const I_KICKS: Record<string, [number, number][]> = {\n '0->1': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],\n '1->0': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],\n '1->2': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],\n '2->1': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],\n '2->3': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],\n '3->2': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],\n '3->0': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],\n '0->3': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],\n};\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":348,"cache_read_input_tokens":14228,"cache_creation":{"ephemeral_5m_input_tokens":348,"ephemeral_1h_input_tokens":0},"output_tokens":62,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"b8fa0596-a2b8-4f01-a6e5-1a4a6dabcc96"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017BY85n83BGk7U6RqjK7DkM","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/constants.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"e91da6fb-6412-4dec-b23e-b6dbd5fe9bbe","timestamp":"2026-04-04T09:39:57.115Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/constants.ts","oldString":"","newString":"export const COLS = 10;\nexport const ROWS = 20;\nexport const BLOCK_SIZE = 30;\nexport const PREVIEW_BLOCK_SIZE = 24;\n\n// Tetromino colors (index 0 = empty)\nexport const COLORS: readonly string[] = [\n 'transparent', // 0: empty\n '#00F0F0', // 1: I — cyan\n '#F0F000', // 2: O — yellow\n '#A000F0', // 3: T — purple\n '#00F000', // 4: S — green\n '#F00000', // 5: Z — red\n '#0000F0', // 6: J — blue\n '#F0A000', // 7: L — orange\n];\n\nexport const TYPE_TO_ID: Record<string, number> = {\n I: 1, O: 2, T: 3, S: 4, Z: 5, J: 6, L: 7,\n};\n\n// Points awarded per line clear at level 1 (multiply by level)\nexport const LINE_SCORES: readonly number[] = [0, 100, 300, 500, 800];\n\n// Lines needed per level\nexport const LINES_PER_LEVEL = 10;\n\n// Frames per gravity drop at each level (60 fps reference)\nexport const GRAVITY_FRAMES: readonly number[] = [\n 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 1–10\n 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, // levels 11–20\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, // levels 21–30\n];\n\nexport const LOCK_DELAY_MS = 500;\nexport const MAX_LOCK_MOVES = 15;\n\n// DAS (Delayed Auto Shift) settings\nexport const DAS_DELAY_MS = 167; // delay before auto-repeat\nexport const DAS_REPEAT_MS = 33; // repeat interval (~30 Hz)\n\n// SRS wall kick data for JLSTZ pieces\n// Each entry: [dx, dy] in screen coords (y increases downward)\n// Key format: \"fromRotation->toRotation\"\nexport const JLSTZ_KICKS: Record<string, [number, number][]> = {\n '0->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],\n '1->0': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],\n '1->2': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],\n '2->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],\n '2->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],\n '3->2': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],\n '3->0': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],\n '0->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],\n};\n\n// SRS wall kick data for I piece\nexport const I_KICKS: Record<string, [number, number][]> = {\n '0->1': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],\n '1->0': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],\n '1->2': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],\n '2->1': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],\n '2->3': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],\n '3->2': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],\n '3->0': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],\n '0->3': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],\n};\n","originalFile":"","structuredPatch":[{"oldStart":1,"oldLines":0,"newStart":1,"newLines":66,"lines":["+export const COLS = 10;","+export const ROWS = 20;","+export const BLOCK_SIZE = 30;","+export const PREVIEW_BLOCK_SIZE = 24;","+","+// Tetromino colors (index 0 = empty)","+export const COLORS: readonly string[] = [","+ 'transparent', // 0: empty","+ '#00F0F0', // 1: I — cyan","+ '#F0F000', // 2: O — yellow","+ '#A000F0', // 3: T — purple","+ '#00F000', // 4: S — green","+ '#F00000', // 5: Z — red","+ '#0000F0', // 6: J — blue","+ '#F0A000', // 7: L — orange","+];","+","+export const TYPE_TO_ID: Record<string, number> = {","+ I: 1, O: 2, T: 3, S: 4, Z: 5, J: 6, L: 7,","+};","+","+// Points awarded per line clear at level 1 (multiply by level)","+export const LINE_SCORES: readonly number[] = [0, 100, 300, 500, 800];","+","+// Lines needed per level","+export const LINES_PER_LEVEL = 10;","+","+// Frames per gravity drop at each level (60 fps reference)","+export const GRAVITY_FRAMES: readonly number[] = [","+ 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 1–10","+ 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, // levels 11–20","+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, // levels 21–30","+];","+","+export const LOCK_DELAY_MS = 500;","+export const MAX_LOCK_MOVES = 15;","+","+// DAS (Delayed Auto Shift) settings","+export const DAS_DELAY_MS = 167; // delay before auto-repeat","+export const DAS_REPEAT_MS = 33; // repeat interval (~30 Hz)","+","+// SRS wall kick data for JLSTZ pieces","+// Each entry: [dx, dy] in screen coords (y increases downward)","+// Key format: \"fromRotation->toRotation\"","+export const JLSTZ_KICKS: Record<string, [number, number][]> = {","+ '0->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],","+ '1->0': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],","+ '1->2': [[ 0, 0], [ 1, 0], [ 1,-1], [ 0, 2], [ 1, 2]],","+ '2->1': [[ 0, 0], [-1, 0], [-1, 1], [ 0,-2], [-1,-2]],","+ '2->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],","+ '3->2': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],","+ '3->0': [[ 0, 0], [-1, 0], [-1,-1], [ 0, 2], [-1, 2]],","+ '0->3': [[ 0, 0], [ 1, 0], [ 1, 1], [ 0,-2], [ 1,-2]],","+};","+","+// SRS wall kick data for I piece","+export const I_KICKS: Record<string, [number, number][]> = {","+ '0->1': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],","+ '1->0': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],","+ '1->2': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],","+ '2->1': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],","+ '2->3': [[ 0, 0], [ 2, 0], [-1, 0], [ 2, 1], [-1,-2]],","+ '3->2': [[ 0, 0], [-2, 0], [ 1, 0], [-2,-1], [ 1, 2]],","+ '3->0': [[ 0, 0], [ 1, 0], [-2, 0], [ 1,-2], [-2, 1]],","+ '0->3': [[ 0, 0], [-1, 0], [ 2, 0], [-1, 2], [ 2,-1]],","+};"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_013htLLiVCRgCkiacYG2LFKG","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Nu9d3B1hTJLrjqMBKjcEQa","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/tetromino.ts","old_string":"","new_string":"import { Matrix, Piece, Position, TetrominoType } from './types';\nimport { COLS, I_KICKS, JLSTZ_KICKS, TYPE_TO_ID } from './constants';\n\n// Canonical rotation state 0 matrices for each piece type\nconst PIECE_MATRICES: Record<TetrominoType, Matrix> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [0, 1, 1, 0],\n [0, 1, 1, 0],\n [0, 0, 0, 0],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n/** Rotate a matrix 90° clockwise */\nexport function rotateMatrixCW(matrix: Matrix): Matrix {\n const N = matrix.length;\n const M = matrix[0].length;\n const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < M; c++) {\n result[c][N - 1 - r] = matrix[r][c];\n }\n }\n return result;\n}\n\n/** Rotate a matrix 90° counter-clockwise */\nexport function rotateMatrixCCW(matrix: Matrix): Matrix {\n const N = matrix.length;\n const M = matrix[0].length;\n const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < M; c++) {\n result[M - 1 - c][r] = matrix[r][c];\n }\n }\n return result;\n}\n\n/** Build the rotation-state matrix for a piece at a given rotation (0–3) */\nexport function buildMatrix(type: TetrominoType, rotation: number): Matrix {\n let mat = PIECE_MATRICES[type].map(row => [...row]);\n for (let i = 0; i < (rotation % 4 + 4) % 4; i++) {\n mat = rotateMatrixCW(mat);\n }\n return mat;\n}\n\n/** Create a new piece at its spawn position */\nexport function createPiece(type: TetrominoType): Piece {\n const matrix = buildMatrix(type, 0);\n const spawnX = Math.floor((COLS - matrix[0].length) / 2);\n // Spawn above visible field (y = -1 for pieces that appear at top)\n const spawnY = type === 'I' ? -1 : 0;\n return { type, matrix, pos: { x: spawnX, y: spawnY }, rotation: 0 };\n}\n\n/**\n * Try to rotate a piece clockwise or counter-clockwise.\n * Returns the new Piece if a valid position is found, or null on failure.\n */\nexport function tryRotate(\n piece: Piece,\n direction: 'CW' | 'CCW',\n board: number[][]\n): Piece | null {\n const newRotation = direction === 'CW'\n ? (piece.rotation + 1) % 4\n : (piece.rotation + 3) % 4;\n\n const newMatrix = direction === 'CW'\n ? rotateMatrixCW(piece.matrix)\n : rotateMatrixCCW(piece.matrix);\n\n const kickKey = `${piece.rotation}->${newRotation}`;\n const kickTable = piece.type === 'I' ? I_KICKS : JLSTZ_KICKS;\n const kicks = piece.type === 'O' ? [[0, 0]] : (kickTable[kickKey] ?? [[0, 0]]);\n\n for (const [dx, dy] of kicks) {\n const testPos: Position = { x: piece.pos.x + dx, y: piece.pos.y + dy };\n if (!hasCollision(newMatrix, testPos, board)) {\n return { ...piece, matrix: newMatrix, pos: testPos, rotation: newRotation };\n }\n }\n return null; // rotation failed\n}\n\n/** Check if a matrix at a given position collides with the board or walls */\nexport function hasCollision(matrix: Matrix, pos: Position, board: number[][]): boolean {\n for (let r = 0; r < matrix.length; r++) {\n for (let c = 0; c < matrix[r].length; c++) {\n if (!matrix[r][c]) continue;\n const boardX = pos.x + c;\n const boardY = pos.y + r;\n if (boardX < 0 || boardX >= COLS) return true;\n if (boardY >= board.length) return true;\n if (boardY >= 0 && board[boardY][boardX]) return true;\n }\n }\n return false;\n}\n\n/** Get the filled cell value for a tetromino type */\nexport function typeToId(type: TetrominoType): number {\n return TYPE_TO_ID[type];\n}\n\n/** Return a randomly chosen tetromino type */\nexport function randomType(): TetrominoType {\n const types: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];\n return types[Math.floor(Math.random() * types.length)];\n}\n\n/** 7-bag randomiser: returns a shuffled bag of all 7 pieces */\nexport function newBag(): TetrominoType[] {\n const bag: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n return bag;\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1466,"cache_read_input_tokens":14576,"cache_creation":{"ephemeral_5m_input_tokens":1466,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"92f2bdf0-1ef1-48e0-a6c2-c0330de79c5d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Nu9d3B1hTJLrjqMBKjcEQa","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/tetromino.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"5574c45e-b685-436f-bc1e-a8bfd2962fbf","timestamp":"2026-04-04T09:40:18.067Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/tetromino.ts","oldString":"","newString":"import { Matrix, Piece, Position, TetrominoType } from './types';\nimport { COLS, I_KICKS, JLSTZ_KICKS, TYPE_TO_ID } from './constants';\n\n// Canonical rotation state 0 matrices for each piece type\nconst PIECE_MATRICES: Record<TetrominoType, Matrix> = {\n I: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n O: [\n [0, 1, 1, 0],\n [0, 1, 1, 0],\n [0, 0, 0, 0],\n ],\n T: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n S: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n Z: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n J: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n L: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n};\n\n/** Rotate a matrix 90° clockwise */\nexport function rotateMatrixCW(matrix: Matrix): Matrix {\n const N = matrix.length;\n const M = matrix[0].length;\n const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < M; c++) {\n result[c][N - 1 - r] = matrix[r][c];\n }\n }\n return result;\n}\n\n/** Rotate a matrix 90° counter-clockwise */\nexport function rotateMatrixCCW(matrix: Matrix): Matrix {\n const N = matrix.length;\n const M = matrix[0].length;\n const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < M; c++) {\n result[M - 1 - c][r] = matrix[r][c];\n }\n }\n return result;\n}\n\n/** Build the rotation-state matrix for a piece at a given rotation (0–3) */\nexport function buildMatrix(type: TetrominoType, rotation: number): Matrix {\n let mat = PIECE_MATRICES[type].map(row => [...row]);\n for (let i = 0; i < (rotation % 4 + 4) % 4; i++) {\n mat = rotateMatrixCW(mat);\n }\n return mat;\n}\n\n/** Create a new piece at its spawn position */\nexport function createPiece(type: TetrominoType): Piece {\n const matrix = buildMatrix(type, 0);\n const spawnX = Math.floor((COLS - matrix[0].length) / 2);\n // Spawn above visible field (y = -1 for pieces that appear at top)\n const spawnY = type === 'I' ? -1 : 0;\n return { type, matrix, pos: { x: spawnX, y: spawnY }, rotation: 0 };\n}\n\n/**\n * Try to rotate a piece clockwise or counter-clockwise.\n * Returns the new Piece if a valid position is found, or null on failure.\n */\nexport function tryRotate(\n piece: Piece,\n direction: 'CW' | 'CCW',\n board: number[][]\n): Piece | null {\n const newRotation = direction === 'CW'\n ? (piece.rotation + 1) % 4\n : (piece.rotation + 3) % 4;\n\n const newMatrix = direction === 'CW'\n ? rotateMatrixCW(piece.matrix)\n : rotateMatrixCCW(piece.matrix);\n\n const kickKey = `${piece.rotation}->${newRotation}`;\n const kickTable = piece.type === 'I' ? I_KICKS : JLSTZ_KICKS;\n const kicks = piece.type === 'O' ? [[0, 0]] : (kickTable[kickKey] ?? [[0, 0]]);\n\n for (const [dx, dy] of kicks) {\n const testPos: Position = { x: piece.pos.x + dx, y: piece.pos.y + dy };\n if (!hasCollision(newMatrix, testPos, board)) {\n return { ...piece, matrix: newMatrix, pos: testPos, rotation: newRotation };\n }\n }\n return null; // rotation failed\n}\n\n/** Check if a matrix at a given position collides with the board or walls */\nexport function hasCollision(matrix: Matrix, pos: Position, board: number[][]): boolean {\n for (let r = 0; r < matrix.length; r++) {\n for (let c = 0; c < matrix[r].length; c++) {\n if (!matrix[r][c]) continue;\n const boardX = pos.x + c;\n const boardY = pos.y + r;\n if (boardX < 0 || boardX >= COLS) return true;\n if (boardY >= board.length) return true;\n if (boardY >= 0 && board[boardY][boardX]) return true;\n }\n }\n return false;\n}\n\n/** Get the filled cell value for a tetromino type */\nexport function typeToId(type: TetrominoType): number {\n return TYPE_TO_ID[type];\n}\n\n/** Return a randomly chosen tetromino type */\nexport function randomType(): TetrominoType {\n const types: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];\n return types[Math.floor(Math.random() * types.length)];\n}\n\n/** 7-bag randomiser: returns a shuffled bag of all 7 pieces */\nexport function newBag(): TetrominoType[] {\n const bag: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n return bag;\n}\n","originalFile":"","structuredPatch":[{"oldStart":1,"oldLines":0,"newStart":1,"newLines":152,"lines":["+import { Matrix, Piece, Position, TetrominoType } from './types';","+import { COLS, I_KICKS, JLSTZ_KICKS, TYPE_TO_ID } from './constants';","+","+// Canonical rotation state 0 matrices for each piece type","+const PIECE_MATRICES: Record<TetrominoType, Matrix> = {","+ I: [","+ [0, 0, 0, 0],","+ [1, 1, 1, 1],","+ [0, 0, 0, 0],","+ [0, 0, 0, 0],","+ ],","+ O: [","+ [0, 1, 1, 0],","+ [0, 1, 1, 0],","+ [0, 0, 0, 0],","+ ],","+ T: [","+ [0, 1, 0],","+ [1, 1, 1],","+ [0, 0, 0],","+ ],","+ S: [","+ [0, 1, 1],","+ [1, 1, 0],","+ [0, 0, 0],","+ ],","+ Z: [","+ [1, 1, 0],","+ [0, 1, 1],","+ [0, 0, 0],","+ ],","+ J: [","+ [1, 0, 0],","+ [1, 1, 1],","+ [0, 0, 0],","+ ],","+ L: [","+ [0, 0, 1],","+ [1, 1, 1],","+ [0, 0, 0],","+ ],","+};","+","+/** Rotate a matrix 90° clockwise */","+export function rotateMatrixCW(matrix: Matrix): Matrix {","+ const N = matrix.length;","+ const M = matrix[0].length;","+ const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));","+ for (let r = 0; r < N; r++) {","+ for (let c = 0; c < M; c++) {","+ result[c][N - 1 - r] = matrix[r][c];","+ }","+ }","+ return result;","+}","+","+/** Rotate a matrix 90° counter-clockwise */","+export function rotateMatrixCCW(matrix: Matrix): Matrix {","+ const N = matrix.length;","+ const M = matrix[0].length;","+ const result: Matrix = Array.from({ length: M }, () => Array(N).fill(0));","+ for (let r = 0; r < N; r++) {","+ for (let c = 0; c < M; c++) {","+ result[M - 1 - c][r] = matrix[r][c];","+ }","+ }","+ return result;","+}","+","+/** Build the rotation-state matrix for a piece at a given rotation (0–3) */","+export function buildMatrix(type: TetrominoType, rotation: number): Matrix {","+ let mat = PIECE_MATRICES[type].map(row => [...row]);","+ for (let i = 0; i < (rotation % 4 + 4) % 4; i++) {","+ mat = rotateMatrixCW(mat);","+ }","+ return mat;","+}","+","+/** Create a new piece at its spawn position */","+export function createPiece(type: TetrominoType): Piece {","+ const matrix = buildMatrix(type, 0);","+ const spawnX = Math.floor((COLS - matrix[0].length) / 2);","+ // Spawn above visible field (y = -1 for pieces that appear at top)","+ const spawnY = type === 'I' ? -1 : 0;","+ return { type, matrix, pos: { x: spawnX, y: spawnY }, rotation: 0 };","+}","+","+/**","+ * Try to rotate a piece clockwise or counter-clockwise.","+ * Returns the new Piece if a valid position is found, or null on failure.","+ */","+export function tryRotate(","+ piece: Piece,","+ direction: 'CW' | 'CCW',","+ board: number[][]","+): Piece | null {","+ const newRotation = direction === 'CW'","+ ? (piece.rotation + 1) % 4","+ : (piece.rotation + 3) % 4;","+","+ const newMatrix = direction === 'CW'","+ ? rotateMatrixCW(piece.matrix)","+ : rotateMatrixCCW(piece.matrix);","+","+ const kickKey = `${piece.rotation}->${newRotation}`;","+ const kickTable = piece.type === 'I' ? I_KICKS : JLSTZ_KICKS;","+ const kicks = piece.type === 'O' ? [[0, 0]] : (kickTable[kickKey] ?? [[0, 0]]);","+","+ for (const [dx, dy] of kicks) {","+ const testPos: Position = { x: piece.pos.x + dx, y: piece.pos.y + dy };","+ if (!hasCollision(newMatrix, testPos, board)) {","+ return { ...piece, matrix: newMatrix, pos: testPos, rotation: newRotation };","+ }","+ }","+ return null; // rotation failed","+}","+","+/** Check if a matrix at a given position collides with the board or walls */","+export function hasCollision(matrix: Matrix, pos: Position, board: number[][]): boolean {","+ for (let r = 0; r < matrix.length; r++) {","+ for (let c = 0; c < matrix[r].length; c++) {","+ if (!matrix[r][c]) continue;","+ const boardX = pos.x + c;","+ const boardY = pos.y + r;","+ if (boardX < 0 || boardX >= COLS) return true;","+ if (boardY >= board.length) return true;","+ if (boardY >= 0 && board[boardY][boardX]) return true;","+ }","+ }","+ return false;","+}","+","+/** Get the filled cell value for a tetromino type */","+export function typeToId(type: TetrominoType): number {","+ return TYPE_TO_ID[type];","+}","+","+/** Return a randomly chosen tetromino type */","+export function randomType(): TetrominoType {","+ const types: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];","+ return types[Math.floor(Math.random() * types.length)];","+}","+","+/** 7-bag randomiser: returns a shuffled bag of all 7 pieces */","+export function newBag(): TetrominoType[] {","+ const bag: TetrominoType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];","+ for (let i = bag.length - 1; i > 0; i--) {","+ const j = Math.floor(Math.random() * (i + 1));","+ [bag[i], bag[j]] = [bag[j], bag[i]];","+ }","+ return bag;","+}"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01T9DpTCfabyuLAdZR5PV3wD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013Rs9f1GUxDKdEkQJjtJBV7","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/board.ts","old_string":"","new_string":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId } from './tetromino';\n\n/** Create an empty board (ROWS × COLS filled with 0) */\nexport function createBoard(): number[][] {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n}\n\n/** Merge (lock) a piece into the board, mutating it in place */\nexport function mergePiece(board: number[][], piece: Piece): void {\n const id = typeToId(piece.type);\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const boardY = piece.pos.y + r;\n const boardX = piece.pos.x + c;\n if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) {\n board[boardY][boardX] = id;\n }\n }\n }\n}\n\n/** Clear completed lines and return count of cleared lines */\nexport function clearLines(board: number[][]): number {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(cell => cell !== 0)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(0));\n cleared++;\n r++; // re-check the same row index after shifting down\n }\n }\n return cleared;\n}\n\n/** Calculate score delta for cleared lines at a given level */\nexport function calcScore(linesCleared: number, level: number): number {\n return (LINE_SCORES[linesCleared] ?? 0) * level;\n}\n\n/** Calculate new level given total lines cleared */\nexport function calcLevel(totalLines: number): number {\n return Math.floor(totalLines / LINES_PER_LEVEL) + 1;\n}\n\n/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}\n\n/** Check if any cell is above row 0 (block-out = game over) */\nexport function isTopOut(board: number[][]): boolean {\n return board[0].some(cell => cell !== 0);\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1920,"cache_read_input_tokens":16042,"cache_creation":{"ephemeral_5m_input_tokens":1920,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"6903f524-3a7f-4233-88c6-b1f55144738e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013Rs9f1GUxDKdEkQJjtJBV7","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/board.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"c3a2cd2f-77c6-4322-a5aa-8ab73cb9158b","timestamp":"2026-04-04T09:40:29.631Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/board.ts","oldString":"","newString":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId } from './tetromino';\n\n/** Create an empty board (ROWS × COLS filled with 0) */\nexport function createBoard(): number[][] {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n}\n\n/** Merge (lock) a piece into the board, mutating it in place */\nexport function mergePiece(board: number[][], piece: Piece): void {\n const id = typeToId(piece.type);\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const boardY = piece.pos.y + r;\n const boardX = piece.pos.x + c;\n if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) {\n board[boardY][boardX] = id;\n }\n }\n }\n}\n\n/** Clear completed lines and return count of cleared lines */\nexport function clearLines(board: number[][]): number {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(cell => cell !== 0)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(0));\n cleared++;\n r++; // re-check the same row index after shifting down\n }\n }\n return cleared;\n}\n\n/** Calculate score delta for cleared lines at a given level */\nexport function calcScore(linesCleared: number, level: number): number {\n return (LINE_SCORES[linesCleared] ?? 0) * level;\n}\n\n/** Calculate new level given total lines cleared */\nexport function calcLevel(totalLines: number): number {\n return Math.floor(totalLines / LINES_PER_LEVEL) + 1;\n}\n\n/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}\n\n/** Check if any cell is above row 0 (block-out = game over) */\nexport function isTopOut(board: number[][]): boolean {\n return board[0].some(cell => cell !== 0);\n}\n","originalFile":"","structuredPatch":[{"oldStart":1,"oldLines":0,"newStart":1,"newLines":64,"lines":["+import { Matrix, Piece } from './types';","+import { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';","+import { typeToId } from './tetromino';","+","+/** Create an empty board (ROWS × COLS filled with 0) */","+export function createBoard(): number[][] {","+ return Array.from({ length: ROWS }, () => Array(COLS).fill(0));","+}","+","+/** Merge (lock) a piece into the board, mutating it in place */","+export function mergePiece(board: number[][], piece: Piece): void {","+ const id = typeToId(piece.type);","+ for (let r = 0; r < piece.matrix.length; r++) {","+ for (let c = 0; c < piece.matrix[r].length; c++) {","+ if (!piece.matrix[r][c]) continue;","+ const boardY = piece.pos.y + r;","+ const boardX = piece.pos.x + c;","+ if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) {","+ board[boardY][boardX] = id;","+ }","+ }","+ }","+}","+","+/** Clear completed lines and return count of cleared lines */","+export function clearLines(board: number[][]): number {","+ let cleared = 0;","+ for (let r = ROWS - 1; r >= 0; r--) {","+ if (board[r].every(cell => cell !== 0)) {","+ board.splice(r, 1);","+ board.unshift(Array(COLS).fill(0));","+ cleared++;","+ r++; // re-check the same row index after shifting down","+ }","+ }","+ return cleared;","+}","+","+/** Calculate score delta for cleared lines at a given level */","+export function calcScore(linesCleared: number, level: number): number {","+ return (LINE_SCORES[linesCleared] ?? 0) * level;","+}","+","+/** Calculate new level given total lines cleared */","+export function calcLevel(totalLines: number): number {","+ return Math.floor(totalLines / LINES_PER_LEVEL) + 1;","+}","+","+/** Compute the ghost piece: drop it as far as possible */","+export function getGhostPiece(piece: Piece, board: number[][]): Piece {","+ let ghost = { ...piece, pos: { ...piece.pos } };","+ while (true) {","+ const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };","+ const { hasCollision } = require('./tetromino') as typeof import('./tetromino');","+ if (hasCollision(ghost.matrix, next.pos, board)) break;","+ ghost = next;","+ }","+ return ghost;","+}","+","+/** Check if any cell is above row 0 (block-out = game over) */","+export function isTopOut(board: number[][]): boolean {","+ return board[0].some(cell => cell !== 0);","+}"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015q7cc7XQfg2SeFbKegApcu","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Wait, I used `require` in `board.ts` for `hasCollision`. That's a circular dependency situation. Let me restructure. I should move `hasCollision` to `board.ts` or make it available in a separate utility file.\n\nActually, `hasCollision` doesn't depend on board (it takes board as a parameter), and it's already defined in `tetromino.ts`. Let me just import it directly instead of using require().\n\nActually wait - the circular dependency issue: `board.ts` imports from `tetromino.ts`, and `tetromino.ts` already imports from `constants.ts`. \n\nSince `tetromino.ts` doesn't import from `board.ts` and just takes it as a parameter, I can safely import `hasCollision` from `tetromino.ts` in `board.ts`. Now I need to update the `getGhostPiece` function to use the proper import.","signature":"EsEHClsIDBgCKkA7HvzKqErXZ4UJ7b4HLJ0wqdR4XW6DrVuqTBPeY2261ck2aCdLbv9a8X7dpH1WfSCkq50Vuc7XoyY6/ljDTfjZMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgys2Bvh5uCJHeTuSNAaDF2RsbIzDzUXO3Ge7SIwD/ys9ESg3SU/VpLugMZse0XtdQyYfok5E03vd11oDkf8eJH9DJVmNwgtaHAOfI3MKpMGs5XOI2BV+tzfr87xlKhmsZ0SgMBzm9BKd91VYGp/v00N1u1AB44wMWkGE7kT4Up/+tWGO0rBg3bT1IhF2jb1OMeFnd+HtIc66tKWq5oGVoQ1cS2bFEKgj1B5ngg1Vx2+pumi0+oSlgXIADLMPVpLVomM9cwvYvzjDut6LP9b3zT0/4apO/7Trp00yckzXoTLs5H6GSzCMgtnTs7jCrcxgqyxK+/m8VECK7t7R5ZGLSRwz7ox0Ye/kP3P/bVdONdj1wB8RotAnDdXBpgmfrc/sEHSY7x8BtrSNF1TimhYUlrBsW09lS9O61ZiLEPuTO6F8wyniHHHXCgxfnkm+mrHKwOzq6AtBHz0ZwOTag9LJX9tINZNmvOpBup6f1LFdsmfoa8lG33kuo1G7DxxtavCMJ9ZmuxC4AlIHMDW8XfwiIYYZOJUCnzNFZjJVN68mWGy3QmCMj3Wy/jhSGvZkBteWT/vB+PIFt2pWFqlV9ZX8XT+a45RgSJD6xujY+gVRTIgJnhMy+ZSmQVZZBNHGVt6CkAu3dgyixLWrnEd31kV8Im7P0oKNNjhIhaR3Mn9x80W7V0m1EFi7Lr1FTFMVMAAA9SMR9H5/PJMuS0TEXr1ZgnXXF/Tt0l+8+VbjJem0vB9sePB+l2KNlS7chCrIhZotLXyqgHf/g7d3OC/Bt9JtAVhoEJF1fQZcl7QkutQjObBD2QgYHZ2pYZUKjgCjztE1NEp2mJ8FiyrYu+zm1f67aMq4D5X/So4JYjqih1VbMrMZylokE2qyNMFGDxKPo34iDPPPnNJN09uGarASF9TF4GBqbPBRXd18TKPnxz+HaVTf41XC+wFa1jhPrEDxOxrkoj/aFeiXjQl6OkqCD2Vc46lKQsHVh0eMVfszsSVt2yXy8mvwU8su8MOgm9ANw4dPnKeULOWxP4V03qcVeXofJJMExhvQjJ5gB/OTtM9l9VfYAs70Ygxkpfh1iyllW0W/BHL596w4RoHdh9wT09ajXnsZxuZ487YVjeFDVUgnRp0QcHGXwnstsP+L35yhfnvh6Vq+RgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":905,"cache_read_input_tokens":17962,"cache_creation":{"ephemeral_5m_input_tokens":905,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"43e33574-f703-421e-9025-ef95bc4d61c1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015q7cc7XQfg2SeFbKegApcu","type":"message","role":"assistant","content":[{"type":"text","text":"I need to fix the circular dependency in `board.ts` — I'll import `hasCollision` directly instead of using `require`:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":905,"cache_read_input_tokens":17962,"cache_creation":{"ephemeral_5m_input_tokens":905,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"cd445c35-c1cb-4ee2-87d3-c55c22dff3ad"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015q7cc7XQfg2SeFbKegApcu","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Sj4TuojqweM5dGyfZ7hejL","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/board.ts","old_string":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId } from './tetromino';","new_string":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId, hasCollision } from './tetromino';"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":905,"cache_read_input_tokens":17962,"cache_creation":{"ephemeral_5m_input_tokens":905,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"54d79d02-7600-4142-8031-ef9f61c8d33d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Sj4TuojqweM5dGyfZ7hejL","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/board.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"2602bd37-ac2a-4620-8365-50c72ef6413d","timestamp":"2026-04-04T09:40:37.090Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/board.ts","oldString":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId } from './tetromino';","newString":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId, hasCollision } from './tetromino';","originalFile":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId } from './tetromino';\n\n/** Create an empty board (ROWS × COLS filled with 0) */\nexport function createBoard(): number[][] {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n}\n\n/** Merge (lock) a piece into the board, mutating it in place */\nexport function mergePiece(board: number[][], piece: Piece): void {\n const id = typeToId(piece.type);\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const boardY = piece.pos.y + r;\n const boardX = piece.pos.x + c;\n if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) {\n board[boardY][boardX] = id;\n }\n }\n }\n}\n\n/** Clear completed lines and return count of cleared lines */\nexport function clearLines(board: number[][]): number {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(cell => cell !== 0)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(0));\n cleared++;\n r++; // re-check the same row index after shifting down\n }\n }\n return cleared;\n}\n\n/** Calculate score delta for cleared lines at a given level */\nexport function calcScore(linesCleared: number, level: number): number {\n return (LINE_SCORES[linesCleared] ?? 0) * level;\n}\n\n/** Calculate new level given total lines cleared */\nexport function calcLevel(totalLines: number): number {\n return Math.floor(totalLines / LINES_PER_LEVEL) + 1;\n}\n\n/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}\n\n/** Check if any cell is above row 0 (block-out = game over) */\nexport function isTopOut(board: number[][]): boolean {\n return board[0].some(cell => cell !== 0);\n}\n","structuredPatch":[{"oldStart":1,"oldLines":6,"newStart":1,"newLines":6,"lines":[" import { Matrix, Piece } from './types';"," import { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';","-import { typeToId } from './tetromino';","+import { typeToId, hasCollision } from './tetromino';"," "," /** Create an empty board (ROWS × COLS filled with 0) */"," export function createBoard(): number[][] {"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01RmFsRiS6vLMhKVFCSKeyz7","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Fxt9gPHQNwkBhWPSwo8kY9","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/board.ts","old_string":"/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}","new_string":"/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const nextPos = { x: ghost.pos.x, y: ghost.pos.y + 1 };\n if (hasCollision(ghost.matrix, nextPos, board)) break;\n ghost = { ...ghost, pos: nextPos };\n }\n return ghost;\n}"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":524,"cache_read_input_tokens":18867,"cache_creation":{"ephemeral_5m_input_tokens":524,"ephemeral_1h_input_tokens":0},"output_tokens":73,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"8502168c-1b53-4177-aae0-0b0a1f3b2707"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Fxt9gPHQNwkBhWPSwo8kY9","type":"tool_result","content":"The file /tmp/loop-bench-732u9ti4/src/board.ts has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"4541140d-24a8-44b7-b7c1-4b51c0585bfe","timestamp":"2026-04-04T09:40:43.817Z","tool_use_result":{"filePath":"/tmp/loop-bench-732u9ti4/src/board.ts","oldString":"/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}","newString":"/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const nextPos = { x: ghost.pos.x, y: ghost.pos.y + 1 };\n if (hasCollision(ghost.matrix, nextPos, board)) break;\n ghost = { ...ghost, pos: nextPos };\n }\n return ghost;\n}","originalFile":"import { Matrix, Piece } from './types';\nimport { COLS, ROWS, LINE_SCORES, LINES_PER_LEVEL } from './constants';\nimport { typeToId, hasCollision } from './tetromino';\n\n/** Create an empty board (ROWS × COLS filled with 0) */\nexport function createBoard(): number[][] {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(0));\n}\n\n/** Merge (lock) a piece into the board, mutating it in place */\nexport function mergePiece(board: number[][], piece: Piece): void {\n const id = typeToId(piece.type);\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const boardY = piece.pos.y + r;\n const boardX = piece.pos.x + c;\n if (boardY >= 0 && boardY < ROWS && boardX >= 0 && boardX < COLS) {\n board[boardY][boardX] = id;\n }\n }\n }\n}\n\n/** Clear completed lines and return count of cleared lines */\nexport function clearLines(board: number[][]): number {\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(cell => cell !== 0)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(0));\n cleared++;\n r++; // re-check the same row index after shifting down\n }\n }\n return cleared;\n}\n\n/** Calculate score delta for cleared lines at a given level */\nexport function calcScore(linesCleared: number, level: number): number {\n return (LINE_SCORES[linesCleared] ?? 0) * level;\n}\n\n/** Calculate new level given total lines cleared */\nexport function calcLevel(totalLines: number): number {\n return Math.floor(totalLines / LINES_PER_LEVEL) + 1;\n}\n\n/** Compute the ghost piece: drop it as far as possible */\nexport function getGhostPiece(piece: Piece, board: number[][]): Piece {\n let ghost = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n const { hasCollision } = require('./tetromino') as typeof import('./tetromino');\n if (hasCollision(ghost.matrix, next.pos, board)) break;\n ghost = next;\n }\n return ghost;\n}\n\n/** Check if any cell is above row 0 (block-out = game over) */\nexport function isTopOut(board: number[][]): boolean {\n return board[0].some(cell => cell !== 0);\n}\n","structuredPatch":[{"oldStart":50,"oldLines":10,"newStart":50,"newLines":9,"lines":[" export function getGhostPiece(piece: Piece, board: number[][]): Piece {"," let ghost = { ...piece, pos: { ...piece.pos } };"," while (true) {","- const next = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };","- const { hasCollision } = require('./tetromino') as typeof import('./tetromino');","- if (hasCollision(ghost.matrix, next.pos, board)) break;","- ghost = next;","+ const nextPos = { x: ghost.pos.x, y: ghost.pos.y + 1 };","+ if (hasCollision(ghost.matrix, nextPos, board)) break;","+ ghost = { ...ghost, pos: nextPos };"," }"," return ghost;"," }"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01KNbyTDeH3CyjqTGmkVqoDr","type":"message","role":"assistant","content":[{"type":"text","text":"Now the renderer:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":448,"cache_read_input_tokens":19391,"cache_creation":{"ephemeral_5m_input_tokens":448,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"2dbf4e10-7386-4fe8-8160-a47fa84d8ed4"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01KNbyTDeH3CyjqTGmkVqoDr","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RP2Va1R47TnXiJBg6iMbRC","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-732u9ti4/src/renderer.ts","old_string":"","new_string":"import { Piece, TetrominoType } from './types';\nimport {\n COLS, ROWS, BLOCK_SIZE, PREVIEW_BLOCK_SIZE,\n COLORS, TYPE_TO_ID,\n} from './constants';\nimport { getGhostPiece } from './board';\n\nconst BORDER_RADIUS = 3;\nconst GRID_COLOR = 'rgba(255,255,255,0.04)';\nconst EMPTY_CELL_COLOR = '#0d0d1a';\n\n// ── helpers ──────────────────────────────────────────────────────────────────\n\nfunction drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n size: number,\n color: string,\n alpha = 1,\n): void {\n ctx.globalAlpha = alpha;\n // Main fill\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.roundRect(x + 1, y + 1, size - 2, size - 2, BORDER_RADIUS);\n ctx.fill();\n\n // Highlight (top-left glint)\n const grad = ctx.createLinearGradient(x, y, x + size, y + size);\n grad.addColorStop(0, 'rgba(255,255,255,0.35)');\n grad.addColorStop(1, 'rgba(0,0,0,0.25)');\n ctx.fillStyle = grad;\n ctx.beginPath();\n ctx.roundRect(x + 1, y + 1, size - 2, size - 2, BORDER_RADIUS);\n ctx.fill();\n\n ctx.globalAlpha = 1;\n}\n\nfunction drawGhostBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n size: number,\n color: string,\n): void {\n ctx.globalAlpha = 1;\n ctx.strokeStyle = color;\n ctx.lineWidth = 2;\n ctx.beginPath();\n ctx.roundRect(x + 2, y + 2, size - 4, size - 4, BORDER_RADIUS);\n ctx.stroke();\n}\n\n// ── main board renderer ───────────────────────────────────────────────────────\n\nexport class Renderer {\n private ctx: CanvasRenderingContext2D;\n private holdCtx: CanvasRenderingContext2D;\n private nextCtx: CanvasRenderingContext2D;\n\n constructor(\n canvas: HTMLCanvasElement,\n holdCanvas: HTMLCanvasElement,\n nextCanvas: HTMLCanvasElement,\n ) {\n this.ctx = canvas.getContext('2d')!;\n this.holdCtx = holdCanvas.getContext('2d')!;\n this.nextCtx = nextCanvas.getContext('2d')!;\n }\n\n // ── board ────────────────────────────────────────────────────────────────\n\n drawBoard(\n board: number[][],\n currentPiece: Piece | null,\n heldPiece: Piece | null,\n nextPiece: Piece | null,\n canHold: boolean,\n ): void {\n const ctx = this.ctx;\n ctx.clearRect(0, 0, COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);\n\n // Background\n ctx.fillStyle = EMPTY_CELL_COLOR;\n ctx.fillRect(0, 0, COLS * BLOCK_SIZE, ROWS * BLOCK_SIZE);\n\n // Grid lines\n ctx.strokeStyle = GRID_COLOR;\n ctx.lineWidth = 1;\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * BLOCK_SIZE, 0);\n ctx.lineTo(c * BLOCK_SIZE, ROWS * BLOCK_SIZE);\n ctx.stroke();\n }\n for (let r = 0; r <= ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * BLOCK_SIZE);\n ctx.lineTo(COLS * BLOCK_SIZE, r * BLOCK_SIZE);\n ctx.stroke();\n }\n\n // Placed cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n const id = board[r][c];\n if (id) {\n drawBlock(ctx, c * BLOCK_SIZE, r * BLOCK_SIZE, BLOCK_SIZE, COLORS[id]);\n }\n }\n }\n\n // Ghost piece\n if (currentPiece) {\n const ghost = getGhostPiece(currentPiece, board);\n if (ghost.pos.y !== currentPiece.pos.y) {\n const color = COLORS[TYPE_TO_ID[currentPiece.type]];\n for (let r = 0; r < ghost.matrix.length; r++) {\n for (let c = 0; c < ghost.matrix[r].length; c++) {\n if (!ghost.matrix[r][c]) continue;\n const px = (ghost.pos.x + c) * BLOCK_SIZE;\n const py = (ghost.pos.y + r) * BLOCK_SIZE;\n if (py >= 0) drawGhostBlock(ctx, px, py, BLOCK_SIZE, color);\n }\n }\n }\n }\n\n // Current (active) piece\n if (currentPiece) {\n const color = COLORS[TYPE_TO_ID[currentPiece.type]];\n for (let r = 0; r < currentPiece.matrix.length; r++) {\n for (let c = 0; c < currentPiece.matrix[r].length; c++) {\n if (!currentPiece.matrix[r][c]) continue;\n const px = (currentPiece.pos.x + c) * BLOCK_SIZE;\n const py = (currentPiece.pos.y + r) * BLOCK_SIZE;\n if (py >= 0) drawBlock(ctx, px, py, BLOCK_SIZE, color);\n }\n }\n }\n\n // Side panels\n this.drawPreview(this.holdCtx, heldPiece, canHold);\n this.drawPreview(this.nextCtx, nextPiece, true);\n }\n\n // ── piece preview (hold / next) ───────────────────────────────────────────\n\n private drawPreview(\n ctx: CanvasRenderingContext2D,\n piece: Piece | null,\n active: boolean,\n ): void {\n const W = ctx.canvas.width;\n const H = ctx.canvas.height;\n ctx.clearRect(0, 0, W, H);\n ctx.fillStyle = '#0d0d1a';\n ctx.fillRect(0, 0, W, H);\n\n if (!piece) return;\n\n const bs = PREVIEW_BLOCK_SIZE;\n const mat = piece.matrix;\n const cols = mat[0].length;\n const rows = mat.length;\n\n // Find actual bounding box of filled cells\n let minR = rows, maxR = -1, minC = cols, maxC = -1;\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (mat[r][c]) {\n minR = Math.min(minR, r);\n maxR = Math.max(maxR, r);\n minC = Math.min(minC, c);\n maxC = Math.max(maxC, c);\n }\n }\n }\n if (maxR < 0) return;\n\n const spanC = maxC - minC + 1;\n const spanR = maxR - minR + 1;\n const offsetX = Math.floor((W - spanC * bs) / 2);\n const offsetY = Math.floor((H - spanR * bs) / 2);\n\n const color = COLORS[TYPE_TO_ID[piece.type]];\n ctx.globalAlpha = active ? 1 : 0.35;\n\n for (let r = minR; r <= maxR; r++) {\n for (let c = minC; c <= maxC; c++) {\n if (!mat[r][c]) continue;\n const px = offsetX + (c - minC) * bs;\n const py = offsetY + (r - minR) * bs;\n drawBlock(ctx, px, py, bs, color);\n }\n }\n ctx.globalAlpha = 1;\n }\n\n // ── overlays ──────────────────────────────────────────────────────────────\n\n drawOverlay(\n text: string,\n subText: string,\n color = '#00f0f0',\n ): void {\n const ctx = this.ctx;\n const W = COLS * BLOCK_SIZE;\n const H = ROWS * BLOCK_SIZE;\n\n ctx.fillStyle = 'rgba(0, 0, 0, 0.75)';\n ctx.fillRect(0, 0, W, H);\n\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n ctx.fillStyle = color;\n ctx.font = `bold 36px 'Courier New', monospace`;\n ctx.fillText(text, W / 2, H / 2 - 28);\n\n ctx.fillStyle = '#aaa';\n ctx.font = `16px 'Courier New', monospace`;\n\n const lines = subText.split('\\n');\n lines.forEach((line, i) => {\n ctx.fillText(line, W / 2, H / 2 + 18 + i * 22);\n });\n }\n\n drawLineClearFlash(rows: number[]): void {\n const ctx = this.ctx;\n ctx.fillStyle = 'rgba(255, 255, 255, 0.6)';\n for (const r of rows) {\n ctx.fillRect(0, r * BLOCK_SIZE, COLS * BLOCK_SIZE, BLOCK_SIZE);\n }\n }\n}\n"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":448,"cache_read_input_tokens":19391,"cache_creation":{"ephemeral_5m_input_tokens":448,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"59856856-0d28-4626-b264-1712ed2b2c42","uuid":"ae27d9ea-a469-49af-87c4-43a52f140f7e"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":330764,"duration_api_ms":299591,"is_error":true,"num_turns":12,"stop_reason":"tool_use","session_id":"59856856-0d28-4626-b264-1712ed2b2c42","total_cost_usd":0.5162108999999999,"usage":{"input_tokens":16,"cache_creation_input_tokens":23562,"cache_read_input_tokens":141617,"output_tokens":22471,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23562},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":17,"outputTokens":25188,"cacheReadInputTokens":161008,"cacheCreationInputTokens":24010,"webSearchRequests":0,"costUSD":0.5162108999999999,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"e892bac7-0a66-48cf-9599-a49e78efa703","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":350856,"duration_api_ms":346007,"is_error":true,"num_turns":3,"stop_reason":"tool_use","session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","total_cost_usd":0.5707926,"usage":{"input_tokens":7,"cache_creation_input_tokens":23539,"cache_read_input_tokens":9458,"output_tokens":26922,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23539},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":8,"outputTokens":27101,"cacheReadInputTokens":14187,"cacheCreationInputTokens":42666,"webSearchRequests":0,"costUSD":0.5707926,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"b2ddfa86-eadb-4dde-bdab-eed2c971a264","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 14, - "tool_calls": { - "total": 3, - "bash": 2, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 3, - "text_blocks": 2, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T08:48:02.456144+00:00", - "wall_time_seconds": 351, - "exit_code": 1, - "completed_at": "2026-04-04T08:54:00.833091+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,14 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-b5qblx2a","session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"8acd5fbf-4e4c-499c-b67b-134724347cb7","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011D5ZdEJ5kFFA8744UeVsYF","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris game with all standard mechanics.\n\nI'll create:\n1. `index.html` - The HTML structure\n2. `style.css` - Styling for the game\n3. `tetris.ts` - TypeScript game logic\n\nSince this needs to run in a browser, I'll compile the TypeScript or use a simple approach. Let me think about the best approach.\n\nI'll create:\n- `index.html` with the game canvas and UI\n- `tetris.ts` with all the game logic\n\n\n- A `tsconfig.json` for TypeScript compilation, then provide the compiled JavaScript inline so it runs immediately without requiring a build step.\n\nActually, let me reconsider the practical approach here. I'll set up a complete project structure with `index.html`, `src/tetris.ts`, `tsconfig.json`, and `package.json` so the user can compile and run it easily. For the game itself, I need to implement canvas-based rendering, all seven Tetromino pieces with rotation matrices, and a wall kick system...\n\nWriting the game logic... Defining the tetromino shapes and rotation states... Defining the rotation states for the remaining Tetris pieces...\n\nNow I'm working through the wall kick system for SRS, mapping out the offset adjustments needed when pieces rotate near boundaries—different rules apply depending on which pieces we're rotating and which direction they're moving. I'm realizing the full SRS implementation is too complex, so I'll go with a simpler rotation system with basic wall kicks to keep things manageable. Now I'm structuring this as a proper TypeScript project with separate files for organization, using `requestAnimationFrame` with a time accumulator to handle consistent piece drop timing. The board will be a 10x20 grid, and I'll implement all seven Tetris pieces with their rotation states.\n\nWriting the game code... Defining the tetromino shapes... Defining the remaining tetromino pieces...\n\nNow I'm setting up the wall kick data for the standard rotation system, which handles how pieces adjust their position when they collide with walls during rotation. Defining the Tetris class structure... Setting up the canvas elements and their 2D contexts for the main game board, next piece preview, and hold piece display, then initializing the board as a 2D grid, setting up input handlers, and populating the piece bag.\n\nImplementing the 7-bag randomizer system to shuffle tetromino pieces and manage the queue of upcoming pieces, then spawning the first piece and starting the game loop.\n\nNow I'm setting up piece spawning by getting the next piece from the queue, positioning it at the top center of the board, and checking if it immediately collides with existing blocks to detect game over conditions.\n\nChecking collision detection... Still writing collision and movement logic... Now I'm implementing the hard drop and soft drop mechanics—hard drop instantly moves the piece to the bottom and awards points based on distance, while soft drop moves it down one row at a time and resets the accumulator when successful.\n\nI'm also adding a ghost piece preview that calculates where the current piece would land, and implementing the hold piece functionality to let players swap their current piece with a stored one.\n\nNow I'm working on the piece locking mechanism that places blocks on the board when a piece can't move down anymore, iterating through the piece's shape to mark occupied cells. Finishing the line-clearing logic with a row increment to recheck the same index, then updating the score and level based on lines cleared, and finally implementing the game loop that tracks time deltas and accumulates drop timing.\n\nStill writing game loop... Writing the rendering methods... Writing the rendering methods...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4729,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"b7e7be2e-93b9-4baf-bcfe-aaf2688ad158"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01V4i1uvdM7DxDaQSMKrsdqz","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris game with all standard mechanics:\n\n1. Piece rotation\n2. Line clearing\n3. Scoring\n4. Increasing speed\n5. Keyboard controls\n\nLet me structure this as a single HTML file with TypeScript compiled inline, or better yet, create proper TypeScript files with a build setup. Actually, since we need it to run in a browser, let me create a proper project with:\n- `index.html` - The HTML file\n\n\n- `src/tetris.ts` - The TypeScript source\n- `package.json` - For dependencies and build\n- `tsconfig.json` - TypeScript config\n\nI'll create a self-contained project that can be built with TypeScript compiler (tsc) and then run in a browser. Now I'm designing the core game structure with all seven standard Tetris pieces (I, O, T, S, Z, J, L) in their respective colors, and implementing the fundamental mechanics like piece movement, rotation, line detection, and scoring.\n\nFor controls, I'll use arrow keys for movement and rotation, space for hard drop, and P to pause. The game will run on a 10x20 grid with Canvas rendering, pure TypeScript with no external dependencies, and scoring that multiplies line clears by the current level while increasing speed every 10 lines cleared.\n\nI'm settling on a minimal project structure with just the HTML file, TypeScript source, and configuration files needed to compile and run the game.\n\nDefining the Tetris game logic... I'm defining the complete Tetris game structure with all seven tetrominoes, implementing the classic scoring system where line clears multiply by level, and adding features like ghost piece preview, hold functionality, and progressive difficulty that starts at 1000ms per drop.\n\nWriting the TypeScript implementation... Defining the tetromino shapes... Finishing up the color mappings for all tetromino types, then moving on to the scoring system which awards points based on how many lines are cleared at once. Now I'm thinking through the overall architecture—I'll need a main `TetrisGame` class to handle all the game state and logic, with the canvas as the rendering surface, plus supporting files like the config and HTML structure to tie everything together. Defining the game class structure... I'm finishing up the class structure with the remaining drawing and input handling methods, then planning to implement the full game with a polished dark theme, ghost piece visualization, hold and next piece previews, proper rotation mechanics with wall kicks, a scoring and level system, and smooth keyboard controls using delayed auto-shift for continuous movement.\n\nWriting the Tetris implementation... Defining tetromino shapes and colors... Defining rotation kick data... Defining the game state interfaces and utility functions... Writing the Tetris class structure... Setting up canvas references...\n\nNow I'm initializing the game board and input handlers, then displaying the start screen. I'm also implementing the core game logic—creating the board grid, building a randomized piece bag using Fisher-Yates shuffle, and managing the next piece selection.\n\nContinuing with piece spawning and validation...\n\nI'm checking if a piece placement is valid by iterating through its matrix and ensuring each occupied cell falls within bounds and doesn't collide with existing blocks on the board. Then I'm locking pieces in place by copying their cells onto the board grid, handling the edge case where pieces might spawn partially above the visible area.\n\nContinuing with line clearing logic... Writing rotation logic... Writing movement and drop logic... Finishing the hold piece logic, then moving into the game loop where I'm setting up the render function to handle gravity, delayed auto-shift timing, and drawing updates on each animation frame.\n\nNow I'm implementing the gravity system to drop pieces and lock them when they hit the bottom, along with the DAS (delayed auto-shift) mechanism that handles left and right movement with initial delay and then rapid repeating moves.\n\nWriting the rendering code... Writing the rendering logic... Writing the block rendering function... Writing the canvas rendering methods...\n\nNow I'm moving into the UI updates—refreshing the score, level, and lines display, then handling the overlay for game states like game over or pause screens. After that, I'm setting up the game start method to initialize the board and reset all the game variables. Writing input handlers... Handling the rest of the key bindings for rotation and special moves like hard drop and piece holding, then setting up the key release handler to reset the directional input state.\n\nNow I'm thinking through the HTML and CSS layout—I want a three-panel design with the game board centered, the hold display on the left, and next queue plus stats on the right. I'm calculating the canvas dimensions based on a 30-pixel cell size, so the main board will be 300 pixels wide and 600 pixels tall, with smaller canvases for the next and hold previews.\n\nWriting the HTML structure... Still writing styles... Writing the game layout... Setting up the build configuration... I need to set the TypeScript module option to `\"none\"` since we're bundling everything into a single file. Now I'm thinking through the wall kick system for the Tetris rotation—the SRS coordinates use a different convention where positive y points up, opposite to our canvas system, so when applying a kick offset of (kx, ky), I need to shift by x + kx and y - ky to account for that difference.\n\nLooking at the standard SRS wall kick tables for the non-I pieces, I'm mapping out all the rotation state transitions and their corresponding kick offsets... I'm finishing up the SRS rotation offset data for the I piece, then realizing I need to convert these coordinates to canvas space where the y-axis is inverted—so I'm negating the y offsets when checking validity, which means `this.isValid(newMat, x + kx, y - ky)` is the right approach.\n\nThe O piece doesn't need rotation kicks since it looks the same when rotated. Now I'm thinking through how the piece bag and next piece display work together—when I call `nextType()` it shifts from the front, so I need to be careful about which index represents the actual next piece to display. , fill `this.next` with two bags (14 pieces)\n2. `spawnPiece()` calls `this.nextType()` which shifts from the front\n3. So `this.next[0]` is the next piece to be spawned\n\nBut wait, when I call `start()`, I set `this.next = [...this.randomBag(), ...this.randomBag()]` and then immediately call `this.current = this.spawnPiece()` which calls `this.nextType()` which shifts one from `this.next`. So after spawning, `this.next[0]` is indeed the next piece.\n\nLet me trace through the flow: I initialize with 14 pieces, spawn the first one which shifts it out, leaving 13 in the queue. When that piece locks and I spawn the next one, I shift again, and the display always shows what's at the front of the remaining queue. The `nextType()` function handles refilling the queue whenever it drops below 2 pieces, ensuring there's always a fresh bag ready. This way the display correctly shows the upcoming piece without including the current one.\n\nNow I need to write out all the implementation files, being careful with the TypeScript. One thing I'm thinking about is the `drawMiniPiece` function for rendering pieces in the hold and next displays—the canvas is 100×80 pixels with a block size of 25, so the I piece fits perfectly at 4 blocks wide, but the O piece is only 2 wide and the others are 3 wide, so I need to center them properly within that space.\n\nLet me reconsider the canvas dimensions. If I make it 120×100 with a block size of 25, that gives me more breathing room to center any piece shape without awkward scaling.\n\nWriting the canvas drawing function... Writing the rendering logic... Refactoring `drawBlock` to delegate to `drawBlockAt` keeps things cleaner. Now I'm thinking through the ghost piece display logic—it should only render when the ghost position differs from the current piece to avoid overlap, and I'm starting to set up the conditional check for that.\n\nI want to keep the game over overlay simple for now, just displaying it on top of the board without extra effects. For line clears, I could add a flash effect later, but I'll start with the basic mechanic. I'm also working through the scoring system using standard Tetris rules—singles, doubles, triples, and tetrises each have different point multipliers based on level, plus bonuses for soft and hard drops. For progression, I'll increment the level every 10 lines cleared, and I'm mapping out the drop speed formula where level 1 starts at 1000 milliseconds.\n\nImplementing drop speed calculation... Finishing the lock piece logic...\n\nI'm completing the piece locking function by checking if the newly spawned piece immediately overlaps with existing blocks on the board, which would indicate a game over condition. Writing the game over logic...\n\nI'm thinking through the spawn positions for different piece shapes—the I piece has its actual blocks at row 1 when spawned at y=0, and the T piece similarly has blocks visible within the board bounds at that spawn height, so that should work fine. using is `y=0` for all pieces. Let me check - in standard Tetris, pieces spawn with their bounding box touching the top. For the I piece, row 0 of the matrix (empty) is at y=0, and row 1 (the actual blocks) is at y=1. So `y=-1` would be more appropriate for spawning (so the actual blocks start at y=0). But that might cause issues.\n\nLet me use `y=0` and just ensure the board array handles y=-1 (out of bounds) gracefully. In `isValid`, I check `ny >= 0 && this.board[ny][nx] !== null` - so negative y cells are treated as empty (which is fine for spawning above the board).\n\nFor locking: if any cell has `y+r < 0`, it's above the visible board. This would happen if the piece gets locked while still partly above - that's the lock-out condition.\n\nI think `y=0` spawn is fine. The I piece's empty row at y=0 doesn't matter because there's nothing there. Looking at my SHAPES, the I piece has the active row at index 1, so spawning at `y=0` puts the active cells at `y=1` (visible at the top), which is the standard approach. I'll stick with that and keep the implementation simple. Writing collision detection... I'm realizing the spawn position needs more careful consideration—when the piece spawns at y=0, the matrix rows map directly to board positions, so the I piece's actual blocks end up at y=1, leaving the top rows hidden. Let me just commit to this approach: spawn at y=0, skip rendering anything above the board, and trigger game over if locked cells appear above y=0. I've settled on spawning at y=0 for consistency with standard Tetris, even if the I piece sits slightly lower than ideal. Now I'm setting up the project structure with TypeScript and getting ready to write out all the files.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"e01b98e6-3161-40ba-bd33-aa87798c92f1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01V4i1uvdM7DxDaQSMKrsdqz","type":"message","role":"assistant","content":[{"type":"text","text":"Let me start by examining the current directory structure, then build the game."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"a0c1c5ce-f0ad-4711-9d68-122db36ce275"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01V4i1uvdM7DxDaQSMKrsdqz","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WjHEC5itSLmqRPv2M9didc","name":"Bash","input":{"command":"ls /tmp/loop-bench-b5qblx2a","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"92f6c18c-dc3d-40d3-8661-9e6c7a3be98a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WjHEC5itSLmqRPv2M9didc","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"2a74b5f0-1c5e-4d80-88e5-c73007af263a","timestamp":"2026-04-04T08:53:52.025Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_0119JmUKd9rkzijsJ3GLktZD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01TkKeNdVTdBXK7i42QucynB","name":"Read","input":{"file_path":"/tmp/loop-bench-b5qblx2a/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":18810,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":18810,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"bfc36c4f-b31c-4850-b395-15cf175a6f64"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01TkKeNdVTdBXK7i42QucynB","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-b5qblx2a\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t"}]},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"d2c6bcd3-a07e-43ee-80ef-7a1a8add803a","timestamp":"2026-04-04T08:53:55.887Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-b5qblx2a/package.json","content":"{\n \"name\": \"loop-bench-b5qblx2a\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Hegc8Nz5ndNa1xPfmxLfmj","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Good, TypeScript is already installed. Let me check if there's a tsconfig.json:","signature":"EowCClsIDBgCKkAbdSHOwtdB3oOL04lyHV1CpIiLTwfKO97xEynNk2qg9kcKGN16TPebv1bxVcn+r18Si9o8vGlHJcyiICtTIgHSMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxMYc+UKtoKaY4W5D4aDFei1UPGccdyaExg3iIw7mrUB0Tqbsy1dcG0XdeSMEg4FukNDWld2aQ/YgS5M+UBC+ECTB1axjGoyLV5zuokKl+SzMqDS3RQ2OHAbQZ3HUP0dqMNmzk9y5t53hoVvw/ylIfNp57+NmsaROl/0UnaF0iR3ARQouMF0Tw5rPevuHYLdPIm4LoSFppUhSfdeO2oPjnZWaJdb+CAq/dIzPuBqhgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":19127,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":19127,"ephemeral_1h_input_tokens":0},"output_tokens":36,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"1d8eb588-a46b-4e5f-b279-c02a76c5aa19"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Hegc8Nz5ndNa1xPfmxLfmj","type":"message","role":"assistant","content":[{"type":"text","text":"Good — TypeScript is already installed. Now I'll build the full game: `tsconfig.json`, `src/tetris.ts`, and `index.html`."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":19127,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":19127,"ephemeral_1h_input_tokens":0},"output_tokens":36,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"4964aed5-7a46-41be-a80d-5cae0963af86"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Hegc8Nz5ndNa1xPfmxLfmj","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011VwBxRstECGQUp92j6rbvW","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-b5qblx2a/src /tmp/loop-bench-b5qblx2a/dist","description":"Create src and dist directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":19127,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":19127,"ephemeral_1h_input_tokens":0},"output_tokens":36,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","uuid":"6f766031-dec9-4afe-a66a-120cb13ba83e"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":350856,"duration_api_ms":346007,"is_error":true,"num_turns":3,"stop_reason":"tool_use","session_id":"686bcd09-d4f6-4b92-b1d2-ebd32d9dee8f","total_cost_usd":0.5707926,"usage":{"input_tokens":7,"cache_creation_input_tokens":23539,"cache_read_input_tokens":9458,"output_tokens":26922,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23539},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":8,"outputTokens":27101,"cacheReadInputTokens":14187,"cacheCreationInputTokens":42666,"webSearchRequests":0,"costUSD":0.5707926,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"b2ddfa86-eadb-4dde-bdab-eed2c971a264","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":912715,"duration_api_ms":85890,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","total_cost_usd":1.09602045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":71790,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.09602045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"d9aea09b-8704-4bf3-8c98-1d730b26be51","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 8, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.558799+00:00", - "wall_time_seconds": 913, - "exit_code": 1, - "completed_at": "2026-04-04T09:22:22.253160+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,8 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-3fkpubdq","session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"f3b7a760-138a-4268-90b5-5479290b11cc","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01PdGSHuHGwHpNX9ATAZ6WhP","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris game with all standard mechanics:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrows for movement, up/Z for rotation)\n\nLet me create a well-structured TypeScript project. I'll create:\n\n\n- `index.html` - The main HTML file\n- `src/tetris.ts` - The main game logic\n- `package.json` - For TypeScript compilation\n- `tsconfig.json` - TypeScript configuration\n\nI'm planning the game structure with a standard 10×20 board, all seven tetrominoes with their colors, and keyboard controls for movement and rotation.\n\nFor scoring, I'm using the classic Tetris formula where clearing multiple lines gives exponentially higher points multiplied by the current level, and the game speeds up every 10 lines cleared.\n\nI'm going to set up a proper TypeScript project structure with compilation, then write the game logic directly in TypeScript.\n\nDefining the tetromino shapes...\n\nNow I'm laying out the core game state structure with the board, current and next pieces, and tracking score, lines, and level. I'll need to implement collision detection, rotation with wall kicks, line clearing, and a ghost piece preview. Let me start writing the TypeScript implementation...\n\nWriting the game logic... Writing the Tetris implementation... Defining the tetromino pieces and their colors...\n\nActually, I need to reconsider how to handle the O piece—whether to use a 2x2 grid or pad it to 4x4 for consistency with the rotation system. Let me go with the standard SRS definitions where the I piece uses a 4x4 grid and the O piece stays as 2x2 since it doesn't rotate.\n\nFor wall kicks, I'll implement basic offset logic rather than the full SRS tables to keep things simpler but still functional. Now I'm writing out the TypeScript implementation with the core constants, types, and tetromino definitions.\n\nWriting Tetris game code... Finishing up the tetromino definitions, then setting up the game constants for scoring and drop speed mechanics.\n\nNow I'm writing utility functions to handle piece rotation by transposing the matrix, creating a fresh game board, and cloning boards for state management.\n\nSetting up the main game class with canvas contexts for the main board, next piece preview, and hold piece display, along with tracking the current piece, score, level, and game state variables. Setting up the canvas dimensions and initializing the game state with a fresh board, score tracking, and spawning the first piece before starting the game loop.\n\nNow I'm implementing the piece spawning logic, randomly selecting from available Tetromino types and positioning them at the top center of the board, with special handling for the I-piece which needs to start slightly higher.\n\nContinuing with collision detection...\n\nNow I'm implementing the lock mechanism that places the current piece on the board once it can't move anymore. I iterate through the piece's shape, mark each occupied cell with the piece's color, then check if the piece spawned above the visible area to trigger game over. After locking, I clear any completed lines, reset the hold ability, and spawn the next piece.\n\nNow I'm handling line clearing by checking each row from bottom to top, removing complete rows and adding empty ones at the top while tracking how many lines were cleared. I'm then updating the score based on the number of cleared lines multiplied by the current level, recalculating the level based on total lines cleared, and adjusting the drop speed accordingly.\n\nWriting game mechanics... Writing game mechanics... Writing the drawing functions... Still writing the rendering logic... Drawing the active piece and pause overlay... Writing the preview rendering... Finishing the game over display with the score and restart prompt, then moving into the game loop where I'm handling the timing delta and managing the piece drop mechanics with a counter that triggers locking when the piece can't move down anymore.\n\nNow I'm handling the delayed auto-shift for horizontal movement, where holding left or right builds up a timer that triggers repeated moves after an initial delay, then continues at a faster interval. Still writing input handler...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4729,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","uuid":"7b318f21-96a4-40d6-a39a-eed80f99a0af"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01E7raw3DA8tdG67buyvGwqJ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris game with all standard mechanics:\n\n1. All 7 standard Tetris pieces (tetrominoes): I, O, T, S, Z, J, L\n2. Piece movement: left, right, down\n3. Piece rotation\n4. Line clearing\n5. Scoring system\n6. Increasing speed\n7. Keyboard controls\n\nLet me plan the structure:\n- `index.html` - Main HTML file\n- `src/tetris.ts` - TypeScript source\n- We'll compile to JS or use a simple setup\n\n\n- I'll keep it simple with TypeScript that compiles to JavaScript, then reference the compiled output in the HTML file.\n\nNow I'm laying out the core game structure: a standard 10×20 board with the seven tetromino pieces, each with their own color, plus tracking the current piece position and rotation, next piece preview, score metrics, and game state. The mechanics involve gravity pulling pieces down automatically with speed ramping up as the level increases.\n\nFor controls, I'm mapping arrow keys for movement and rotation, space for instant drops, and P to pause. The scoring follows classic Tetris rules where clearing multiple lines at once gives exponential bonuses, and the level advances every 10 lines cleared.\n\nWriting the TypeScript implementation... Defining the tetromino shapes... Defining the remaining Tetris pieces...\n\nI'm noticing the piece definitions are inconsistent—the I piece uses 4x4 matrices while the others are 3x3. I should normalize everything to a uniform grid size to keep the rotation logic clean. Let me redesign this with all pieces fitting in a 4x4 grid for consistency.\n\nDefining the Tetris pieces... Defining the tetromino pieces with their rotation states and colors... Defining the Tetris piece rotations... Defining the piece rotations... Defining the rotation states for the remaining Tetris pieces... Defining the rotation states for the remaining Tetris pieces... Defining the Tetris game constants and piece definitions...\n\nNow I'm thinking through the scoring system—single lines give 100 points per level, doubles are worth 300, triples 500, and a full Tetris clears four lines for 800 points, with soft drops adding a point each.\n\nI need to handle the game loop with `requestAnimationFrame` to track time and manage gravity, where each level increases the drop speed, starting at roughly one second per drop at level one.\n\nWriting the Tetris implementation... Defining the tetromino shapes... Defining the rotation states for the S and Z tetromino pieces... Defining the game class... Setting up the canvas contexts and DOM elements, then initializing the game board with an empty grid, spawning the first piece, and wiring up the input handlers to start the game loop.\n\nNow I'm handling keyboard input for game controls—checking if the game is over to allow restart, toggling pause with P, and then mapping arrow keys to piece movement and rotation, with Space for hard drop.\n\nContinuing with game logic... Writing rotation and wall kick logic... Writing the game logic... Writing the rendering logic... Writing the render loop... Writing overlay text... Writing the game loop and reset logic...\n\nNow I'm setting up the HTML structure with styling for the game board and UI elements. Still writing styles... Building the game interface... I'm setting up the TypeScript configuration with ES2017 as the target and DOM libraries, then defining the build scripts to compile and watch for changes. Now I need to think through the DAS mechanic—how holding left or right will make the piece move repeatedly after an initial delay.\n\nI'll track key states with keyboard events and implement a 150ms delay before the piece starts shifting every 50ms. Rather than overcomplicating things with too many features, I'm going to focus on getting the core mechanics right: all seven pieces with proper rotations, a ghost piece preview, smooth movement with DAS, wall kicks for rotation, and a brief lock delay so players can adjust at the last moment. I'll skip the line clear animation for now and keep the implementation clean and bug-free.\n\nMy file structure will be straightforward with an HTML entry point, a TypeScript implementation file, and the necessary config files. Now I need to verify my rotation matrices are correct, particularly for the T piece and other shapes.\n\nVerifying rotation matrices... Verifying the rotation matrices for the I, O, and S pieces—the I piece cycles through vertical and horizontal orientations, the O piece stays identical in all rotations, and I'm working through the S piece's four rotation states to confirm the grid representations are correct. Defining the remaining tetromino rotations... I'm verifying the rotation matrices for each tetromino piece, particularly the I piece since its rotations can be tricky with the standard Tetris rotation system. The I piece rotations look correct. For spawning, pieces appear at x=3 (centered) and y=0, though the actual visible cells depend on the shape—the O piece's empty first row means it starts showing at y=1, which is fine. I'm double-checking my O piece definition to make sure it's consistent. Defining the O piece shape...\n\nI'm thinking through how to handle piece spawning and the buffer zone at the top of the board. The standard approach is to spawn pieces with y=-1 so they enter from above, only rendering cells that fall within the visible play area. This way pieces appear to smoothly enter from the top rather than starting with gaps. of their 4x4 grid, they'll appear inside the board. Don't draw cells with y < 0 since the top row is hidden. Looking at the spawn positions for each piece, the I piece has its bar at row 1, the O piece occupies rows 1-2, and the T piece starts with its top at row 1 and stem at row 2 — so they all have that same 1-row gap at the top of the grid. I'm going to redefine the piece shapes so the 3x3 pieces (T, S, Z, J, L) sit at the top of the 4x4 grid without that extra empty row, and I'll do the same for the I piece to keep everything consistent. I'm settling on a straightforward approach: all pieces are 4x4 matrices that spawn at y = -1 (just above the visible board), and I'll simply skip rendering any cells with negative y-coordinates. This way, the game logic stays clean and the spawn position naturally handles the different piece shapes without needing special cases. Looking at my earlier implementation, the collision detection already handles cells above the board correctly by allowing negative y values, and the drawing logic only renders cells that are actually visible on screen. This approach keeps things simple and avoids the game over detection issue.\n\nNow I'm thinking about adding lock delay to make the game more playable—when a piece touches the ground, instead of locking immediately, I'll give the player a brief window (around 500ms) to move or rotate before it locks. This is a standard Tetris mechanic that significantly improves the feel.\n\nWriting the complete implementation... Defining the piece shapes... Defining the rotation states for the remaining Tetris pieces... Defining the piece rotations...\n\nI'm realizing I need to reconsider the O piece positioning for consistency with how the I piece spawns. The I piece in its standard rotation has an empty row at the top when it appears, which matches the SRS standard. I should verify the O piece follows the same convention.\n\nLooking at the spawn positions: when pieces spawn at y=0, the I piece's blocks appear at board row 1 (leaving the top empty), while the other standard pieces like T, S, Z, J, L have their blocks starting at row 0. The O piece should match this pattern too, appearing with its top at the board's top row when spawned. Verifying the S, Z, J pieces and their rotations - S has the right cells stacked on top with left cells below, Z mirrors that pattern, and J has its corner piece positioned at the top-left with the body extending right.\n\nNow I'm thinking through the complete implementation, particularly how `lockPiece` should handle pieces that extend above the board at y < 0, which would typically signal a game over condition since those cells can't be placed on the board.\n\nFor spawn detection, I need to check if the newly spawned piece immediately collides with existing blocks—if it does, that's game over. My `isValidPosition` function already handles this by checking if any cell at y >= 0 is occupied on the board, so the collision detection should work correctly for the spawn condition.\n\nNow I'm thinking about DAS (Delayed Auto Shift) to make the controls feel responsive. I want to track held keys and implement a delay before auto-repeat kicks in, then repeat at a faster rate. I'll manage this with timeouts and intervals tied to each key press.\n\nSetting up DAS handlers... I'm thinking through the visual polish—adding block highlights for depth, translucent ghost pieces, and maybe a line clear flash, though that animation might be overkill for now. But I'm realizing my DAS implementation has a flaw: it won't respect pause states, so I need to add pause checks in the action callbacks. Also, soft drop scoring should happen in the game loop itself rather than in keydown handlers to keep concerns separated. Actually, I think a cleaner approach is to track key states directly in the game loop instead of using setInterval callbacks.\n\nWriting the implementation... Defining the piece shapes and rotations... Defining the rotation states for the remaining Tetris pieces... Defining the piece rotations and types... Setting up the game class... Setting up the piece spawn logic and validation...\n\nNow I'm implementing the collision detection to check if a piece fits within bounds and doesn't overlap with placed blocks. The move function handles shifting pieces left, right, or down while validating each position, and resets the lock timer when pieces successfully move downward. For rotation, I'm attempting the standard rotation first, then trying wall kicks if that fails.\n\nWriting game logic... Now I'm handling the line-clearing logic by removing completed rows and shifting the board down, then updating the score based on how many lines were cleared and the current level. I also have a ghost piece function that calculates where the current piece would land if dropped straight down.\n\nSetting up the game loop to handle timing and piece movement, where I track elapsed time between frames and apply gravity at a speed that increases with the level, plus implementing lock delay so pieces don't snap into place instantly when they hit the bottom.\n\nNow I'm wiring up keyboard input to handle game controls like movement, rotation, and pause, with special handling for game-over and paused states, plus implementing delayed auto-shift for smoother left and right movement. Setting up the DAS (Delayed Auto Shift) system with timers that handle the initial delay before rapid-fire key repeats, then clearing those timers when keys are released.\n\nNow I'm updating the UI to display the current score, level, and lines, then drawing individual blocks on the canvas with shading and highlights to create a 3D effect. Writing the rendering logic... Writing the game rendering... Writing the game over screen... Refining the keyboard event handling to prevent default scrolling behavior for game controls regardless of pause state, then selectively applying preventDefault only to the relevant arrow and space keys.\n\nNow I'm thinking through the HTML structure—I want a dark-themed layout with the game board on the left and a sidebar on the right displaying score, level, lines cleared, and a preview of the next piece. I should also add a title and some visual polish to make it feel polished.\n\nBefore I start writing everything out, I need to decide whether to include build instructions or make this directly runnable in the browser—since the user wants a playable game that works immediately, I'm leaning toward including pre-compiled JavaScript so it just works without any setup.\n\nLet me structure the project with TypeScript source files, a tsconfig for compilation, and a package.json with build scripts, then I'll also add some visual enhancements like a gradient background and animated elements to make the game feel more impressive.\n\nI'm noticing a potential issue in the game loop where the lock timer logic might not properly handle game-over states when a new piece spawns. Refactoring the lock method to place valid pieces on the board first, then flag if any cells ended up above the board boundary to trigger game over. Finishing the lock method...\n\nI'm completing the `lock()` method to place the piece's blocks on the board, skipping any cells above y=0, then clearing completed lines and spawning the next piece. For `spawn()`, I'm setting up the new piece with the queued type, randomizing the next one, and checking if placement is valid—if not, the game ends. Now I'm looking at the game loop's drop and lock timer logic to make sure the piece locks correctly when it can't move down anymore. I see the issue now—the lock timer increments every frame regardless of gravity ticks, so I need to reset it whenever the player successfully moves or rotates the piece while it's grounded, not just on downward movement. This matches standard Tetris behavior where any action resets the lock delay timer. I need to think through the lock timer logic more carefully. The key insight is that gravity moves should reset the timer (keeping it null), but horizontal moves should restart the countdown by setting it to 0, giving the player more time to position the piece before it locks. I'm also considering tracking whether the piece is on the ground as a separate state to make this cleaner.\n\nImplementing the lock timer logic... Finishing the lock timer logic...\n\nThe key insight is that when a soft drop successfully moves the piece down and it lands on the ground, the lock timer should restart from zero at that position, giving the player a fresh window to make adjustments before it locks. My main loop handles this naturally by checking `isOnGround()` after each move and initializing the timer accordingly.\n\nBut I'm realizing the timing gets messy when gravity and player input both trigger movement in the same frame—I could end up dropping twice. Rather than overcomplicating this, I'll go with a straightforward approach: use a simple 500ms lock delay where the timer cancels whenever the piece successfully moves down, whether from gravity or player input, and locks once the timer expires after the piece gets stuck. I'm going to simplify this and just implement a basic lock delay where the piece locks a fixed time after touching the ground, resetting only when the piece actually moves to a new position. Writing the Tetris implementation... Defining the piece shapes... Defining the S and Z piece rotations... Defining the piece rotations... Setting up the game state variables...\n\nNow I'm initializing the canvas dimensions, creating the game board, spawning the first piece, and setting up the game loop with event listeners.\n\nI'm resetting the drop and lock accumulators, then defining helper methods to get the shape cells for a piece and validate whether a piece can be placed at a given position by checking bounds and collisions.\n\nStill writing game logic... Writing game logic... Writing game loop logic... Writing event handlers... Setting up the DAS (delayed auto-shift) system to manage key repeat timing, storing timeout and interval IDs in a map so I can cancel them when keys are released. Then I'm updating the UI elements to display the current score, level, and line count, and starting to implement the block drawing logic.\n\nDrawing individual blocks... Writing the rendering logic... Writing overlay UI... Writing the game restart logic...\n\nNow I'm setting up the HTML structure and CSS styling for the game board and sidebar, planning dimensions around 470px wide and 600px tall to fit nicely on most screens. I'm also realizing the DAS timeout handling in `startDas` is actually fine since the timeout fires before the interval overwrites it. logic checks out. Now I'm ready to write the final implementation to files. I'm skipping the high score feature to keep things focused, and I'll set the initial UI values directly in the HTML rather than calling refresh functions unnecessarily. Let me also verify the drop speed progression—it starts at 1000ms and accelerates as levels increase, bottoming out around 65ms at higher levels.\n\nFinalizing the speed formula...\n\nI'm defining a lookup table with drop speeds that decrease gradually from 800ms at level 1 down to 50ms at level 13 and beyond, giving a smooth difficulty curve without needing a complex mathematical formula.\n\nActually, I think an exponential decay formula would be cleaner—using a base of 0.85 means each level multiplies the speed by 0.85, so level 1 starts at 1000ms, level 2 drops to 850ms, and it bottoms out at 50ms around level 16. This feels like a better approach than the arbitrary lookup table.\n\nNow I'm ready to actually write the code. I'll set up the project structure with an HTML file, TypeScript source, and config files, then handle keyboard input properly by preventing default scrolling behavior on game keys. I'm keeping the feature set minimal and classic—no hold piece, just straightforward Tetris—and I want to display the high score prominently in the UI.\n\nFor the visual polish, I considered adding a flash effect when pieces are about to lock, but the ghost piece already provides enough feedback, so I'll skip that and keep things clean. Let me start writing the actual implementation now.\n\nWait, I need to think through the line-clearing logic...\n\nwhen I splice out a full row and unshift a new empty one at the top, the indices shift. After removing row r and adding the empty row, what was at r-1 moves to r, so I need to recheck that same index. My loop structure handles this correctly—the r++ after clearing cancels out the loop's r--, so I stay at the same index to check what just shifted down.\n\nAlright, the sweep logic is solid. Now I'm ready to write out all the files. I'll use a two-canvas approach with the main game board on the left and a sidebar on the right showing score, level, lines cleared, and the next piece preview. Dark theme with cyan accents to match the I-piece color.\n\nWriting the TypeScript implementation and HTML layout now... Score, level, lines displays - Controls reference. Let me write everything now.\n\nI'm realizing the keydown handler will fire repeatedly when a key is held down, and each time it calls `startDas`, which cancels the existing timeout and creates a new one. This prevents DAS from ever actually activating since the delay keeps getting reset. I need to add a check in `startDas` to skip if that key is already in the DAS map, so the initial timeout can complete without interruption.\n\nWriting the game loop and rendering... the timeout fires and `stopDas` is called simultaneously—there's a potential race where the interval gets created after `stopDas` checks the map but before it deletes the entry, leaving a dangling interval. I need to ensure the cleanup is atomic or that the timeout callback checks if the entry still exists before creating the interval. the same moment as the timeout fires? There could be a race condition in JavaScript? No - JavaScript is single-threaded. The timeout callback and the stopDas call can't execute simultaneously. ✓\n\nWhat if stopDas is called right before the timeout fires?\n1. `d = this.dasMap.get(key)` → `{ t: <timeout>, i: null }`\n2. `clearTimeout(<timeout>)` → cancels the timeout ✓\n3. `clearInterval(null)` → no-op\n4. Delete map entry\n\nBut what if the timeout was about to fire and our `clearTimeout` runs right before it? `clearTimeout` will cancel the pending timeout callback. ✓\n\nThe event loop guarantees that setTimeout callbacks and synchronous code can't interleave, so the DAS logic is sound. Now I'm ready to write out the full implementation. I'll also add high score persistence using localStorage to track the best score across sessions, displaying it in the sidebar alongside the current score.\n\nWriting the event listener... I'm handling keyboard input with DAS (delayed auto-shift) for left/right movement, using `e.repeat` to skip auto-repeat events and manage the timing manually instead. For rotation and hard drop, I'm preventing auto-repeat entirely since those should only trigger once per keypress. Now I'm thinking through the visual style and color scheme for the game. I'm settling on a clean dark theme with a simple terminal aesthetic using a monospace font, then considering a gradient background approach for something more modern before deciding on the final styling direction.\n\nBuilding the HTML structure... Writing the stylesheet... Still writing styles...\n\nI'm settling on a 140px sidebar width to give the labels and values more breathing room, and the 300x600px board dimensions should fit well on most screens with the title and controls taking up additional space. Let me finalize the implementation now.\n\nActually, I need to verify the next piece preview canvas—it's 4×30px blocks, so 120px total. The tetromino shapes fit in the top-left area, but centering them in that space would look better. I'm calculating the bounding box of each piece and offsetting it to center within the 4×4 grid, though the pieces have different offset patterns depending on their orientation.\n\nWriting the render function... I'm finishing up the loop that draws each block at its centered position, then moving on to set up the actual project files—I'll need package.json, tsconfig.json, index.html, and the main tetris.ts file to get this working.\n\nWriting the TypeScript implementation... Defining the piece shapes... Defining the rotation states for the S and Z pieces... Defining the piece rotation states... Setting up the Tetris class with canvas contexts for the main board and next piece preview, initializing game state variables like score, level, and lines cleared, and setting up input handling with a debounce system for directional controls. Setting up the piece spawn logic with initial position and rotation, then checking if the piece is valid on the board—if not, the game ends and I save the best score. I'm also defining helper methods to get the shape of a piece and validate whether a piece can occupy certain cells without colliding with walls or existing blocks.\n\nNow I'm implementing the movement logic, where I calculate which cells a piece occupies by iterating through its shape matrix, then attempting to move the piece by checking if the new position is valid before updating it.\n\nWriting game mechanics... Writing game logic... Writing input handler... Writing the input handler logic...\n\nNow I'm handling the cleanup for repeated key presses, clearing any existing timeouts and intervals before setting up new ones. Then I'm checking if the current score beats the best score and saving it to localStorage if it does, along with refreshing the UI to display the updated score, best score, level, and lines cleared.\n\nDrawing block elements... Continuing the render method... Writing the overlay UI... Writing the next piece preview... Finishing the restart method and initializing the game...\n\nNow I'm tracing through the locking mechanism to verify the flow works correctly—when the piece can't move down anymore, `isLocking` gets set to true, then the lock happens and `spawn()` resets the flag, which should handle all the cases properly. ), so I'd just use `%=` to keep only the remainder after dividing by the interval—that way we don't accumulate excess gravity across frames and the logic stays simple. Simplifying the gravity check...\n\nI'm realizing that using a simple `if` statement means the piece only drops once per frame, even if the accumulator has built up multiple intervals worth of time. This could cause the piece to fall slower than intended during frame drops, but at normal framerates it should be fine since the accumulator won't accumulate much between frames. exactly 1 interval → 1 drop. Fine.\n\nAt Level 13+ (50ms interval), if the game lags for 1 second: `dropAcc` = 1000ms = 20 intervals. We'd process 1 interval per frame, taking 20 frames to catch up. At 60fps, that's ~330ms. During this time the piece seems to fall at 2x speed (since each frame processes 1 drop but occurs every 16.7ms instead of every 50ms). Actually it would fall at 60 drops/sec instead of 20 drops/sec - 3x faster. This is acceptable behavior.\n\nOK, using `if` is fine. Let me use it.\n\nBut wait, there's a subtlety: if I use `dropAcc -= interval`, then the leftover accumulates. Next frame, `dropAcc = leftover`. If leftover > interval because the lag was so severe, we might still be behind. Using `if` instead of `while` could cause permanent lag buildup.\n\nI'll use the modulo operator to clamp the accumulator, so if `dropAcc` exceeds the interval, I process one drop and reset the remainder to zero, preventing any deficit from carrying over. I also want to reset `dropAcc` whenever the piece locks to give the player a fresh start.\n\nWhen the player soft drops, I reset `dropAcc` to prevent double-dropping. The logic feels solid now, so I'm ready to write the final implementation.\n\nI'm thinking through the `isLocking` state check in the game loop—specifically how it handles the case where gravity tries to move the piece after it's already locked. I'm accepting the infinite reset behavior for now since it mirrors standard Tetris mechanics, even if it's more lenient. Now I need to set up the event listeners, making sure to prevent default scrolling for game keys regardless of game state, so I'll move the preventDefault outside the pause and game-over checks.\n\nSetting up keyboard handler...\n\nI'm setting the canvas dimensions programmatically to avoid layout shifts, with the board at 300×600 pixels and the next piece preview at 120×120 pixels.\n\nBefore writing the final code, let me verify there won't be any TypeScript issues—checking that my array type syntax is consistent, localStorage parsing is safe, and canvas element IDs match between HTML and JavaScript.\n\nNow I'm considering whether to implement a 7-bag random piece generator instead of purely random selection...\n\nImplementing 7-bag randomization... Defining the piece shapes and colors... Defining the rotation states for Tetris pieces... Defining the rotation states for the remaining tetromino pieces... Setting up the Tetris class with private fields for the current piece, next piece queue, score tracking, game state flags, and input handling with a debounce system for key repeats, then initializing the canvas contexts and DOM elements in the constructor.\n\nNow I'm setting up the canvas dimensions, loading the best score from local storage, initializing the game grid and piece queue, and kicking off the game loop with input handlers.\n\nI'm defining a helper to create a fresh grid and implementing the piece bag system for randomized Tetris piece selection.\n\nSetting up piece spawning logic... Writing game logic... Writing game logic... Still writing game logic... Writing the input handler... Writing the rendering logic... Drawing the board background and grid...\n\nNow I'm rendering the active tetromino piece and its ghost preview, checking each cell in the piece's shape matrix and drawing blocks at the appropriate positions with reduced opacity for the ghost. Writing the overlay UI... Writing the next piece preview... Resetting the game state with a fresh grid, clearing the score and level counters, initializing the piece bag system, and then spawning the first piece. Now I'm setting up the HTML structure with a dark theme for the interface.\n\nWriting the styles... Still writing styles... Still writing styles... Setting up the TypeScript configuration and package.json to compile the game code from the src directory into a bundled output file.\n\nNow I'm creating the actual files and checking the directory structure, then examining the offset calculations for the O piece to make sure the positioning logic handles non-integer values correctly. 0 = 1\n\nSo the O piece is positioned at grid coordinates (1,1), (2,1), (1,2), (2,2) in the next preview—that's nicely centered. Now I need to verify the I piece placement in R0.\n\nThe I piece spans a single row with four blocks, giving it dimensions of 4 wide by 1 tall. When I calculate the offset, I get ox = 0 and oy = 0.5, which means the blocks would render at y = 1.5. That's a fractional coordinate, so they'll appear slightly blurry on the canvas, but I should probably round this to keep things clean.\n\nNow I'm working through the T piece in its initial rotation. It has a width of 3 and height of 2, with the stem pointing down from the center of the top row.\n\nThe offset calculation gives me ox = 0.5 and oy = 1, which means the piece would render at fractional pixel positions. To keep everything aligned to the grid, I should round these offsets instead, which gives ox = 1 and oy = 1, positioning the T piece cleanly at column 1, row 0.\n\nActually, I'm reconsidering—sub-pixel rendering on canvas should handle fractional coordinates fine, so the exact values might give better visual centering. But wait, there's a real issue: when ox = 0.5 and a block column is 1, the pixel position becomes 1.5 * 30 + 1, which could cause rendering artifacts.\n\nFor pixel-perfect rendering, I should round the offset values to integers using Math.floor to keep everything aligned to the grid.\n\nCalculating centering with Math.floor...\n\nActually, Math.round gives better centering results—it places the T piece at column 1 and handles the I piece positioning at row 2, which aligns properly with the preview grid. For I piece: c0=0, c1=3, r0=1, r1=1, pw=4, ph=1\n`Math.round((4-4)/2) = 0` → ox = 0\n`Math.round((4-1)/2) = 2` → oy = 1\n\nI block ends up at row 2, columns 0-3 in the 4x4 next canvas, centered vertically. ✓\n\nFor T piece (R0): c0=0, c1=2, r0=0, r1=1, pw=3, ph=2\n`Math.round((4-3)/2) = 1` → ox = 1\n`Math.round((4-2)/2) = 1` → oy = 1\n\nT piece positions the stem at (2, 1) and the base across (1,2), (2,2), (3,2), centering it nicely. ✓\n\nS piece (R0) uses the same offsets as T: ox=1, oy=1. ✓\n\nFor O piece: c0=1, c1=2, r0=0, r1=1, pw=2, ph=2\n`Math.round((4-2)/2) = 1` → ox = 1\n`Math.round((4-2)/2) = 1` → oy = 1\n\nO piece lands at (1,1), (2,1), (1,2), (2,2), perfectly centered. ✓\n\nUsing `Math.round` ensures all offsets are integers, preventing blurry rendering from anti-aliasing when blocks are drawn at non-integer canvas positions.\n\nNow I'm verifying the TypeScript null-safety: the 2D context assertion is safe since it's always available, the bag pop is safe because I check the length first, and I'm casting DOM elements appropriately. Everything checks out, so I can start writing the implementation. `parseInt` returns `number` in TypeScript, and `NaN || 0` evaluates to `0`, so that handles the edge case. Now I'm ready to write out the actual code files—I'll skip adding a UI button for restarting since keyboard controls are sufficient. For keyboard event handling, I should make sure the game captures input properly by either setting focus on the body or listening at the window level, though `document.addEventListener` should work fine regardless of focus state.\n\nI'm also going to prevent spacebar scrolling by calling `preventDefault()` early in the keydown handler, which I've already got covered. For responsiveness, the board and sidebar together take up around 444px, so on smaller screens I might need to add some CSS scaling to keep everything visible.\n\nActually, let me just keep this as a desktop-focused game for now and skip the responsive scaling—it gets complicated to get right. Time to write out the actual files!","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","uuid":"718d7b3f-c29d-4e41-a38b-473f11b6e16a"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01E7raw3DA8tdG67buyvGwqJ","type":"message","role":"assistant","content":[{"type":"text","text":"I'll build a complete, fully-featured Tetris game with TypeScript. Let me set up the project structure first, then implement everything."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","uuid":"b3ea33ff-6019-4f1f-b2f9-98c120a59098"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01E7raw3DA8tdG67buyvGwqJ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QVZaEhxs87Dg44AtR88phz","name":"Bash","input":{"command":"ls /tmp/loop-bench-3fkpubdq","description":"Check current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","uuid":"34c27159-81b8-4508-825f-71e5bb9546ae"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":912715,"duration_api_ms":85890,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"9160c245-c9ca-4da0-a64f-1ee14b0a2b83","total_cost_usd":1.09602045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":71790,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.09602045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"d9aea09b-8704-4bf3-8c98-1d730b26be51","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":853804,"duration_api_ms":98364,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"fba1abd5-3f49-4f97-9a20-49403ccbbc22","total_cost_usd":1.09916235,"usage":{"input_tokens":3,"cache_creation_input_tokens":4727,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4727},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4727,"cacheCreationInputTokens":4727,"webSearchRequests":0,"costUSD":1.09916235,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"e8fa9198-2305-4d97-b66b-c7b0b9b6c4b2","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 6, - "tool_calls": { - "total": 0, - "bash": 0, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 21 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 21 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.557729+00:00", - "wall_time_seconds": 854, - "exit_code": 1, - "completed_at": "2026-04-04T09:21:23.215891+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,6 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-rapthkjt","session_id":"fba1abd5-3f49-4f97-9a20-49403ccbbc22","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"49640462-e2f5-49a7-9190-b7a11af5012d","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01H3hjYiqW5qBbEXdsQTCzby","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser, built with TypeScript. Let me create a complete Tetris game with:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z/X for rotation)\n\nI'll create:\n- `index.html` - The HTML structure\n\n\n- `style.css` - Styling for the game\n- `tetris.ts` - The TypeScript game logic\n- `package.json` - For TypeScript compilation\n- `tsconfig.json` - TypeScript configuration\n\nFor the setup, I think the simplest approach is to create a self-contained solution where I compile the TypeScript and serve it directly, or use an HTML file with inline TypeScript that gets compiled to JavaScript.\n\nLet me go with a clean structure: I'll set up an `index.html` file, write the game logic in `game.ts`, configure TypeScript with `tsconfig.json`, and add a build script to `package.json` that compiles everything to `game.js`.\n\nFor the actual game, I'm planning to implement the core Tetris mechanics: a 10x20 grid with all seven tetrominoes in their standard colors, collision detection with wall kicks, lock delay, and a ghost piece preview. I'll add features like next piece preview, hold functionality, and a scoring system that rewards singles through tetrises with increasing points. The game will speed up as levels increase, and I'll track lines cleared and display the current level. I'm also including pause functionality and proper game over detection, with controls using arrow keys for movement and rotation.\n\nWriting the TypeScript game code... Setting up the game board and piece definitions... Finishing up the tetromino definitions with the Z piece, then moving on to build out the full game structure. I'm planning the file organization with separate TypeScript source, HTML entry point, and configuration files, then I'll write the complete implementation with proper compilation setup.\n\nWriting the game code... Defining the tetromino shapes... Defining wall kick offsets... Finishing the wall kick offset tables...\n\nI'm defining the core game piece class with its type, rotation matrix, and spawn position, handling the special case where the I-piece starts higher up on the board. The clone method is being set up to create independent copies of pieces for game state management.\n\nNow I'm building out the Board class to manage the game grid and validation logic, checking whether a piece can occupy a given position by testing each block against the board boundaries and existing pieces. Writing rotation logic...\n\nNow I'm setting up the main game class with properties for tracking the current piece, next pieces in the queue, and the held piece for swapping. I'm also initializing game state variables like score, level, and lines cleared, along with timing properties for the drop and lock mechanics that control how pieces fall and lock into place.\n\nContinuing with the constructor and helper methods...\n\nWhen spawning a new piece, I'm checking if the bag needs refilling, then pulling the next piece type and creating a new Piece instance. I also need to validate that the spawned piece doesn't immediately collide with existing blocks—if it does, the game is over. The hold mechanic resets so the player can use it again.\n\nFor the start method, I'm resetting all game state including the board, clearing the next pieces queue, and initializing score, level, and line counters back to their defaults.\n\nSetting up the game loop now... Writing movement and drop logic... Still writing rotation logic... Writing game logic... Writing the Renderer class... Writing the block rendering... Finishing the grid rendering and then drawing the active board cells, checking each position to see if it's occupied. For the ghost piece preview, I'm calculating where the current piece would land and rendering it with a semi-transparent appearance to show the player where it'll drop. Writing the preview grid...","signature":"EtmgAQpbCAwYAipAiyJLJvdq4tv2p5tP1Gf0PG5VC8/hbZHf2omqbizsZ3bjOy2U/0BcnfgnXBvVAsX6j0ymmGws/OO1H5iJngbvrDIRY2xhdWRlLXNvbm5ldC00LTY4ABIMP1tlCwqRGfbieUXJGgyksf8lh/kw+j/mjhIiMA2pvi1m88WccbM7rHVd9GHcqTO88CBYcxEpfOzscCQcznpJoQv5YeAAFiab9RVmDyqqnwH5NMZjRoDYdATQtwNxDBLgX0+VBL5682ZXwC6GiGLdHpgphgqkT5kwTQrZBhmTNdmStl4zU5MWmEx/a0RX4rRY8DectuLzAPIT28x6AOOQ0kFaZzednR9JplByK0MA6IaiewcaPipDxvgO3gLJ8I1VybtO/yO1gdDu6HuftPG3aO2G6pvi5r/Kfqv0tIHz93lxYNlunYeSDcQplU1yjwMZ6mzTUfK48+3aYSCAuADiO6rzHE79HO48eyKLaNeHKu++nIEqOY5YYVZRlw5zpFxus3TwA9DY1QsDbar4VqyUgyQYDp9wWtmvwnN6wHQyEY7moaOTZ9FCHiLljo0Yej01jP7PQ4p4SB6E9iI7/0RGmvWnvwOwDGbZx8jqKY/YXPPzrVT4htgtcWvifAgmztc6pVUgae2cjG83cMAQwrPp4btYyXQUZV7yakuMoWImrOtDfGVJS9RIOdH4ysqbB/pEhBq/Yy4+fEZLOKiQgUmxvawKJ8VrGmPMJ2YAsbO8lRsrcaS2l4O996V3wwfZx6kr0V4rxyFakHkt9cf/ffQp1Ry0nRx7aQhqGmmEFZME3njzzuz57spoujtkyUBWskoGRmeJCnu1nBxYghOc7dxePiSvcQ0pB0SCrD38wXQQvxiaMdH1FGEFOXiOfKvjCwnqoCRHk887xlt2pJTR6yQxp/lt4ih7P7T05WhHqEn3f1lV4DtY6raNJaFhdBv7IiI2/ioSDFqNo6+dhi6gOTbcVWz6ohoXqraVO7xrcTyFyiXTct1xgirDn264LbbKQvO288Fgnp8r1fAoPss4TgxhSBYm4wxjo/t2vE7DIjcewc6wdYdJR8oUIlcIK3jcMPD4MdpjPTCLphvHVtcVTLQh0/VfCHj+Dowg56SvrCyDgE2JTqH6JE7IvhZe06jX29FVCqGkl+NTyf1P0SF6TJhkR7c3uSn0VJalNgiKRdd3p67XTJA87JdDmzr5FZsD5HA3L78XFNbNFG7YVXTu1XLLffb9K/x9T5HqgkZa72txvdoKvM5zt8plwMu6AgGPD0s1momH14T9ARF+UlxEg6LHS9Sk2C7welcHEUeoxJe3sVC3F2GKtNaqhM3dbDQy6YoedD5VPNfIOPh6samRd43PWbeRsq3B4z8/WOx5TltKeJaLkq6f8nu3fF0nWiWp3fT/r57lUivq1eBC81Nyj7W1g4Q1ge075RqmT06/EQWmoXynSHNXCcf9oPoosFgZQ6Qsz7ZJ26bkossD30zWdva8soV6RQdiaTKDzc9JFf6hjHDcogKRhQYmbRniWmV1kg/JT8fdCjy0rfM6Bo1nSr0m6P6gjBXJ6npClzaCTAZbCqiw0AKlHBRX7GLcgnfc3Ce+hZYNDym2s1BA6P7N/z8YTHFm6m4d3WVA6Co4UldWhlmOvOtwbPAU9xXsCvCXZc8af/OPKGUIx6bYTwjKNOCKzBKNaAR+rw3xQBNo04Wxkyf3IeDZJmPGb/c2FqXTxrqtxlaOUHwknqBiYS9lZ+eVGDQj/CZO0ucIVFYyXwILbKWGXYtu6e76KHb6GyiGf7/bm4C3cjTnEOf3ve/57RVBKNI7l5VE534kgl5oFbhptsCkJ9+SZhlez37Vz1XAbHVLZ8LWiOaG2aRhYeD9dqYinWXBU8RnVorFzXqI5fDakIZY73Jb1Fdw1aFjP50VnmLZdsY1M3hFxwYb4L+cZUGmoGEz0NrowiI7PyuEQvZWbwmb+3CWvcrgBAPsZY5aSMOCycgFJ8dEfavyiwQFZKwxay/vbYO/nxZUSx+WvQwdsOONcC1Ol1L24vF8u9aAmmDkYTCp4NsdZ45D+wGeiAt9x4cLmt48yLP4NmutFQ6YtYgChxBkMm5Fj4bW5dvk/zpwjGMWRSNUWLQKTfQkNM9FrsjEbCx5+K/Saj9chI6bZgTvc+fotiFHjZtoUVqb+/pOH93JENT5cb+5PgLfa2D5nHlRo8sNuXfBNdFLyR8d9AHCH+um1QpM4LAZQZAkvrnOujc/0QTk9PTvEHVfvtrFT+49PQYBv5+Mb7KjXECoOnd+ZIu150eDPJvR5Bh0QcjMMy9Mf3dCQo2cETaD5/9M51VF4TKQNrTijqp6DQkFoxxuTpzhCaleI1p4opzNGWwwLVHNyCHx/IfotHrkM58NEu4nkREXyORm14NSSoA46aG61/Gn3VyRFJAIdfNL37RiDngpwVn6Lb7N0b1uZUp06z0KXoz/V8sPlSHGNpnS76QuCNPu3YnGLG2+WaIisiPB2Vn65s2oI3HNJF8ypcOSXo1WrEqlkcoywMRSc95aH6IgNzYriB6hLvVWE8QJeYxXmkuGBOW503XvqAIqEbOkG/AmQVt86aRHE31fL4loTCRKddeOGP2kRfk9wcdqj1/pAodAtmi29nfZw/ZayuyWAKbgyEAVfwSu5ji+CxMRE2IRbyo+K/qpE96xDGS87ukRaJUshL71Qjpb7G2a6W0ugk2qsVQmwCxS0T8bI7LLphuAtz06knEk4sZiKZboNS91ftjGgRf1uPFsHtYH2TKnnQLbFyLScESGu+p1sKBVSRKj2ByoEwgCFyI+ucbBQGIkCqN62Oo3Nbf7vLtLlHUSkVqlpa8Gb1YdCW8VwALh68bUUONpS+Ihd7kBOFpzy/yHwac3wbRfF41m0PeZRqffr0PdPJMjNwFhlypl4fIPA0ag/66zxeqnwHj1on+/Stdeuw7CG9uD9GY8XlOpjop44m4nrEpwjKgxPLYeVVfBdg/hzXczitBD9atTUsOL5N1YvYO17J550bfsx6rYSVgFQflYCzkcPLe1q4BR9PjdF5N6pTO3C9M3gtyMCMNSIg4I2NnUDTeSm0y9HhEslqONwXo2vRTXm9xNfK1RLN2nbgP9FFTgJK9Z5AtbAkxRuynAPBBxmOObB9njK21/8pO570NBrM09GNNv3IMdpPLtEtuA2PhDoPgIPHY1TISmBcc+CTiFSJwQITqa2FYmOx+T4zTvEzMqh5zmz/HIPpQuOo/2ZPY9Z2dK9tHpMPg1gvqSaphKpzdHiAtWfcXWClFnLXqeHXimukqpk+gWrgiE2F/FdmrjqPpA2QWxAeQG5+UMMUkatukd0ZDZ1JnRlG533+ZOuSjy/63Dw48yCdJiKjG+tIWmAnaLDLASjoiAiT2mvAz5oSM95VgEq4nPRyLYH95VJSLk6YbHNbO8NyF/OHlw3v9TyjHC4SeXwaNTJW2CjENQkfeZO/Mbs7zIfRk4xEOOcQ9J61ALDo2z6Vo/1BrSJpSFevLOp2h1clbvbGI0Cdy3ow+KS/B0J6kxRNkJOipyvKK/dNVS4mxTocR2St4CdrTuUzdj3JIAb6LptS+nM4v5z7IBfyzPrlUU2gDrvhSo20IeT1j0jNYIep+IJMbZ5dE+u5a5OD6txO2f56qwiPYnlCGrGBxQ2acY6DTUJtVYmGbO/39PXt5zDW2NwqKMtR4xhrIEl0HTwJ+Ib25hOgPrxEdUBQ4kEC1VhNIb0xZtYZN7rd4NtjQfVS35qnkVP9vh5CBgMHY274GPF18jIRBff3bDVTNNzlJoYH/o7usykYHSFHZBmMKNRzOz0HB7uQiAQajP4YcTsl7URuKY1f48Hv2i0FaHPGBC+kMh3gt3aq2Z/v7QujSW2/5EcA9G+jqcKvj6bX2WI6cAwQI0lc9eeW+Tug3VWUGPYcrdeogOH59FhFr3ZqLalc5I+yW43ZVy3YHvNuwoXyQ3F/CZuPSc9wsN9Wq1b5bN/6E3V/jbyU89XQCHV0p96pQ0Tx9tzlYik8RwIvfUSG7HCYAj+zhTdZytaIMk2YG+Ul23hYG1KXQFZzD/z9jQBWSca9L86ejfH9QizBE5rS38gJUvALQFO2T3uH88SxqI3O9CkrWOEdeq3n3z3RQO9RGDYLuzB70xhhG7F6V9l/Nh0DbypfbLHNlWw+o52JTg3Y/o48uTERCu8CP+fGtoKNl/4cPtC0jAShA2aUuExMsXAzqbtFeiruadwJoaRvmdetAIu/C8DIe3oWWB4FigoGj6rFGX4SW0Z8nma9oIfEyTExPaxULIQcsL6iWgTI6meMLypND63L2AbWXw4sY7sRxiufpgjVDp1oArCtcGXQTjfu9EgddCkxccaTHql72lctHdEmZbWEvuo3sZVsdL7XNUFjDAsALTsdh8jFX+q2mwsJFggvueboHrr020DI78UcZ0v1FdCggSS2oH6lA0FtJmelqLJsl+kr5Ij4KWCMF61jp2ojytvpaMIyMoFyGFEb06fbJLJhCDwb/vbzqnNskZNJCb9tm7RpUxkb9ySDvSJbQXumCAbCoS3Zq/K2IFgvkNqN0yiERHuAPc1tddyHkcn6uTwA0Xu+E+4Lkl+OwHQ2pUplKZxmt9OMODidqNidFsLuWqh49tIoFrwjuEIN87Plim7h6NSquGhNgoBtW+p3+PKVlY+8yyo0UtPINr8nfd9zkRbBkvYryJEuYliUHMB7bWYXd43a/CiS9zBAN5dzU+BB7TkirzBZZgWEOR5ZHU34VqXjSNC3F1+LQ6pm51PgdHaZEVccEdAtxdqZ+FSkQEa5vDxpBys/vpOkzYw98SqeRc+dIINpVGsfx9+rOrZAQUVfJ7kiZsbJ9A5ner7GlMPmIhIBOnLTHGGP6edjzsfCNiTLvDlwBFARMlG+ofGLWobuEziCeJD54o43s3hizFeidhpM+Zu50ord4U9u1VfAN7jrCXylfEETzCqF0QkImSlm9HACukTiwdBO4y1g0nojmZh/QOk+uUeUiV/XE3NKxBA1nCpbwa3lRL120pNF3OBb2WQoMLh0kc8KVC9BoyXhxvKUkZiwFyFVAkpcwuYuHJE0wzh4CMw99nMABHoJJylYIulMWwZONXxtXv0SkUzO1J9y1E16dM9Wde+i/3fpUoJTeBwPqHFYAQmUodoDqUgLYvDeDvNC19BjA1NHzhaKBqr73a6kJ+OsjMtFV3HteHWR1Un6zGZEkltqjeyzuJMlhRs0KhwDWrjiIW7PlHSghm2BEjDdBR44B2Pu1PKZI5y9ytOoiR+/bzWlaAQBTh4NJTCW34Jgki25Aodmj5kTziY/Jso7MfhvitUIHZPsZDOPtmfUcAlEYiUaprByXM4Vt8GYowwsfdLVvpKumeKxZmY14c8uec3oACHfXX7/Q7ert0MuSrc0bWUDdTxv4K9axQFldNegK4GDRPXrYSeoNrLdAxLouL9l8h1xm/G26yVTcpfFqR8kRUzi68PsRDat/d1qWzMPYck9tB1sGR2ZFOP5IAuO2Zy3A/RInbcA3FnssjcSserWspvSK7gNbKyGOMbIASIrrmyxi6uT3CkhV4SivJqm5pSs6Gv4QJ4OOoAMwJczwxntQ9GsgdsiDhRe5jSTbtC2vbiAdGvANGL4ZDfvWfnommcapf6Je2frYmYLYZ70S+0hxc0xElxcZE7iA2Oh48Ppslok0de15arepVpnHSur6RtzupvdenJrNeP90vOx5CZF1uKdBR7OREXiBhBKDzfvIIGPs6kr9UvILvqg0HpPkW79+g39lrm7LDQZ3bJixtWpR2J5EiZW5d1UTYWU4dWfw8c4Vt8k+wg/cEzuayXECdZbiOULw2e8wG2z3E2p3iInNCLWf41fGXKIaLpfXxWjJfAvS9NejU1D0GRsWbREzbfmWIhRO4cDLTwZMV26jyjgPVJ16jyS4R2zB7SQwBC646cYxaxby7gNSAhk+Fgz/e840Yqym+Zqse6juIWxtMz0VniUBJg+ERu2ygcm27TsVFqglW8xQ3f2TnR9xiXaj/0RPvFmwhw6SDi3EOrR40ccWxN9gBJC+uqNTBWXroLFCDkHnBCD4ye6tgBtdrAziBvvD9DezDcVWZNRnFibNEssOR6FnnKyxFYA/qqZ3+JCeuJ/d2ufGXMHS9fws9uOj7oAssquLECDkuT6gUin84c/o73jpru3gbJnjamhFT0wZpoIABJzpsQl+FK5pKJ4oyggAwkRxFfj6m36z5C4FVKdVJgv2CqxSl3CA1k9v509e1QNImUawsnkaZvV7JbBnsXyuKPA5rLuHWjflDwjplrEPn+GDbZTNsdaBsQ/Po2x5niZZOZf5cwroRzpZ9vxL8w+VqbUjt+HG/gSPoJPny7Q+LfEovohBQ7mTGTfM+T5LX1mZ465etrBTKVrYUU7+KQIyDwRCldddnutk5pW58Fn+RS71MKmJJvuouWp3ISqcr24vJD01nX7cVXMtleS8y7HtYgrNmySLi2IIBAvGiXaxqUJF+DY4FssDa5EbXcnDSmSq8ecnQm3qBcU1oDQkjTN0rxV5e0d4BriCYiNMDHmL8DxgDwMjf/8y98oHPr+JbonKuqMA2/zs60F5pwZrHL5g8yTyc3mMguFepU90nyv+hxk3fPJCw0fADLohAZtzuPBsHM9aIbJrYvRbH/62kwIQQ69/xJj7v200eZIVdaEjFu1rbjuDS69LptDnoWmOwXK1J9plqTkeRZXP4a9E3JdnIAwYn1o171gtTeLnutigEVAQr/R3YFpsgsAyzmfgPJSACi+UlTd4klSa9zvjl0DILYvYGR5hCS6NG8DZP+wDiwjhPL+nYa6+jJwuOGopHQJF4g4LTGb8KiguH31leqj0MDFGQELZZwpiiG6zxIFlXlD1NWSbQTrO4z58uQTHvqxSDRrqXlk4SvnjE/6xpXdt1x7Wn4xjEeFsjQNFdms+j8PZXSnDMYpCShIuaDpl6qGCTBG9FRcqyzubYCqYumTw1Wnf4lB0WTuHioNHIhg/ww/b6Bo/1VsAZYNH2kAVX7e+SLEAF9yniM8x9cc7c4L3/ZsIUuQxLYKHobEct0IUgIrhVxNSjg6Bku0AF8482FYZv3FLEYSsBnczKVJ8if0L4jdkmqzwi70VYAAx+MdKglCDnZIweWHKDcSCS8JLUkpEMQUh3RJa1LgxPqw0pGs6Sqh1loDMeGMrulVJ1R8clJvrv2hAU/AlOHCucqfu7UuBCG6EFhHR66ENBskat/0NjElZprkGJqGSsF+P06VZiQCZaIz7+T5m1oP87FZ52cQzXwop2PgvvAmSUnX/IgJUMkIJclltyqjLQs6d1GjCLPVAkhUi1tAbCk/EOycGcjMOP0q5EEuYSJhnsf5nD77pTvdcCO49MwRYohFCD3V4h2Ta/s36FQ0zsliZqsNp+NYHpxpN6DPwx44+CijbrstLvzKx1Dqvj+BYqwCzORHAJdaMQ/yF+7CbHlHzdqn0XUZTKCxCaQi5XZm1Vuv/HA08OlW52uUcbAHHMeCcRDRXREtf+J/SCnvrppxNEjeIM9i/mfn6GyjSf7zQj7H6xr9YmIiEWa59fT6z2fj8FMQU9a6LT+Q5GCvDuEIOYeIaeKf/QqKKfODejVvrABUsu+qtJYnx0YdXwo5NVFhD6TrPFJmcP9o2mAWvAcVPh7tSd3FI+KR9MLZJu0/kCL9ZSsdHuLzWnDU2OdxE1HAzhPHB+bYjWbVttXr4DMpQ6v+Xy9bqtJnYCGGndM9mzNmYOY8R6gckda0K2CIN7CIpWomTXwc2conmTP7UnUAjKuscdzgtZtDpZcL8tt0ZQ1X0Z43OjLYYEF1Or58JgnKhauIbWLIFeU5rd5+JbiKLz+kya6CmN+rmkCOzFWsm9zZFE4SqgR1PvCtDTRTLQZRIGF1NxKNHG6NHxfNdgJiE/s1B6PMgAesvhclGRn3E+YkfjT8Q19OCjbztH42tsXw+9xBrMAcADWtWGlyJZIJ5/QDcRwQ0QkBhA5UGc2wOVjnH+3dOccJrhLZyRf9U4ind9n4PKmfdEcNkc7Z/y5acblUTJaWoa3wk1WzCABf8fdtdAm3kvbSchw8OVyJwlRNNsx6+0iU6a0wXDKvmgj6xwliG/7iy6m07v36DbqG225gTu9JucZ+vkoCiqp/NGza4s6htR7IU4GoWikFWUIZ6ebQzxENIT/1ywCAyw7nYCinLznceybJQZms2c1+ceLDuHDBPv2gp4ILOq3OKnv3GQDe6vIllRxClkjk+Enfgx5Pfi1iqvR3qIGEOG6p3Hs+MKsoaiEduLp0KPqs8j8gPqw5i+b5crXeG5OQTXHhr6paEtlUqOLkQlh9r+ezIQzO3Ipocc31rK+Zf6BhlojBgiXOygYn3rOgPPcSKDHhwkaoWQI+ulzwcN+RoP/7LBA9h/lB+hkuCmsCkJvERHVvtJGVOBtEETle02ywi4OIXkTP7JxkD872oYjPsYqezFAwtWkYpgl+NpNCigvS4cLkIiVo097D271ZSfoQch4CwDrRHhsbBb7WLarcAEuIK+4QFZoAlz8ln9mBtphaCueShGUTdtz3Wmco5ItJt4izoTRFBjOeRGSdwApVwIFC1MjgI2kJyug7xZvsFeJ/mZwcKOfQNfCeUbcHBzSxRofcpjl8t4fsOMN/k2VivukLL3e+qmLf0LUkXFhJm8MZNE/rr0fNInZ1UAPxE7dmu06YNIicX7GlaikaSj1mGUOpav/YphQTRdz9CKsd23/ntXgf/KG7oS0T9xplrRDl+d3B1XO//ErsPIvxvCw20LozPBFFdkAItqQyEiABG9oNRs8IYTy5UmAtVJVs9cAt4fh+G9Nj3ywxELh/A+N7F9vrmwIcGDfo5Qs5UFCUe8oG5diDirUlOS1eNLvTifBWQJ1+RyVHYHRjYlaJHMrwUJEq8aLI2ctJ1+S3WsMm5zch98WZZdrvLMGoFZYm9f8kf1cp49pocs9735HI1CeVXicn1vQCMKV1dEe5w6hqeEyFO0TK93gloVx/iLwDnilJrW/0CIwAuWy6o8h86xWss9JvHn2LTyVcecf/56jboRSdrNGMQm3N5d4wTYv8yQvJ5aex0gXVguxtMY6a0ccHbSBsnECmPvyC2oVVmn9e4DmgIWPosi/sdLrA/BJkDvHLE1b+fdco1mOQjn6jdLcO6WZiMGnmpJN9lBJyhr2JTE7EUVWlT//bryzWtbUh/JpYd1En7K7QtlsPRZAngBKJ9MeVSHs2fmrcB/TrCT0GVvobBJVw0Yp1ntTt+ZsFIHObC0kqxuSl8xXNn6upAkjGLOYXTLipbba36YMdbuxvadE6d4bwbgENBd7SKW4jbxS24EKlfR5iNvMPaa89yvagD6okLAPtox+BzkUaNXrqLnW6m8av+BiQWfwrhBkFY4NogK/n4dJ2DPmP77y7tBnWxjiJyBA7u6I5VF3RKiK3967IsGgOY5peTDRHzO1nGCNNK/x1xPGR/hJomrV1jKAw49d4/IbK1RJC0sgoqMfOZrKiEIs48XMnKGWVFKrwE/72nFErfQh7EgX+6kIqrXIVgTUh6HixTYUcMj4pfecSJo+z8Of0SJy0OyoUQ1B49q53NxxjsHEVJU8XV9WfiLDTkO7pg6avF3iDt+0ipA/FguOV6ecFMDgyrvel2F8y9cAt4zLBFVjYIgtaH0M2RGmP10ZGGxvlQRUzSzP2KiDo1eyUcpDzKx8ZqxwLtwciFFmWJu/ybHT6GUHQmYaX7tRf5wl3cAMGh9i7IK22MG3za1q7NeMCpkm3BOtHpTaM8+MJn88evN4hfMxa4vatfmhcOCwR7vv6ZSvqCogterzOEc/vDBIdaxdaKV5/v6vg+EHCq353YDb6mqWhmBOZ1iKYtHblnZ3omrXbMmm1fKSvG1CxEg9/7cSQRfe68kENDvgbQua9F1Yv5LRJRQN+cLtWnPAwh1k7SBWC9zkRB/sHj74FmAHwMQc9y8366RHK4Nj1GTmiOA+xBY1wqv4PUUfmVyo5Wg7MVxgb6VPOw4VIaemtgmDRc0P0EVZbRVah2+trDEsvRn5MrTmctRQCfQkPXMypGFjMufIXiEBRBtLp8oDgAssuOVN9LMMkv25yAo4fb4s65rORV7Hfah5oAEgdNjfcKpfNSOS75ifubnGZoCAeN+rhitlj3dvxmPS7AIpKyskvvaOMeY/ZZW8HSvKxs1fGbzFMeZI6jdN9h4DrVEnHhObB3HwLfChIESSpEMLRWb5h4qPJ/ecrF7lJUI1BrhjdmcbU2DTGLBqpinY/XeRm6Boyno1m6MAR7m6TFxjy3UY1UcG0j8ChLoAhJalLUGep0oSDy74ubDuDt7BEOIQ4b+4adMBQnuZyYc69LblEuNOMuxlhOtqLtmJg2yfOgbO1jRu7C4tRwsNTuMf0L2n0rjxs2EUb8wE/sWRIJ3FEdL5jI9W48NFzXKVN0Z+Khw0DbofFaVm97PO6sfzGr32z9G5MeEtgdMuMDPVONbJciF7UkrLvyTE9ujC0qkXxHnAlX0S1BxlDOffE9EBYPxzVDth0bvYjCC9oDYxPJC1S80zBe3WeF5aGvVr+CNk3Ubd25W3FqX3x43ok02sFd7aqx6AbWHRSBGt9xPfVKJM200FhD516NObGWsnDYaY1EL5tupcqd+WDbjZjjiZ6/FKJBhp6Q76f8Yi0b1ZcGjK24JSIEa7Ecab05rhmNWGFBLn88SlrQFN1gvckfSFiKsHU/BEpl8rpwH+SB/CC+wsaDVtRZT2R6L5+E4RgDO5PvSM9qZ/IfcJ1+lY0SxuIbh6oRW0PSLKcdcoMeWhJ2yZKE7ocr9cl8XG46OJYkO8uuEqLYnQfYGwhzaPOLyRa7KA6HQcpOIaM5poUM6xxFKDlX9LDL7jKAQ3luBWC7bMuuA4/YfpTtmTTxxJ+ssWUumfXBLxGWRLtbcmri8MESdhGVFCdRhQnjW1Nzx5hnfmJIAJnhr/S3Me4NOVtRtGekhFEtiu4h7zBlqJ/SxZwcVgNzLB+N0c8X4xZGRW4r1Ht0ActBU/F9qDphQzgwrXFvgfmkgDWuLYFxU+sh+au/FgkTHj5zMFkbq+9PhWrnsp1DtOYvUlG7Bv9OheoH1wBQNUrxZALUsNsAr7ghtHppvU3RrDX14Lftep0ywmyUBEwYFWTxyV4Ude9qRSdodlZpVIdCW5kssdNjX5qU6v+ep0QM+28mSmNRI/XCzyNjaYgoFq+Wm3f4aazLwAfn8tbI+f+4yQQduzTPm17wieeooy5wYtJxeoNNJChSf+aRkQHIyQmqgkvKdfRa8jTjV2lLUEtWTd2tynlZ/Tz0lmsUPvuc/Cqc3UOQQD2TwWFCDaoSVeIF9pivFTK31oQ3EziB36HC+lih9etw/YQ55PCGIeCNp4L7JWmczlPqdDqb950vsR+lMqk55KDz4kTPiljM1Iz5hlyFmEL9Gi+IzfzU/+xp/Nd4QrKxI49LrJuO0E5+IkWdrO/4t+OTfQz8WJy+R8PG1MvQkrIsIrRN//wSZfAO3fZo+STEc6aRpShCROw+n4PT4Ei0476jv0BD4ShWmG4z0n2xcn5bqCPxVXLEIIJxVY6NAzzCy0LF3t2OwuJjyKcCjseAqsNW47Vgxn8h12FturbNT/7nszcLnkZugT352x/v5pPbXuPwqKol5vnXQ6Ht5v0FrANY+izqSbmnmLxvodRb45PvnbvcDB7i0TQULBNiAWoW5wIikxBPQSZNlJtmTlW4LZn8WHCAVdINYEmBwKBZBlGKmnRF7cwMFnpxDj9EoPw28CL3eWzhTXwm1HsS1MI2gHXW2cW28asFAySP8iMBr3opXoM78K+P6QfhYBPVoqHMWWA+ifl50NN+zWc0Wi7zi2uHf0WuQm8/momGG2DfgftxGerMYVzRNtpuWcm06HpZLANejSNVQt3cIk1ayFN7Pbq2JIN18yzPTzJsF6rJCeMGFbRcZYAh6H8ZhT+zBe7OtIB2Pasp34yU9+2sYnpR9fJ2KFRJF6I4dZphMVArN7Fd/42gbQJhxQvPqZUGeihbE1FkHa0TtVkBBhHthTw6vIEZzhZHY9L07QaY9lSenlQ8JBu6o+yG1hGmWomalyAIsdqwcTiCld4pT5nFKRpg57wxZ9ZHXbVmHN4gMDiJPpQKrHVR0UDMpibeSgEydVqaUr0fZab9OJ14K4WxC+PMES31AEZt/gIoLsa/pU8yiH/npAHh6PoCSEJvoAfiP/ya8dVRoHgpJNzvtcVgjW1pBu/uOgonO/uNwLvz0ACqBjzOl1iQ6ZFgO4uAbaEQaz98o76inpcX29rxuBkdC9lW5iozw2d79V1L3MzqdgY6Hi8Ro5NoJqF3+3Sfap6rfGHOV0owhVJNU8lW3lQZJ/Z4eMyUhRalE5ILRo1iEdseVP4nzRCG1tl7siw6j7gSbFVIG1Kui7ofVlSIg4BkNyT456nr53TOa9q3rvz6VUP9vhJqwSyq/2BaiNPAP6gq0wR60KHiPnKkyKldG6u4yKATwPYKWYDnxETbWAXI03GStV2v0gG68eoFVnIYkSjv9TWhAvBZS6UmurZljwX3JdyBpNZAfHnMvoMuryqnmlo6k51UyaRigsymkxbW2AXdZXrakfkkbNHK1ZbJEg7lrdS3T4cdokEUAes5IO/8biQ4XX0KZBRdC2RRde4A71zqNVXgzhmoTd5gd+8PlB4Id/462/ruy7eCi4yMxmsWrzW/9okws8w/o3SlB0BMvudkhwetbuuZ+y0tem4S8/+SLy8TJsGtKHQSxuUtSwTB8VId0+PWMehos2+OF3FKtXqCoVV6cQat7bYbmKWYVrZOxNnpB6WU7JPOYQytNTsW5HTrxOvWTAxBrXnahEZn524BT9Aba491qzrD+iNHIEA+dVsyZbwRM49T98LVqD8TkgwFkGDqfEjiccP+R6elBBmRC4/wwn0rC8rSpStgqe/PQJLVzsiQYFHFWTy2T/qcnIpCg5FtdRTd+tkMpJll3HKF5Od/4q/WeslIdoifJEaqjw1jGQk3GtKGD7GtQnORAe1ghOLLp227JmL4vZeTdmjA0v1tc5L8XOgRmcKApJxUtJ8j/Z1e2fsCaZIQUKN1RPpPvslVlweZ3IWhpBDNcBwa3So6rleUG8SB2wgkF0OZsR/Qc/j2WRMm+0hs/0KTm9DplYFKF4jGvp/VZb/2WaLtU2UPI3ivZ13+lWnxKDBQ7BkBR0MFMy1N6TfqSXSWY+xrC4tB6T+gneesv12+vUMfAS64Y+VdA2G8qaws2+bPqskUuQCW3x7YSFdgZXQzLVz0mWzIkOSsAOjuE3Ye/Mds969QalCWjpRhftpFuFlOiymOvPRPQYoOIAxFx522wr3wzKm2D1J13+hF1r/yGfk8OyYsdAxCyGg9DApMH5bvVf/UW3FsDjRXvK+ejg1zsGSMNmUtgjSZkdREgANCHEr+T35L84QVlmRMWmk09TxjmLzTnyPcNoBIKhzevxnGittTn2/DZGvQ6gHK2i7zwT3U+Ex6nL2DqGctiSJjzuxdH7kQoJ1LjbvIwNc9/L6yhxd+tasM3nUiXrk12IlKmcbnvgGUKrsjJRtWUjwTLSMo4kC0RnExU04iH+PXwIGV/eRmWzruw+coPoCsVs1FJ8cgxVikmkKtta0olk0SR4huVJ92x27aPKlWSPd4+adJ0O0aQJ/9gJO44ggdnNL3hwCp5JTcUL47ntSCWptVL3vTTpAC3n/0J8ESDHD6NCUklReeO7viAkq6Wikg5cBFuvbXnWuTSrybeE2phUiFmYvnChnhkky3bN+5gB5Ck68RWOlD70xycwHxo4qjN3AXWcnCdYdDGMo/NOFqW61D+tYE3ucfxbj9mHXX8ip0GaJ4PA2X9JjK9myS0Yha5letnuxqKRUtZRVHdT0ZeBUbu16xddo3JVkbt4nGlLGcWHkAH1Rn2c7+viIe3fhg03PdAebLr+y/JyGQ2zpkgcMVfkykrH4hjFw4EpnyTJGL6HOJPafOUHMY25e2r94znXlI9LS695vasaxlWv0OYANfanPGIET112suFz7P5B+LHoZ519lcFRoh4oww8c9x0dCYhToIWKvjpcxO+CT0lEAzS/0lxfkvZ+C31hFgJFLtkAtrmL7VSIIrNruBOyIRPajV8wxh9Ml0AwlcisjPUXmDdy60VFKirwWXAsMgV40cTHKFGPNucICS4zQZBIlct4flwMNvVM86O42S6P990HbsN5f1P2BF2d49x89qktai4+GA1ldY7frjZH0V6pMh+AC4edFE3+XBnZTbkMB1X7lr3qQCc5LmOnrHTd4rVLz9upN8+0ooAU34id0nxRep0F1w5nYpsbX7/t9Uh3O3G0F1zu7x0U2gNs3rq+BZVBOnGKvKoXEqDsaFowM/MbrgR3xqJ7R4piAw6bvo80lhNYnPmTNOeWwyd6xUjW/EtdW7H6BMF4CRkjgwZAxfzHRETPulkcFaTRco+g9v1+4GVG2KH35JU8Fzk01i0iogZ336uAvQVR3MTi5Kf3u+7w4UqLlrIUGrez/XP0aOQncz7TD8busyAK4Ll8SsGWcUgXs8RJ9yra28RKFKH88WZGIn8Erg/LKzpzZObwhCQlspYcMWUQX4b+LcJXjn/ldLpRJ2+Wj1SG4IsroTp+r6FYdhKw5JjK4HZgQwPpiuxxdB9m79ELNNOu1CU6aTkxgwOQglls06mpxrNWVYornuD59j1ZWXBhnvQFRidfsb39zaRBj3Gerg4QNf+rXx9IZjxk1s0bwtX0xz5V4fSOWkd0I2Ha0lnMJzWLlgAku2bgWb9xLFv9nWalm7Vdp5mdksQFBXGC/nwOiIzK0mmFa2PABCXe4wkTWeZLsOe3YZDrf7qQUgqflnxlHUtJnemzysT/pPp7N5SSDYYWWr4svu5FRy4uYPHsxQ41sxTeLP2+RK17T05pMhsxi6BojYGid+52FAQccnZPUjXSjO6Neqz6HfA5XJoD3l66Z1RABgyULaUrJuVdTXyOJMtzFtRE9nqH2BMNGaQdOrHU5tYE7dnnqXziglyW5qJPf7UtDExxlmadvIfhTGIU/cwFJPZhZ/nbpvbxcBmqJnc/K63dvFjV0pXusT1stSAqDtFgeVO8Epz8uHlT+FmesLJPkXJkLTSjrRaZCyPQA4TQ6ajY8i1aXwx8mWuLsC4RhF25ly7jGmgAaX/4Ns3lMTuUKMOOHPaF2FSgoYxee9ud64vMDbiTRAO/PvZR6t3jlAyGqsyruuIRRgM+rb8VXd5rjR8JPp8fTpV8unr2ICnzAGknLqLMcQ7haa/sIE5VTAYFRi4FlXA4wJtZwYdB1yB9CrOT+HegEpH7j20Bz8JA52frjHX7/+fUcTV88u9JPnB4PTa+3rMv8c65pHQY1M3rJOO9F4ZxLW3DcgACIa49zlg4wuGNRDrpaNLCRR2vhl/Uq0A32MmhZLfIloOiHE4kp0VQkmLX6qr0mirXGNcj2QyHgTevhcdr4rysthPtHPQ8eVuLmU23qDnusNBhgVazvflWlcByaKGPua9/n665e9ET2t4JvzEMMenuAhC5JlJ0+VqVt5kQIo24FC+UdNu3Cbs3DmrfThxg7CcANvwssVO3jDREmeq8q6gChtNR9t2FR7hY0AHagtjaIt2c+tiIHV+IDcEcJ2kJbL/YhSGuyDCNCygwehaGKWVDvgnYk2Yee2j8UMsySVRevxYN6lI+/z6OyiT5ffM32KN3x3FPmyLrSiaQULnYqDQzwO4abh11tkgYbh1bNQTJrxF5rXSh0d86ddbQpXYld7kdp/vXEB3FsgSw4VvLcRS8Qh2hT4Tqy/OrtdbkicyS3BkcWGj0Oo4KoAlaBi4rmv5mcKsad9e8bPpGrQ7TUwn6ljZgz6jz1E/5GsQzu1zbYFyXZX/KhO1KVLLw9kpRWLadVz3czS2p8FsP3CcDRCMWS13H30+maLaoOZugA/6ZyxwPqBWnrw+D5LsLHlHYYZxmWVvzYsgM0Abfnv4TUBVCF+aK4sDuRmOmDNOgEj3LPb+xoqIVMILKYszvz1FlPyPNzhB01T/QT6eLH+Vqp/J7BzDmgs0neQCuI98eCF92SBBf3tKplcMGqOLyE1S2AY3Uu/PTb6mvVTEeyIU53kpgjVsRGZefUvUbvJeGojNqg9zAwKeUZj7ulbD47lQPDm+f/OWK4i35CfAFNLyguq1WsQrlaootxlwWscG6rZe8CyGby9vwnulSSm1l4qep3cvhR++U6hprF4F4Oruetmd3I5uM00VudI94AD3TpTNUqpOLLNO8ltt6B5urewND/a+/WWvlV0N9UOLjLS3tvyKQ+Czkf60OdyVU7h4QuV2t9AQDCdWCQhHdn+HWB1OKs2gcd12w/ToIcvDMVM1RFhCW3otP4j9n7aY0KfyuRDEogF3nv4fMkpRl0r7BpQ8BsINoPNgwvc2//cunTT6NULMxHLQlFJ/CZFRiYrZU5p8aO10h5tvMI26YltoZALbjnd6B2V8aVSco6tGBtUb6KlsAdjQ4xvpSov2QpUukoh8qOYL4drrFQ7N/OCcv6XtrQjOIc8PLcj3mcbGZGerqZZ7bmABV0ciGX+YqHrmkLMKoJciGGctLh5vmZc6lEC9yg0PKGnt7e+dwjmIUObljH9l/JOoWvcjfhuG5DhETEGjaROtt1HiBliy/bg3DWOCDtmkE6LdQy1+omaLEFFk2HTY7ZIQbPOgJslw0HQr8TASKb+ueWf87RDRatLFg5SGJ//p+eB/38K9fcZVbLk0hX5PLC6Rk+GTLXAop+jEbfXNtpoh+lGeK50rSX7LyW/Qm87mcoOCNJX3jwfh0zEIQsX5fs/iIpD0Q0i5HubzRbBlMy08eTTzlLJYqt3gmyfloJue05UblafRNBk+ZwNvg8fqpLFK1hRrY9ctzI+L/seI+I2dGbFDdfz+uV65tNkXqbN1t5zcMkOM+xAkEC8W2wr1gUazzyZiHlDKmH3c7vt0RBURRXXwbwSPxKLGhMogWpRjf3ZhMBKm844Y/Cq+7JRDdtdsADFSyIoHqqlQkTYLBVg7NXwykukhcsny8n8lRys66MwSBuTEe3PbwjiPkEoBdbJ05vUi1j0tR2NagXRRhWJxJFKsdxPrPVLgoiA3kyci5QAhBNDNaEDBtIrvyXmnTdwvcJGnLVDe9YYbOaFDOXBLt/gS2rX/PXu/CQLYRqMqQz3yoIyaRkJcXwEfQ5ZDByU63zqjyPATbfd6fY3JdBnL+qKhhQ9cvSAhcDVi5xkCbyzk34K3YTBYIfTACrpQq1pH2LvSJ6RPMdgr5Q8STVg8+pSy8915aIE1Xi4ylBq/VV9cKDePYY76xUIQbJf5fMIkasUmglZ/OFTuP5+B6ehZ3NvTRCC4tgEoHonDechs3ww7Mx7duJAERotAIy+jjGwbLBfHToJPGscmTHgt2K6/NHwfcw6Rc0WZD/V9iPTim0ukm9nMW5Gm6X3/eUBjVFbT2yBln4BoR+ovvRlQB/HF0XberF1wyAIAQk6JSaLCQn1ykYcvTg/UXdQHxT2n+3xRpeJ8WNdI+D8pAKsIjUknPM7pEoLi51s5gTMWKRCeCoFQAcUMQjgfYe7UdeaKrD21EvC0zJSOeVusSppchmw6I3fN1KC+jqbm5fuE291ktuQ0FUWN85tPSI95BHGYSr5IZewmKjaP0QG6c17svJ32a7F/qA5VgfZNp2nX+1Ez5ERQgzJLohWNPyuQAXxrEWj93vcD+VQlZQUiakq8Abuguzq1eBEPAp3Th01hOn58Zf43JZwxKLakGX4BZW7QadutIwOsPPzsrvVijMdgbCCWAHnupN4Q76XlVHDBQxDZE35DtmBlAxkxZOO2anWQPn0KL74umlN9hG/92Lf0qMOKH6ZP5UgG14+EF2jUbt9WqxI8jcs6nMJ0uywKBt0FqlsosSLYdfiG51VckTyzjxQP2vMjQbMOsnoOPF0kU1BYykTEtMgbhzmFAp/7OdvE611iwpgbhmXy8fJpnK4VQX3zkNxH0KFUfkjI/c75KG+6tECoVWrOBHLYGu0MqdBv+iyh7GaKSSV/Ltb7Vazjvg73YOwqEUkHWy1zr2IbK2EPhYh2uEYs7Az7+X7nwiPUrLY3rrSN8p5sO/4n2uDITlKh4e4IIpBh9YP8kCD7ephZw+VZgi2Ii62R5Fzr7gCaehGtbycpO4GwgUtHO+iXfmhjdWtb5hLWR5miD5X9n3NgjkHrKfHSY5eWKwJptTgL/RFRUug/yWBM5ct8Y80/URKhrD3z49jVYlAH1qP2gPTC2KN3GAcGCGUPawE/q/evZN0z6ocNaZcRcseCHJKL4U8y04OP3fIOMUgHL8efBfOBSezLUT54vro+/vBhGg80/B/cHx3/ps1i81BoN9+iEahQQhfIlWfLMq5BW1/525H+MqV+yzN8MBT2IZXx3R9HPBEkrppurftmZO2pRANgWaTiZOri5peBQ0+fxyKgIclS0eVTfgHMGNiiI+1uSqdS7P9ADyjcITBXX3kIhzvTy2rpBQww1DdP8PHyanv4t8+vEqj6bDcAy5fbWyfHi77EUmPzafQOWSsrxb0FuU5N9ZPmoScKWTFLulnKfZHts+5elkYlVHWKDgq4uGg3vGozwloJa4Ldpp/BWk0zfEvw3EfSUu0REZisl9FbxbTm/FzyIC6nlvnmfH1fL0I0FOjxNQNP0QkVwBRCcg0m6wFOqWYRaHGr3BSYSbUV+l96rNVWtg2aw+58UTpBUhVkbDsUGPuOubD8i3V3p5ROm8KSE6f0x5qW8pjqoU182MjraSds5357D/Za8EaMMuny4uloU2JgXzxfY5VPTXqSSPRQEqOvjXwujsX730UIZYmYaR3J3OJfPYN3cvrhfppnv2dmtOl8ZSAX5yJx3x/cVhlUJl9HsOBK3e/HVeD3GUGndc9WGpf04irCgqv5GijCSrMsYjE9DYiTWGl/ppckLxirTFgy3mg9cYZDU37/VkBZiM36B9HifXJ6DX7ptWFjaaF24pjSPiBHaRZduH9wiZ5jXPE7Zc0yZIz/cHQOpdEcLNKjtPbFgCz4UNT9ak5BxF3URLK3SOBqGitfYmMcE8gEnL4vvg5QT6M4W5OCuPvIS8KDDnqPeZQ8An0w+7XE+KIHsyfNnIiOjSihcHD0MKoDiaTh458slDfrjgluZj5VxokXKSGMwc1JsAJb3Jzb9Sa0fmUq1AL8CjAaaQx+3YP4eu+phdgJediuz0MLFnh+ASNsxUysFNtyB+WJW9imowCyeI0x/OJMv3NO2/Y9helQ8foM3OzypMnO6zDU8864V0oVn1jc59GNppowDehvB1fcQbOEOaMiw4MvD3yyk+8oPWIenw308pmiQNwCtrcUMHlkrhwwH/7VU56uqJ/cnrK3xbkKwYGKhO6xlWlmvunIYAOearVl8YzuSVMgGoqe5IICgC9eW80oGJpBLunSWdC4asDQ7WKZqKVv51vlNmyPapnyIyKZf9Rzx2u6ClXzr9yRvUK06CMkyo09Iw5rHNLGenBqHWBD5ku7JPdaQLiKDtZ9pXq5JlIilKa9cHR1YzAF8PpqG1Gtpaslom9Ey1XeWv5Y8BVdGQhmEV3FAMDBVuciSUVZ2TilR4zzyjkTsjvquA7Mkc1WfsiZnXfC/WGKRofX/NjKvtEH6iQBKiAtcIewKoRjYb5BkgW0y4eH8lpZ0zkW0k2w5uAhHBopCnKpwwp8a79WfRpYZ5NCrSCzlZLdCRcMFf6qD4u1/ksNcEzidk0Uj9vbYr0hQYY+jm06UCIyuD8lAH2SJdFzyudLLKGo5IhrMgzzioar3my3rwSyMfXxUrNxHTpuN8+HPfq9D/erptQjv4zRi3tNEBtqiHB7PWW40O4Ao/y76uwhwsnneT1mGK+VsWsWumM9JBuujk1vtAYpdDWsY5nJu/8+asUx9tcjc6NZDKMr4/J5O1GLuRQxLpLfKJkn93wMdcMOKHjWTwAsUZg6a+Oq8kfb4KLlAZoDaEAPXhVYj0nfgJqU7vbOyJXWZgtuhr4O4NC3v6RlLUSom1g+x7791z4nTQvcQlKe7mDLBCeOWV9Fe0hKpsef9F7QAI5K8hXyDYVzpGpBkO38ESukTPO22m6tM/L2WH8X1J4+IFnOtvoIhTTaURfjjOODL4v10czy/1cd4VWONCVcGM3MTTADPcgDko6F8j6CCTA/xhzZuEK/8VOXzdid2KlFuYy+E27PKac6H3k3DXNuyh9bOW6E+o9b8OegCHPVAJhAuchxot0bm3qaMajTOm7mpPpABrdQ9CT1IhcaSI+LUEH3bVb5USjQ29C28D1dI1sbhv6hGsopsAsKHRnD2iei1zKXHRk7c9OriHS/G0BLGMpzAuiG0t17pQcnMuykjcigb0+vu4TtiMKQtm1TkfEEXPHxuq6QX8j9E5WNHjFDSj+rrk50d2Vf+uTzaWZ8v7dr+5Bc0OaJ+DPmA5MfSCv36WwzQlfOwT6wvbSsxh4rtvfpAEKqbXhVpFnrVb7n5zlFFATtkTR8vFKUmyuITTxp5K61OOjqZdYrL8mmgrR/jQYXHjcDj3mGIirtTXkqOaISLC8ZmIT+MhoHEc3eLEoIHeo6/+0Tn4GxUSdCD1qDDLiwmsNLrBYH6ycAPRXqyPIAHc6+ErEkxRX12HGHoEfO9rmwe6qIy1CNOk3gw+Fncnov4q58NQNVfeWqi7L4BhWIZbXm/4OROD3Ey86O6WZ7FyFT8HhBqvjk7SCZPlCxlHlPDEY54ICvgS+FF2kfV0pL2ON1XLtdELoUhBfgT1LrUbZPv+XlXqHxKN5PCfuxX8IwhPvXmy191tz/mTgUVQKHvcOoGI32djTLER4UIIRImo6TQdfUB6LAeZ4SCpaH4JHYBFRtmy0yEmK3FDpwTccV2xkq+GOGcp2MXh2ifySnW8IplPFwrYQ4U1Qnl4KGEvsMIM+XQC5Zrg7zKVtDsve783KpQJMPcwkOv6lARuwKm4X3l3/rkrGnisrHSQO+WEUSxGHkrxnYhmhqQC402lgbaf6hglIKOf1lisEPedeVsurcEw7L8x5vaLM4yxhRKSzLxKgi10UMTdTlXCa0bSTIhz8Ycxvp/NDUdnUgOgm9S/rF54y9A7P2C6Hu8meKdUlAfzmV/YSMzMEbMFDkUL5K2ZPQ7AHdIHq/Rwe2TJN4+YA/HkxXYoQOwBFBD1CpSpqKZSO8F2ZHVxPoAljjB6GqYi8cYasbNte/kLeUAWgUNvn45WQ77StRTJac8AC927eMHDJG6Cxj4Fe2iKigSrL+EbkQeSgsHWsTXcWavhBSgaFapaiAWHZVKRF7/h87hsmx+3ICj45ZSf0eMf7kg/cWvo1Yl9Z9HWa55NPmRbAiG+zs9vQQD/nhMhp/GTueX0yxysqNNjJvyjBptFxDH3QFiSeX6LDw9NT+xu3NncZBKNZR0VchIpH/jCXEEQv38OvUEGm7yxYkOfO7IRVOhSG4WturU2aFi5B9NePk2cbmID2umJVTDzFFEz5P/yArXscEJzBAV080EVAhWRI4qrlBWtZ/v90DTKPSVzB9dIIaUMP84a5oA7uDNxM1t6Wj3z50eq+jFCTRcLa7lrYTMlvAaZDWZsxXZEcGwDGZnVgVV+bd0OqwUiR7irxZP8SP6IJKXh3aCu/J95TOUKBpDMmd8KY5bn61ZAWvIbLvebWLjoVyz5TFYPlc2PLAI/VWfBncSJqM6iHEWPQzbLl/hodi5UM0BDNqHCpwQyqMJl7Z5dTmIBKrkCf9CJdbLBlkq/ov9NMsztgiAgQUOQNhiFF4Fyav0Xa1w3HXDkWg+TWcGM/k8Gs3ps7259Xrk5Fk5HVNPv3avvQL9atQnQlBEUAffK4EpkovsokXUAYKu8K3Em4FG5h2BIDLut66PTLA4aufJa6F4NWIKIfItopnkZ4UzjWFekk6UE5ga4EEbvRH3TDa1miTgHeux1U1BSxXQ1dFnPTxyfqvpg9ZeKSpb5q61N1izfrpi7DmqYMuGeAM60On72INjr50IE7E0HAsmwwu/VZJMdtCSEmHOzjh+asu7qbZAUforGm6W39JI/4vv2cKefe1OWoZOtC1YeLmE/wEloeL1vjbpyWGi70yllDdDWnO+2DEwjZpC1mI5RAgW0sLwNriYB+9o7s26tC3KX6rt6X60mM5XwK+jy6NpDJEy69bKB1Ies5sTwoEVtVWSRLD8nXHK76yTRgrY0PwEL2zJfqkFfZR4L7Pc0RPzHOYkSFwtO0y1W3lTk+I1LMFDkrz6MIBq4VU9/a85kgGdsjrTUHXQkkFYI4yi68wwif5vDtvIsw5RwJHp1jALIlnlAiePLBQ39Jf8eFzdnxH3WBCNwYrz8qP6E3UU01hIu0FJ17OR0rpmm3bNJ0ioXa9Xez2SR2z21YqcAPT4lWDST6+Hk0zh7n7IcT0cqFhYJDCkXyQuud5sqcx61Rgep5kk2tK40AcfYTmfXW8VGHtnOWAZbFcNvmZ3G9Xy3GHOfXBtToFdxhDC9OrSQMYlXCMXM7y4TVxmcOfLsKWKIRP2xKDUvSvqzVOl515tjx4Xv8P7aw8ecBnKJ2pM/uWBDBh/2Zin4D6TLiMbxI1c5+0bKmUIjkYrMHkOh9L9QlwyOiXX0SCOhEGMbbSj2f4Me2bNkqB9n2smAhSdqmXHEaEwhLHcNWtjGjGTgj8/bmofxp50DlfM8aeeli7RCd0liSsiXS1d/0vecYpciny+UJR5eNWiGA2aOrmc80MkDTWspy32X21A0eg6Vd//xj6La5JUgFtsnCzaPAkIsScb+n5cqrnlhMg0S4SJnyMOimoerB2S+t/9rqZpbda7Hb3VufwIxdem/wKASrPvRt1dSqUQRiQaBzjYNJoPdJvtFBYZTh4zDfBQ47h4Q/m59wVjPHqB2BKDVMO0wjNI56p4PN7j/w2HiQGikxBhTrQ1u2WBQgz0zL9RabPtGJQN0kX/qS2LE9mNVKST0mr+fqkEkYfjsUCCIM38bUN4uRD0w61h/gITbXbdcMCRPhaK2XTp1wnB6QDQNZeTsq6YhguVmfnw2wftoccSZQSBEt+9UeaqcGz8lJ4c8PE+palLaOhvOh0xQA/UcoWTDdhWmbgagCwUOP6kP0fOGMNXkyuZyEYpFM1fhdXOveVHxdfteuhRss3E/RyJfRMKAwArue0jIL5ecb/gZt1Zf0/zo1bBWF2WRE42YCnQY/XrvQfp2QTljuk3DLe7OpSfsoNNREDWNeDRp6WIzx6CR7uK34RqvF3nDg71SjayxNdWPdfFNG8FkJQUdR6BYabKHJl2pC2WW7thNI530TqWu1iHtLdtg1iKozRZtSEfRxUZ4EZTEw9VtcMdWUggMNNyURoYAx4Z16rvNBAHwPF9FEPkZe+Dy+PSvrjwLOLjBvcVAh+JblKIw/l9KMGgTsGrJ2KF9knfqpm+dZonbO7BSIjeEZyYDKpcSG+GIZ9R15mVfY9RX8gZQG5YmNvr604/iD5MnXA11k7SR1tJHXaYC5M5AFaRf7wifrerdYq+gwcUHjctOv86v55QwyX+7ilsbiKSlzgjCESzh7LcPIVgPagpSb9jfss1ug5SDPSEmOsLsNFUdOpG7z03CaPxxrndEVNCSUDmQ5z650IfR9XzsrPfdG+SFW37C1Z3Vfc8IqmUxe8Ed7GQuSYMSscwkS7T6WrUQz7WslImmz1OaMJYKnQ/T0Q2jTwukRzpzHmoLgAiODCoA0dXsiMsvcuPFtqBka5pI23aJjqqHbyAU8k4B5ZFtu8cNPHr0EYW9Ptqcj2XL50i2EZ1AS1xcAae3YguQrwwF9YXuf/WF4NT0/US/H2vfVKzU9JC4QNEc4xAoKY6uL3axjj0vBMdScZQzeUMIoCsndXt2jqkqwXJfoVpQ5vTTvM1tkwD01512315JLZ5ZhoSout8ag2ANV4PeIUgLfHedDHT+XiK7EJ1lfN6MlAOhlE2j6q/cOTfgHNKUVulSyYHmAB41/eNT8x8jzf1SU8nU2yg72GsAFkvpXVnP8llmTIMA7jCj2HoBbGG9n/+ReYBME9oAt1fvdDvV8RiemaDeRFly1Y4wZZY3iNFezMceWGiMmuP+GXzT7/Apu1oC3Wean7318udKV22SC3s1t/YVOLRMJIzBJXlypzknF/7+oShTYs5Ra6wPsSLQX1Titbfq1eyyeQlL6BFedli9HH8sqFKB16G4uGjExwjDRZ+nhKLCuXtnML0YtLXsOMsbr/xiGwO+55c20cfCBfBs4+wNohOBR+JiXckFH5/umbU71duvXfr9+1Xp9jg5CDBdrU4RwqkXbEEiGdFYdYyhnnsryJZ32YHksOJ1JtXp4AVZ5gxzLA8goWeEYsNrGzkOWrTJudRziqe2TYnYsRWWCMKWW1IgiL+uGhThQ2HwGIXE0H9k38DNd+QyV4WJPz1fhVNsA9WLlrlalT++FV1lZPu2qOAw1TyWRFdzQkxu/vlu9s9p+zcBEmcb+5f+Z70Or/eRPHnU8AEbndxNvUS32Z3F5BqP0yT8fD9AQ7CqZYGrDNc8egXWDYmDdDcJRHl7DW1MJ2jYiycq7/OV+9UjCtOPA73exYgUN8I57ctchkisrkQAjhj9yJxIqn13q1qdOOkbaiQXXcVq7kBF7Q3y3DOcJsiKevKxG1OlNoQ4v9+XEA8faeDDdNTsAWOdnQV0GTTSogzz9ZqkXQ1q03sj7w9xTR1EH+5tdToyA9vDClsxglJoMdih25ykviJ5SZWt0vPsGAqC7m0T9o/EurEqXH+G75LkTuB2UGjKA9q2JmYmuvq+enHYmXTcq9jmHn/DQpWOYp3Z9qe1es/2flR/d5xFpQFhdHWItWkeh8wK9ACaR/6nywh1MwA2rtgU3mTwNPJaLZoCp3npecIyFO8fke5pbsQLqeumQpF++qNY/tNxq4AuY+8XOMPZrMhX0USIDLjDIZecNlIRQ0jmaLlOd7UkAHyFgHDtxZLY9e2hV4W47NeTb8WxMbC4mjKdR8GLLj4gN5UqZZkGY8BGiTSGwpJ68mIkpLh+BTaPfe1Hm211az2nYTycqSk0MKvhUIMyAZHjB8S/CrG8pXocq7eI9TtU+gefRpR7bln8WOwuoi2L3dztlBHwsVGJUdjz2ISeFGRHSCvqW9sD+DAoB2Ql8vfXnS1PqSMgl81ZUYwe82C49LMlVn3ftQYAHqHDdEPLYUfbkGn+jNAH90YHt8tFhtdG3J3svNMFkssEMXQv0EMhD9ZLdzP3piRM4dLl2EgpLrmGe/x1MGxoRgKq58tqjpLzDPAUbYjv7rF+46DdQfyM/6S2Y6cboOynIC+A/IAi9SEm2KIbvbSDf62qcVO2F4XFK1gp3IUX45qd10X8LQHfWOvVm/5+adq8vIP6qE/zAR0kQVYSr4FVyqoIsCaDaLEyAfv7RKPI7gXvjsvDqWsvAe0mJdt+bvhvJ8LDcgZIp6pDBMJLDxZR6FEctyZAlWJwPlW/G3nA+cocDOM8jmb08prZ5jX2X/r5KnjjHmscFGhBXuB/sj8DFTbrjnzuC9fUBxVVn90QZWTwOSoEZef+c1sF6mwDXl/T8+s3F+wYnkZhzjvhp+ecdAkRzzX8KCgC8bFdA31Q/kVLUhUOSirNED3eGEgzoZ8ojmlWSuxy5HDbkm4q9cOLN/QwGi+E6cWc+BvroLAO8ClmkP3Rhgk8RKwrk+OJ1qeSGXis1+6i+TkftVxSwl+l3R9ifQ5MqD+Ga1WZJ27H9Vb1nLUudXSRT6WvgOO7bjDDV3zGuR2h0m10VdXPt2LF6KlFl7F11BKeo9Oqo9mBRBb3uKNdOfsG9nO3Saukah6NrAzNQ41tEho9RS3Gofo6/JEzK9AI8lkK21egMNXFL5PjH0F1WRDoMpSCk0iF2hvzx79xgPvYO9eVPr/IarJxWIhweNhk4vUGujVpbcDXII5jFZmoXemJuO5NzqsYNK9gPgBXOtmRPZ8MXgdEuo20IFFLbToog1l7WM/oc1AS2s6f7yJnO2pzSkzXOv67Vbme7xIiSX/xoRteeP5vv6y/ophgGvEwmX3Pw8C+VslF+pWMe5HddA6Lv79xe6V5T1MT8PtSRgTkk7bF+3jcl+SOQJarudlXIvDJWe7gKUgHQHCBNEnFV9g9U5eAaWDSp+rKswiF0GCuozSy471jEbitG1WMYP9QtdrmL3j4mj207twPgdjoCoMp4KEMDVmT4Uy92uZhtXMOJeN1awJsKTOmUbUGDOJH/WEbrDpphaq5AxzeQivdeli1ZMjAACxGwULYnbxtJ5KJOyLlRpMBJQYxs9pfowoq2x+AUNbrdbvxlh87ECkSPS/wlpW3cq2yv6OgpSMsmoliTLMb8/yza0jZIHZVMYwuotPUZjZtbDjS0GfmcVs7q+XGbOeByphC0bpbcPudVN48a5WHF4wgkyn1uQTM3PiuL47g7hHSbVqLVMwc03lzk0tEjtYn/h0whkf3mVy5gPOPBOOqPQSv57bZTXbkdRIWuWxuUqVXmcNOdY+CrtbHxfAaL9FITcPtN2lwr6gN3uAAQGtxsmmVy68EBjE92SY1k8qutHFfrA8YUeZTVnQoj4b1FtKCvqX41q/Vq7SNYJxDz59fPNkTLx37gQF/IfF4HHzZN0nuDjIGjer8m+ZJRIqX2NSx9xkVLkWkh9FdwCBCedb5ymh43tCD4DshLnNwa75oeLjRTG7Su2bnbV+b7uxr4rv0RB6DmxSVpTVsis+c9GRyfmIZ6zOeDugpGGLokNMDIPIWa1miPHXxJ8a7obZ3Q1v62gbawepW8HatgaulpzSGQ1XMuM748zHW/LhQmOOizRx5cI+HIJ2eczSzoakwJJ8HEz7YGkbVa44o5QzUMHIw9z8GeiYXmaqpt3wd0TBkPHSprPz/VdWVL9m41TGGHTlg5RNJw/zvuimHxsCqSfKTBS5ljMnPNPYgOyxfACFM5EQMzBzHLVLi85TPTalm2E48a+aF10CXWgHo6gCypRBXeTdJ1SU1/Q9dnlKFgaf19DG/L1zF0kRfkFXDMWuatAelaM7RJ+fxmIDrB8Cp6fbaV95rjG2AaNG6Pa2iavgDTmQ0HGhe9qGlAyo/VfOSpV69ku7nB1rODJZMzoAJu3eYSPcEFBRQMmwFXg8i7virMtsrzTwcUN9nVS1eaY0tVc2FeEMZJb3lFNg3pnA0mW/P6ozi+3IPWRFdOaiKmdH87o3/0kUi4DgKWoE1KeIOJ4GDkGAk4t32zxDle2/bDMMbJ0GNA58PZ/iVLv5hwEGzXuw9vEkd9Z9lRB1ddhm53ohZXi48pTClqqZ/owCGKftrUTXnkGMpM+QOwJlogvktXUcUau8jQkfIYfFPqXtWs1vHAvVFzCzWlOjBYbaYrOvPS1ocdq2k58hHQhc12HpKMvUzLpNEuz3hXWhx73b+mY+xZ0FIUYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4727,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4727,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"fba1abd5-3f49-4f97-9a20-49403ccbbc22","uuid":"fe623fa4-97b8-497e-a6d6-c1079e05393c"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_013PUpY1D2wgsWV8uuMgt4M5","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me plan the implementation:\n\n1. **HTML file** - The main entry point with canvas element and UI elements\n2. **TypeScript file** - Game logic with all Tetris mechanics\n\nKey features to implement:\n- All 7 tetromino pieces (I, O, T, S, Z, J, L)\n- Piece rotation with wall kicks\n- Line clearing\n- Scoring system (standard Tetris scoring)\n- Increasing speed as levels progress\n- Keyboard controls (Arrow keys + rotation)\n- Next piece preview\n\n\n- Game over detection\n\nI'll keep this simple with a single TypeScript file compiled to JavaScript, using an HTML file with a canvas element and a basic setup that doesn't require a bundler.\n\nFor the game mechanics, I'm planning seven tetromino pieces with distinct colors, and I'll handle player input through keyboard controls—arrow keys for movement and rotation, space for hard drop, and a few other keys for additional actions like holding pieces or pausing.\n\nNow I'm laying out the scoring system where clearing multiple lines gives exponentially higher points multiplied by the current level, and the difficulty ramps up every ten lines cleared. The playfield will be a standard 10-by-20 grid with blocks sized at 30 pixels each.\n\nWriting the TypeScript implementation... Defining the Tetris piece configurations... Finishing up the piece definitions with the L-shaped tetromino, then I'm moving on to build out the complete game structure. I need to handle canvas rendering, game state management, collision detection, line clearing, and tie it all together with a game loop using requestAnimationFrame. I'm setting up the complete Tetris game with a canvas-based board, a sidebar displaying score and next piece preview, and implementing ghost piece visualization along with smooth keyboard controls using delayed auto shift for better gameplay feel. I'm settling on a straightforward structure with separate HTML, TypeScript, and config files that I'll compile with tsc. I'll build out the complete game code now, starting with the HTML markup for the board canvas and sidebar UI, then move into the TypeScript implementation with basic wall kick logic for piece rotation.\n\nDefining game constants... Defining the rotation states for the remaining Tetris pieces... I'm verifying each tetromino's rotation states carefully—working through the S, Z, J, and L pieces to make sure I have all four rotations mapped out correctly for the game logic.\n\nNow I'm thinking about the game loop structure and how to handle piece dropping. I'll use `requestAnimationFrame` to keep things smooth, then implement a drop interval system based on standard Tetris timing where level 1 starts with a specific drop speed in milliseconds. I'm settling on a simpler speed formula using `Math.max(50, 800 - (level - 1) * 70)` milliseconds, then I'll write out the full TypeScript implementation with proper types and a game class to manage the board state, active pieces, and game logic.\n\nWriting the complete implementation... Defining the tetromino shapes and their rotations... Defining the rotation states for the remaining Tetris pieces... Defining wall kick data...\n\nActually, I should verify these offsets match the standard SRS specifications for the I-piece rotations. Defining wall kick data for I-pieces... I need to clarify how the SRS wall kick offsets work in screen coordinates where Y increases downward. When I apply a test offset (dx, dy) from the data, I'm adding dx to the X position and subtracting dy from the Y position to account for the coordinate system flip. Let me establish the standard SRS data but remember that the Y values need to be negated when working in screen coordinates.\n\nNow I'm mapping out the wall kick sequences for the J, L, S, T, Z pieces across all rotation states, checking each offset pair as the piece attempts to rotate and shift position.\n\nActually, I'm going to simplify this—I don't need the full SRS specification. A basic wall kick system that tries a few simple offsets in sequence should be sufficient for the game to feel responsive and work correctly. Completing the SRS rotation data table... Defining rotation kick offsets for the I piece... I'm looking at the wall kick offset data for different piece rotations, and I need to clarify how the piece position is defined in screen coordinates. The piece's x and y represent the left and top edges of its bounding box respectively, with positive x pointing right and positive y pointing down. So the wall kick offsets are horizontal and vertical adjustments in those same screen coordinates. Let me recalculate the converted offsets for the JLSTZ pieces to make sure I have the right transformations. RS Y-up data for JLSTZ `0->R`:\n`[ (0,0), (-1,0), (-1,1), (0,-2), (-1,-2) ]`\n\nThese are `(x_offset, y_offset)` where positive y is UP.\n\nConverting to Y-down (flip y sign):\n`[ (0,0), (-1,0), (-1,-1), (0,2), (-1,2) ]`\n\nSo for `0->1` in screen coords (Y-down):\n`[ (0,0), (-1,0), (-1,-1), (0,2), (-1,2) ]`\n\nThat means:\n- Test 1: No offset (0,0)\n- Test 2: Move piece 1 left (-1,0)\n- Test 3: Move piece 1 left and 1 up (-1,-1) [up = negative Y in screen]\n- Test 4: Move piece 2 down (0,2)\n- Test 5: Move piece 1 left and 2 down (-1,2)\n\nThis matches what I expect for wall kicks. Now I should just implement the game instead of getting stuck on wall kick details. But first, let me double-check my S rotation in screen coordinates to make sure I have the shape right. Defining the S piece rotations...\n\nNow I'm verifying rotation 2 and 3 look correct—the 180° and 270° orientations match what I'd expect. The O piece having identical rotations is fine since it's a square. For spawning, I need to figure out the standard Tetris spawn position, which is typically at the top-center of the board.\n\nI'm calculating the spawn X coordinate using the formula `Math.floor(COLS / 2) - Math.floor(shapeWidth / 2)`. For a 10-column board, this gives me x = 3 for 4-wide pieces, x = 3 for 3-wide pieces, and x = 4 for 2-wide pieces—which centers each piece type correctly.\n\nFor the Y spawn position, I'll just start all pieces at y = 0 at the top of the board. I'm settling on spawning pieces at y=0 at the top of the visible area for simplicity. When a piece locks (can't move down anymore), I'll add a 500ms delay before it actually locks to give the game better feel. If a piece can't be placed at spawn, that triggers game over. Now let me start writing the code.\n\nSetting up the game constants...\n\nNow I'm defining the wall kick offsets for different piece rotations using the Super Rotation System, mapping each rotation transition to a series of kick coordinates that let pieces slide into valid positions when they'd otherwise collide. I need to double-check my wall kick offset data against the standard Tetris rotation system, converting from the typical Y-up coordinates to Y-down screen coordinates. Let me verify the test offsets for the 0→1 rotation state are correct with the sign flips applied. I'm realizing the wiki organizes the kick tests by source state rather than transition direction—so from state R, both the R→0 and R→2 transitions use the same test offsets since they're in the same column of the reference table.\n\nNow I'm converting these test coordinates from the wiki's Y-up convention to Y-down by negating the Y values, working through each transition systematically. Continuing to verify the L→0 and 0→L rotation offsets by converting from Y-up to Y-down coordinates, making sure the final offset arrays match the expected format. Defining rotation kick offsets for the I piece... Now I'm adding the remaining rotation offsets for the 3→0 and 0→3 transitions, then compiling all the kick data into a lookup table with the origin point included as the first test position for each rotation pair.\n\nI'm confident in the wall kick system, so now I'm planning out the scoring mechanics—singles through tetrises with multipliers based on level, plus bonuses for soft and hard drops—and defining how levels progress based on cleared lines with a cap around level 15, along with the drop speed formula. I'm working through the actual Tetris Guideline formula, which uses an exponential decay calculation to determine drop speeds for each level, starting at 1000ms and decreasing significantly in the early levels before leveling off around 30ms by level 13.\n\nSetting up the TypeScript implementation... Defining the piece shapes... Defining the remaining tetromino pieces... Defining wall kick data... Setting up the game state variables now, including the board, current and next pieces, scoring system, and input handling mechanics like DAS (delayed auto shift) for smooth piece movement and lock delay for placement timing.\n\nNow I'm initializing the canvas elements for the main board display, the next piece preview, and the hold piece display, then sizing them according to the grid dimensions.\n\nSetting up utility functions... Writing game logic... Writing game logic... Writing game mechanics... Setting up input handling... Finishing up the hard drop, then handling the hold piece mechanic with C or Shift keys. I'm also setting up the keyup listeners to track when arrow keys are released and reset the DAS state accordingly, plus I'm starting to define the movePiece function.\n\nNow I'm implementing the core movement logic—checking if a piece can move horizontally, updating its position, and managing the lock delay system so pieces don't lock immediately when they land. I'm also writing the rotatePiece function with similar lock delay handling, then moving into the main game loop.\n\nSetting up the game loop with delta time tracking and DAS (Delayed Auto Shift) to handle continuous horizontal movement when keys are held down, plus soft drop handling when the down arrow is pressed.\n\nNow I'm checking if the current piece is resting on a surface, and if so, starting a lock delay timer that will lock the piece in place after a certain duration. If it's still falling, I'm applying gravity to move it down at an interval based on the current level.\n\nI see an issue with how soft drop is being handled—calling `softDrop()` every frame while holding down the arrow key adds points too rapidly. I need to track soft drop separately with its own timer that runs at 20× the normal gravity speed, rather than resetting the main drop timer each frame.\n\nThe cleaner approach is to check if ArrowDown is held and use a much faster drop interval (around 50ms) instead of the normal gravity interval. I'm rewriting the game loop to use delta time and apply the appropriate gravity interval based on whether soft drop is active.\n\nRefining the timing logic... Writing the render function... Writing the rendering functions... I'm going to write out the full implementation now. For the layout, I'm thinking about how to arrange the hold piece, game board, and next piece along with the score information—I want the info panel on the right side showing next piece, score, level, and lines rather than below the board.\n\nBuilding the HTML structure... Writing the game implementation... The I piece spawns correctly with its first visible row appearing at board row 1, which works fine for gameplay. For game over detection, I'll check if the piece can't be placed immediately after spawning. Now I'm thinking through the O piece positioning—it's 2×2, so spawning at x=4 centers it properly on the 10-column board.\n\nLooking at the spawn positions for all pieces: the T piece (3-wide) centers at x=3, and the I piece (4-wide) also centers at x=3, which matches the Tetris Guideline. Now I need to handle the drop interval at high levels—at level 15+, the interval gets very small (10ms or less), which could cause issues at 60fps. I'll add a minimum threshold to prevent infinite loops when the drop interval becomes sub-millisecond.\n\nWriting the drop interval function... Finishing the drop interval calculation with a level cap at 20 to prevent the base from becoming negative. Now I'm ready to write out the full implementation, but first let me verify my S-piece rotations are correct—checking that the different rotation states represent the same tetromino shape in different orientations. I'm working through the rotation transformation step by step, mapping each row of the original matrix to the corresponding column in the rotated result to verify the 90° clockwise rotation is correct. I'm verifying the third rotation by applying the same transformation formula to the result from rotation 2, checking each position systematically to ensure the matrix is rotating correctly. Finishing the rotation calculation and confirming it matches the expected result of [[0,1,1],[1,1,0],[0,0,0]]. Now I'm moving on to verify the Z piece rotations, starting with rotation 1 where I apply the same 90° clockwise transformation. I've verified the Z piece rotation is correct, and now I'm checking the T piece by applying the same 90° clockwise rotation formula to see if it produces the expected result. Continuing with rotation 2, I'm finishing the calculation to get `[[0,0,0],[1,1,1],[0,1,0]]`. Now moving into rotation 3, applying the same transformation formula to get the next orientation of the T piece. Continuing to verify the J piece rotations by applying the transformation formula and checking the results against the expected grid layouts. Completing the J rotation 3 calculation and verifying the result matches `[[0,1,0],[0,1,0],[1,1,0]]`. Now moving on to the L piece rotations.\n\nFor L rotation 0, I have the base configuration `[[0,0,1],[1,1,1],[0,0,0]]`. Applying the clockwise rotation transformation where each new position maps from `old[2-j][i]`, I'm computing all nine positions to get the rotated matrix, which gives me `[[0,1,0],[0,1,1],[0,1,1]]`.\n\nNow I'm verifying this matches the expected pattern and moving on to rotation 2 by applying the same transformation to the result from rotation 1. Finishing the L rotation 3 calculation and confirming it matches my expected output. Now I'm moving on to verify the I piece rotations, starting with the 4×4 grid and applying the same clockwise rotation formula. I've verified the rotation matrix for the I piece is correct, and now I'm moving on to implement the final code. I need to make sure soft drops properly update the score and that the DAS (delayed auto shift) timing works as expected—first move on key press, then after a delay it should auto-repeat at regular intervals.\n\nI'm also capping the delta time to 50ms to prevent the piece from jumping multiple cells if the game loop falls behind, and I need to handle pause state by skipping the game loop and showing an overlay, plus add a game over screen with a restart option. I'm still deciding whether to show a preview of multiple upcoming pieces or just the next one.\n\nWriting the complete TypeScript implementation... Defining the piece shapes... Defining the remaining Tetris piece rotations... Defining wall kick offset tables... Setting up the game state variables...\n\nNow I'm initializing the DAS (delayed auto shift) system to track directional input timing, along with a key state tracker for handling player controls. I'm also grabbing all the DOM elements I need—the canvases for rendering the board, next piece preview, and hold piece display, plus the text elements for showing score, level, and lines.\n\nSetting up the canvas dimensions based on the grid size and block dimensions, then defining utility functions to create the game board, retrieve piece shapes with rotation handling, get piece colors, and pull the next piece from the randomization bag.\n\nContinuing with the piece spawning logic...\n\nNow I'm implementing the collision detection system that checks whether a piece can occupy a given position, accounting for rotations and boundary constraints. The function iterates through the piece's shape matrix, validates that each occupied cell stays within the playfield bounds, and ensures no collisions with existing blocks on the board.\n\nImplementing rotation logic with wall kicks...\n\nNow I'm finishing the ghost piece calculation to show where the piece will land, then locking placed pieces into the board grid, and finally handling line clearing logic.\n\nSetting up the game initialization...\n\nNow I'm loading the high score from storage, spawning the next piece, and starting the game loop with proper timing. When a new piece spawns, I check if it's a valid position—if not, the game ends and I save the score if it beats the high score.\n\nThe hold piece function lets me swap the current piece with a held one, resetting timers and spawning the next piece if there's nothing held yet. For moving pieces, I'm validating the horizontal movement...\n\nImplementing game mechanics... Writing game logic... Still writing canvas rendering... Finishing the canvas drawing logic...\n\nNow I'm setting up the render function to draw the game board with a dark background and grid lines, then continuing to draw the falling pieces and other game elements on top. Writing the game rendering logic... Writing the game loop... Writing game loop logic... Writing input handlers... I'm setting up the keyboard event listeners to handle piece movement and rotation, then initializing the game state by creating the board and resetting key variables before the render loop starts. I'm setting up the initial game state with `gameOver = true` so the game loop renders without updating, and the keydown handler will trigger `startGame()` when the player presses Space or Enter. For the display logic, I can use the same `gameOver` flag to show either the welcome message initially or the game over message after play ends, depending on whether `currentPiece` exists.\n\nNow I'm thinking through the visual style for the blocks—I want a 3D effect with highlights and shadows, so I'll add a lighter border on the top-left and a darker border on the bottom-right, with a slightly darker fill in the center to create depth.\n\nWriting the block rendering... I'm going to stop second-guessing the dimensions and just start building—I can tweak the sizing later if needed. I've settled on a block size of 30 pixels, which gives me a 10×20 board at 300×600 pixels, with the preview areas for next and hold pieces at 125×125 pixels using 25-pixel preview blocks. Now I'm writing out the HTML structure with styling for the dark background.\n\nWriting HTML and styles... Still writing styles... Writing the HTML structure... Building the game board and UI panels... I'm realizing I need to be consistent with the canvas sizes—I should set them in JavaScript rather than HTML to keep everything in one place. For the next piece preview, I need to account for different piece widths: the I piece is 4 blocks wide, most others are 3 blocks wide, and the O piece is 2 blocks wide. With a block size of 25 pixels, a 4×4 grid would be 100×100, so I'll use 120×100 for the preview canvases to give some padding around the pieces.\n\nNow I'm thinking through the game logic more carefully. I'll skip the line clear animation for now to keep things simple. There's a subtle issue with piece spawning though—when pieces spawn partially above the board (y < 0), my current code doesn't draw those blocks, which is correct, but I need to make sure the game over detection works properly when a new piece can't be placed. I need to verify the I piece spawn logic more carefully. The shape has 4 rows with the actual blocks on row 1, so when spawning at y=0, those blocks land on board row 1, which is correct. Now I'm ready to implement the code. The collision check only validates cells with actual blocks (the `1` values in the shape), so empty cells in the shape array don't cause issues. When the I piece spawns at y=0, only its actual blocks at board row 1 are checked, which is fine. As the piece drops and y increases, the blocks move down the board until reaching the bottom boundary around y=16, where the piece locks in place. So the piece locks when it reaches y=18, with blocks occupying the final row 19. Any attempt to move to y=19 would place blocks out of bounds, making that position invalid. The empty rows in the shape don't cause issues since they're just padding in the bounding box.\n\nNow I'm realizing the I piece can only reach rows 1-19 since its first visible block is at y+1, meaning it never actually occupies row 0. But that's acceptable for gameplay—other pieces like the T piece have visible blocks in their first row, so they can spawn at y=0 and occupy row 0 immediately. I see the standard Tetris guideline uses a buffer zone, so pieces should spawn with their topmost visible blocks at row 0. I'm adjusting the spawn logic to calculate the first visible row of each piece's shape and offset the Y position accordingly.\n\nWriting spawn logic... Writing the spawn function...\n\nThe approach works because empty rows above the board aren't collision-checked, so I can spawn pieces with negative y-coordinates to hide the empty rows in their shapes. Now I need to make sure the rendering handles this correctly when drawing the active piece on screen. I'm verifying the I piece renders correctly at spawn—the shape's filled row appears at board row 0 since the empty rows get skipped by my render check. Now I need to think through the game over detection logic.\n\nWhen a new piece spawns at y=-1, it's invalid if any cells at board row 0 are already occupied, which correctly triggers game over. I'm also considering the \"block out\" rule where pieces locked above the visible area end the game, but in this implementation pieces can only lock when they hit the surface, so blocks should always be at row 0 or below. Checks if the spawn position is valid by testing whether the top rows are clear, triggering game over if the stack has reached the spawn point. Now I'm ready to start implementing—I'll begin with the rendering functions to draw individual blocks and the game board.\n\nWriting the block rendering... Still writing grid code...\n\nActually, I think alternating squares would make the board feel too busy, so I'll stick with just the grid lines. Now I need to set up the project structure and write out all the files—I'll create the HTML entry point, the TypeScript game logic, and the config file, then compile everything. One thing I should be careful about: when pieces lock in place, I need to handle blocks that spawn above the board properly, since we only want to place blocks within valid row bounds, though the game over detection should catch most edge cases before that becomes an issue.\n\nI also need to make sure the game loop respects the game over state and stops processing updates once the game ends.\n\nI'm going to skip some of the polish features like line clear animations and level up messages for now to keep things simple, but I can add those later. Now I'm ready to write out the complete implementation, though I should double-check how the I piece rotation works since it has a different rotation center than other pieces.\n\nThe I piece uses a 4×4 bounding box with an off-center rotation point, so I need to make sure my wall kick logic accounts for that. Let me trace through a specific example to verify the rotation and wall kick behavior are working correctly.\n\nStarting with an I piece at position (3, -1) in horizontal orientation, the blocks occupy columns 3-6 at row 0. When I rotate it clockwise to vertical, the shape shifts to column 2 within the bounding box, which places the blocks at column 5 on the board. The top block sits above the board at y=-1, which is valid, and the rest occupy rows 0-2. The validation check would confirm those board positions are empty, so the rotation succeeds without needing wall kicks.\n\nNow testing edge cases: at x=0, the vertical bar lands at column 2, well within bounds, so the first wall kick test passes. But at x=8, the rotation would push the piece to column 10, which exceeds the board width. The wall kick sequence tries offsetting by -2 to move it to column 8, which is valid and within bounds.\n\nAt the right edge (x=9), the first test fails but the -2 offset brings it to column 9, which works. The left edge at x=0 is fine since the piece fits naturally. The I piece can't spawn at x=-1 since it needs columns 0-3 minimum.\n\nLooking at the actual rotation mechanics: in the initial horizontal state, the blocks occupy row 1 of the 4×4 shape at columns 0-3, so with piece.x=3 the board columns are 3-6, and the valid x range is 0-6 to keep blocks within bounds 0-9. When rotating clockwise to vertical at x=6, the bar moves to column 8 of the board, which is valid. Testing x=7 next.\n\nNow I'm verifying the wall kick offsets are correct before implementing. Let me double-check the I piece rotation data from the official Tetris Wiki to make sure I have the Y values right, especially for the 0→1 rotation transition. I'm verifying the wall kick offsets match the Tetris wiki format—the I piece rotation from R→0 follows the same Y-down coordinate system, with test 4 moving right and up, and test 5 moving left and down.\n\nNow I'm double-checking the R→2 rotation state, but I'm noticing some inconsistency in my test values and want to carefully cross-reference against the official wiki table to make sure I have the offsets right. Defining the kick offset data...\n\nI'm second-guessing myself on the coordinate system—need to verify whether the Tetris wiki uses Y-down or Y-up conventions, since I'm seeing conflicting information about the axis orientation. I see the discrepancy now—the Tetris Wiki defines positive row values as moving UP, which is the standard math convention. Since my implementation uses Y-down coordinates where piece.y increases downward, I need to flip the sign: when the wiki says move up (+1), that translates to (-1) in my system. Let me verify this interpretation against the actual SRS specification to make sure I'm converting the offset table correctly. I'm catching an error in my I-piece kick table—I had the signs flipped for the screen coordinate system. Let me recalculate: the wiki values need to be converted properly, where positive Y in the original means moving up (negative dy in screen coords). I'm rebuilding the corrected kick offsets with the right signs. Verifying the rotation kick data against the wiki specifications...\n\nNow I'm compiling the complete kick offset table for all rotation transitions in screen coordinates with Y-down orientation. I'm noticing that R→0 and R→2 produce identical kick test values, which seems odd. Let me double-check the Tetris wiki to make sure I'm reading the rotation kick tables correctly for the J, L, S, T, and Z pieces. Now I'm converting these rotation offsets to screen coordinates where Y increases downward, flipping the signs accordingly for each transition state. Completing the kick data structure... I'm completing the wall kick offset table with the correct Y-down coordinate system, and now I need to verify one of these cases to ensure the data is accurate.\n\nLet me trace through a specific rotation: when an I-piece at position (3, -1) rotates clockwise from rotation 0 to 1, it transforms from a horizontal line into a vertical column. With the default offset of (0, 0), the new blocks would occupy column 5 at rows 0 through 2 on the board, assuming that space is clear. This confirms the piece successfully rotates and settles at the new rotation state.\n\nNow I'm testing an edge case where rotation would push the piece off the right boundary. If I try an I-piece at x=8 with rotation 0, those blocks would already exceed the board width at spawn, so that position fails validation. The maximum valid x-position for a horizontal I-piece is x=6, which places blocks at columns 6 through 9. When rotating from 0 to 1 at that position, the vertical form would occupy column 8.\n\nFor x=7 at y=5, the rotation succeeds since the resulting column 9 stays within bounds. But at x=8, the rotated form would need column 10, which is out of bounds, so the default offset test fails and I need to check the wall-kick offset of (-2,0) to shift the piece left.\n\nAt x=9, the piece is already invalid for rotation 0 since it would span columns 9-12, exceeding the board width—the I-piece can only exist at x positions 0 through 6 in that rotation. The wall-kick logic seems solid, so I'm ready to implement the actual code now, though I should handle one more edge case involving negative y values.\n\nFor the I-piece in rotation 1 at x=3, y=-1, the shape extends from rows -1 to 2 with blocks at column 5. Since isValidPosition ignores y<0 and the render loop only draws visible blocks, the piece appears as a 3-cell column at the board's top and drops normally as it falls. Let me verify the rotation 1 shape...\n\nActually, the I-piece in rotation 1 is a vertical line occupying column 2 of the 4×4 bounding box. At position (3, -1), this places blocks at (5, -1), (5, 0), (5, 1), and (5, 2)—with only the bottom three visible initially. Once it drops to y=0, all four cells align vertically at column 5 from rows 0 to 3.\n\nI've verified the spawn positions for all pieces: the O-piece starts at y=0, the I-piece at y=-1 to account for its empty top row, and the T, S, Z, J, L pieces at y=0. Now I'm ready to implement the code.\n\nBuilding the project structure and styling...\n\nFor the line clear animation, I'll add a flash effect where cleared rows turn white briefly before disappearing, which requires tracking which rows are clearing and managing a timer in the game loop.\n\nImplementing the state management... I'm settling on a simpler approach with a flash timer and state tracking. I'll add a `flashRows` array and `flashTimer` to track when rows are clearing, then during the flash duration the rows will animate visually before the actual clear happens and the next piece spawns. This keeps the state management cleaner with just a few variables instead of a complex timing system. Continuing the game loop logic...\n\nWhen the flash duration expires, I clear the matched rows from the board and shift new empty rows to the top, then calculate the score based on how many lines were cleared and the current level, updating both the score and level accordingly before transitioning back to the playing phase. Writing the game loop refactor... Still writing pause logic...\n\nActually, a simpler approach is to just track a `paused` boolean separately from the phase state, so I can pause at any point without losing where I was. During the game loop, I'll check `!paused` before updating any phase-specific logic. Now I'm laying out the complete file structure with constants, types, piece definitions, wall kick data, and all the game state variables. I'm sketching out the visual layout with the hold box on the left, the main game board in the center, and the next piece preview, score, best score, and level display stacked on the right, along with control instructions at the bottom left.\n\nNow I'm working through the dimensions—the board needs to be 300 pixels wide to accommodate the 10-column grid, with 150-pixel panels on each side and some spacing between them, bringing the total width to around 632 pixels and height to 600 pixels.\n\nFor the implementation, I'm planning to use a monospace font for the numeric values so they don't shift around as the score updates, and I'll position the message overlay absolutely over the board.\n\nWriting the HTML structure... I'm working through the canvas dimensions for the preview boxes—checking that each piece type (I, T, O) centers properly within the 120×90 pixel canvas with a 24-pixel block size, and they all fit comfortably. The J piece dimensions check out with offsetX at 24 and offsetY at 21. Now I'm ready to implement the full code. For the line clear animation, I want to enhance the flash effect by using multiple sine wave pulses instead of a single flash—this will create a more dynamic visual feedback when lines are cleared.\n\nWriting animation logic... Writing the implementation...\n\nNow I'm settling on canvas dimensions: the main board at 300×600, and both the next and hold preview canvases at 120×90 to keep things simple and consistent. I should also think about how this scales across different screen sizes, though for now I'm focusing on making it work well on desktop. Configuring TypeScript settings...\n\nI'm realizing that `outFile` requires a module format like AMD or System, which complicates things for a simple browser game. The cleanest approach is to skip `outFile` entirely and just compile the single TypeScript file directly with `tsc game.ts`, letting it output `game.js` naturally. I'll set up a minimal tsconfig with ES2020 as the target, DOM library support, and strict mode enabled.\n\nWith `files: [\"game.ts\"]` specified and no `outDir` set, the compiler will place `game.js` right alongside the source file, which is exactly what I need for the HTML to reference it. Now I'm ready to start building out the actual game code in a single TypeScript file.\n\nFor the piece colors, I'm going with the classic Tetris palette—cyan for the I-piece, yellow for O, purple for T, green for S, red for Z, and blue and orange for J and L respectively.\n\nWriting the game logic... Defining the piece colors... Writing the Tetris piece code... Writing the complete game implementation... Writing the Tetris game code... Writing the complete Tetris implementation... Defining the Tetris piece configurations... Defining the Tetris piece configurations with their rotation states and colors, then setting up the wall kick offsets for the SRS rotation system... Defining the kick offset data...\n\nNow I'm setting up the game state variables—the board grid, current piece with its rotation and position, next piece preview, hold mechanic, score tracking, level, and lines cleared counter.\n\nInitializing game phase, pause state, and the piece randomization bag, along with timers for piece dropping and locking, surface detection, and row flash animations for line clears.\n\nSetting up input handling with DAS (delayed auto shift) state for smooth horizontal movement and key tracking, then grabbing canvas references for the board display, next piece preview, hold piece display, and score elements.\n\nConfiguring canvas dimensions based on the grid size and preview block dimensions, then starting to define utility functions... Writing game logic... Still writing game logic... Clearing the key states and loading the high score from storage, then spawning the first piece and transitioning into the playing phase. When a new piece spawns, I'm checking if it's valid—if not, the game ends and I save the high score if needed.\n\nNow I'm handling the piece lock logic, checking for complete rows and either flashing them or spawning the next piece.\n\nContinuing with the row clearing function...\n\nI'm implementing the movement and rotation mechanics for the tetromino pieces. The move function checks if a horizontal shift is valid, and if the piece is on a surface, it resets the lock timer and tracks how many times the piece has been repositioned before locking. The rotate function applies the same logic when the player rotates a piece. Now I'm working on the hard drop functionality...\n\nCompleting the hard drop by calculating where the piece would land, awarding points based on the distance, and immediately locking it in place. The hold piece function lets the player swap their current piece with a previously held one, resetting all the movement timers and checking if the new piece can actually be placed—if not, the game ends.\n\nNow I'm setting up the drop speed calculation that gets faster as the level increases, capping out at level 20, then defining the UI update functions to refresh the score, high score, level, and line count displays, plus a helper to show overlay messages like game over screens.\n\nWriting the rendering code... Finishing the ghost drawing function...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4727,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"fba1abd5-3f49-4f97-9a20-49403ccbbc22","uuid":"efb526cb-9537-449c-917e-336d54070cdf"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":853804,"duration_api_ms":98364,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"fba1abd5-3f49-4f97-9a20-49403ccbbc22","total_cost_usd":1.09916235,"usage":{"input_tokens":3,"cache_creation_input_tokens":4727,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4727},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4727,"cacheCreationInputTokens":4727,"webSearchRequests":0,"costUSD":1.09916235,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"e8fa9198-2305-4d97-b66b-c7b0b9b6c4b2","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":782229,"duration_api_ms":92098,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","total_cost_usd":0.9963687000000001,"usage":{"input_tokens":2,"cache_creation_input_tokens":482,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":482},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":4,"outputTokens":66124,"cacheReadInputTokens":8964,"cacheCreationInputTokens":482,"webSearchRequests":0,"costUSD":0.9963687000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"8bbe64dd-cbef-493c-8896-e1d3e2a7aa55","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 7, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 25 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 25 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "unspecified", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:24:20.612599+00:00", - "wall_time_seconds": 782, - "exit_code": 1, - "completed_at": "2026-04-04T09:37:26.539475+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,7 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "unspecified", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n"}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-eh4etafl","session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"4c922366-e357-4590-a90f-3b6b29f90a3d","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Rmat9H1AyAoNGoYyAhKM6v","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser. I'll create a complete HTML/CSS/JavaScript implementation with all standard Tetris mechanics:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls\n\nLet me build this as a single HTML file with embedded CSS and JavaScript.\n\nKey features to implement:\n- Canvas-based rendering\n- All 7 tetrominoes with their colors\n\n\n- Rotation with wall kicks to handle edge cases\n- Line clearing with visual feedback\n- Scoring that rewards clearing multiple lines at once\n- Progressive difficulty through increasing speeds\n- Next piece preview and hold piece functionality\n- Game over detection\n- Full keyboard controls including arrow keys for movement, rotation with Z/X or up arrow, space for hard drop, and C for hold\n\nI'm setting up the scoring tiers where single lines are worth 100 points per level, doubles are 300, triples are 500, and a full Tetris is 800, all multiplied by the current level.\n\nBuilding the game engine... Defining the tetromino pieces...\n\nNow I'm thinking about rotation mechanics—I'll use a matrix transformation that transposes and reverses rows to handle clockwise rotation. For wall kicks, I'll add simple collision detection that tries shifting the piece left or right if rotation fails at the current position. The game board will be a standard 10×20 grid.\n\nSetting up the game constants and piece definitions...\n\nNow I'm thinking through the full architecture—I need to handle the canvas setup with a preview area, manage the game state including the board and current pieces, implement movement and rotation with proper collision detection, add a ghost piece preview, handle line clearing with animations, and set up the scoring system.\n\nI'll use a 7-bag randomizer for fair piece distribution and implement basic wall kick logic to make rotation feel natural. Let me write out the complete HTML implementation with styling and game logic...\n\nWriting the HTML structure and styles... Still writing styles... Still writing styles... I'm building out the main game interface with the canvas for gameplay, an overlay with instructions and a start button, and a right panel to display the next upcoming pieces.\n\nSetting up the game constants and piece definitions... I'm realizing I need to step back and architect this properly. Let me organize the core structure with a Game class to manage state, individual Piece objects that track type, position and rotation, and a Board represented as a 2D array. I'll need helper functions for piece creation and rotation, collision detection, line clearing, and rendering both the board and falling pieces to the canvas.\n\nWriting the implementation... Defining the scoring system and game speed mechanics...\n\nNow I'm planning out the complete HTML structure for the full game implementation.\n\nBuilding the complete Tetris game... Setting up the game constants...\n\nI'm defining the speed progression for each level following the classic NES Tetris formula, along with the scoring multiplier for clearing different numbers of lines. Then I'm mapping out the wall kick offsets that let pieces rotate and shift position when they'd otherwise collide with walls or other blocks. I'm mapping out the full feature set for a complete Tetris implementation—a 10x20 board with all seven standard pieces, wall kick rotation mechanics, ghost and hold pieces, a preview of the next three pieces, and a 7-bag randomizer for fair piece distribution. The scoring system will multiply points by level (100/300/500/800 for clearing 1/2/3/4 lines), with levels advancing every 10 lines and speed increasing accordingly. I'll add hard drop with Space, soft drop with the down arrow, lock delay so pieces don't snap instantly, line clear animations, and full UI screens for start, game over, and pause states. For wall kicks, I'm going with a simplified but effective approach rather than overcomplicating it.\n\nNow I'm thinking through the rendering details—each block will be 30x30 pixels on a 300x600 pixel board, with a subtle 3D effect using lighter edges on top and left, darker edges on bottom and right. The ghost piece will be just an outline at low opacity to show where the piece will land.\n\nWriting the implementation... Defining the tetromino shapes... Setting up the game state variables for score, level, lines, and piece management, then initializing the board with empty cells, generating the piece bag, and resetting all game parameters... Setting up the piece bag system with a Fisher-Yates shuffle to randomize tetromino types, then implementing piece creation with proper positioning and rotation logic for clockwise turns.\n\nNow I'm writing the validation and collision detection... Writing movement functions... Implementing the hard drop and soft drop mechanics, where hard drop repeatedly moves the piece down and awards points based on distance, while soft drop gives a single point per manual descent. Then I'm setting up the piece locking system that places the piece blocks onto the board...\n\nStill writing game logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":482,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":482,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","uuid":"f5f1439b-2ccd-4278-a0d0-36f218082afc"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Cdc2qgZk9nZ3yBLS8tVNP8","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser. I'll create a complete HTML/CSS/JavaScript implementation with all standard Tetris mechanics. Let me plan out the features:\n\n1. **Pieces (Tetrominoes)**: All 7 standard pieces (I, O, T, S, Z, J, L)\n2. **Controls**: Arrow keys for movement, Up arrow or Z for rotation\n3. **Mechanics**:\n - Piece rotation (with wall kicks)\n - Line clearing\n - Scoring (based on lines cleared)\n - Increasing speed over time/levels\n4. **Display**:\n - Game board (10x20)\n - Score display\n - Level display\n - Lines cleared\n - Next piece preview\n - Game over screen\n\nI'll build this with a canvas-based approach for smooth rendering, implementing all the standard features like the 7 tetrominoes with proper colors, rotation with wall kicks, a ghost piece preview, hold functionality, Tetris-standard scoring, level progression with increasing speed, line clear animations, and pause controls.\n\nWriting the complete implementation... Writing the game implementation... Defining the piece shapes and colors...\n\nNow I'm implementing the full game with a dark theme and proper styling. I need to set up the standard SRS wall kick system for rotation, which has specific offset tables depending on the piece type and rotation direction. Defining the I-piece rotation kicks... I'm laying out the wall kick offsets for each rotation transition—these define the positions to try when a rotation would normally collide with a wall or obstacle, attempting them in order until one succeeds. I'm finishing up the SRS wall kick data for the I piece rotations, then I need to adjust the coordinate system since my grid has rows increasing downward. Rather than manually implementing all these rotation states, I'll simplify the approach and write out a complete Tetris game in HTML with wall kick logic built in.\n\nWriting the HTML file... Still writing styles... Still writing styles... Building the left sidebar layout... Writing the game engine... Defining the piece shapes...\n\nI'm debating whether to use a matrix representation or offset arrays for the pieces—the matrix approach is more intuitive for handling rotations, so I'll stick with that. Now I need to figure out the scoring system.\n\nStandard Tetris uses multipliers based on how many lines you clear at once, with single lines worth 100 points per level, doubles at 300, triples at 500, and a full Tetris at 800. Soft and hard drops also contribute points. For progression, I'll advance the level every 10 lines cleared, and the gravity speed decreases as the level increases, starting at 800ms per row at level 1 and getting progressively faster.\n\nI'm creating a lookup function that maps each level to its corresponding gravity speed, with a fallback to 17ms for very high levels. Now I need to structure the actual game code with a Board class to track fixed blocks, a Piece class for the active falling piece, and a Game class to manage the overall state and logic.\n\nFor rotation, I'll implement the SRS wall kick system with specific offset tables for different piece types and rotation transitions...\n\nActually, I need to be careful about coordinate conventions here. I'm using x for columns (positive right) and y for rows (positive down), so I need to convert the standard SRS values which use y-positive-up by negating the y offsets.\n\nLet me work through the rotation state transitions for the J, L, S, T, and Z pieces, mapping out all the wall kick offsets for each rotation direction. Adjusting the kick offsets for a canvas coordinate system where y increases downward... Defining the I-piece rotation kicks... I need to double-check my coordinate conversion here—when I negate the y-values from the original SRS system, I should be getting (+1,-1) for that 2→3 rotation, not (+1,+1). Let me verify this more carefully by working through the original 3→2 data and applying the same negation. Compiling the kick offset tables for all rotation transitions... I'm finishing up the kick offset data for the piece rotations, then moving on to actually implementing this in code. I'll structure the full game with constants for the board dimensions and piece definitions, then handle the board management, rotation logic with those kick offsets, input handling, the main game loop, and rendering all in one clean HTML file.\n\nDefining piece colors and shapes... Writing rotation functions...\n\nI'm deciding whether to precompute all rotations for each piece or calculate them on the fly—computing them dynamically is cleaner. Now I need to figure out the spawn position: pieces should start centered horizontally and near the top of the board. For a 10-column board, that means x = Math.floor((10 - pieceWidth) / 2), which gives different values depending on the piece size. For the y position, pieces spawn with their bottom at the visible top row. I'm settling on a simpler approach: the board stays at 20 rows, and pieces can spawn with negative y positions that get clipped during rendering. For the I piece, I'll spawn it at y = -1 so its active row appears at the visible top, and I'll apply the same logic to other pieces based on their matrix structure. For collision detection, I need to validate three things: that the piece stays within the left and right boundaries, doesn't go below the board, and doesn't overlap with existing blocks (checking the board only when the piece is visible). Now I'm ready to write out the complete game—I'll implement a lock delay system where pieces have 500ms after landing to be shifted or rotated before they're permanently placed, which is the standard approach for Tetris.\n\nWriting the complete HTML file... Still writing styles... Still writing styles... Still writing styles... Building the game layout... Setting up the game constants now — defining the grid dimensions, piece types, color palette for each tetromino, and the scoring multipliers for clearing lines.\n\nDefining drop speeds... Building the rotation system... Defining rotation kick data... Setting up the game state variables for the board, current piece, held piece, next queue, and scoring system, along with timers for piece dropping and line clearing animations, then grabbing references to the canvas elements for rendering.\n\nNow I'm setting up the bag randomizer system that uses a 7-bag algorithm to ensure fair piece distribution, and initializing the next queue to show upcoming pieces.\n\nBuilding the board and validation logic... Still writing game logic... Writing piece spawning and rotation logic... Writing game mechanics... Writing input handling... Setting up the keyboard release handler to reset the DAS state when arrow keys are released, then implementing the DAS logic that builds up a delay before rapid-fire movement kicks in, and finally starting to initialize the game board and score. Writing game logic... Writing game loop logic... Still writing rendering code... Still writing the rendering logic... Now I'm drawing the active piece using the same matrix iteration approach, then adding a semi-transparent dark overlay when the game is paused with centered text.\n\nBuilding the preview renderer... Writing the next queue renderer... Writing piece rendering code... Finishing the piece rendering with shading effects...\n\nWait, I found a bug in the rotation kick logic. Let me verify the CCW direction mappings against my SRS tables—checking that \"0>3\", \"1>0\", \"2>1\", and \"3>2\" are all properly defined as reverse kicks from the clockwise rotations. They all check out, so the tables are correctly symmetric.\n\nNow I'm verifying the spawn positions for each piece type. The I piece's visible row appears at y=0 with spawn_y=-1, the T piece's top row is visible at y=0, and the O piece starts with its top row hidden at y=-1. All the spawn positions look correct. I'm checking the Tetris Guideline specification—pieces spawn in the hidden rows above the visible play field, so using spawn_y = -1 for all pieces makes sense. For the O piece specifically, this means the top row stays hidden while the bottom row appears at the top of the visible area, which matches standard Tetris behavior. I'm realizing the simplest approach is to just spawn all pieces at y=0 and clip the rendering to only display rows 0-19, letting any parts above that stay invisible without affecting the game logic. This way the T piece shows its top row at y=0 as expected, and I don't have to worry about different spawn positions for different piece shapes. I think the cleanest approach is to precompute the spawn Y position for each piece type based on where its first occupied row appears in the rotation matrix, so pieces spawn with their topmost blocks at y=0. For the I piece that means spawn_y = -1 since its blocks start at row 1, while the T piece would spawn at y=0 since it has blocks in row 0. I need to reconsider the spawn positions more carefully. In the standard Tetris guideline, pieces spawn in a buffer area above the visible field, with the I piece starting two rows higher than other pieces. For my coordinate system where y=0 is the top of the visible field, I should spawn most pieces at y=-1 so their first visible blocks appear at y=0, but the T piece is tricky since it has blocks in its top row of the matrix. Let me think through exactly which pieces have blocks in their first matrix row and adjust spawn positions accordingly. So with spawn_y = 0, the T piece displays its full shape immediately at the top of the board, and the game over check works correctly—if the top row is filled, the spawn fails. I'll set spawn_y = -1 for the I piece since its active row needs to align differently, and spawn_y = 0 for everything else.\n\nSetting up spawn positions... I'm verifying the spawn positions for each tetromino piece—the I piece needs to start one row above the visible grid at y = -1 so its blocks appear correctly at the top, while all other pieces spawn at y = 0. Now I'm thinking through the spawn x-coordinate positioning. Writing spawn position logic...\n\nNow I'm working through the SRS rotation kick tables—I need to map the correct offsets for clockwise and counterclockwise rotations based on the current rotation state.\n\nI've got all 8 rotation transitions covered with their corresponding kick table keys. Now I'm thinking through the lock delay mechanics, which should give pieces about 500ms before they lock, with the move counter resetting on each placement action.\n\nThe tricky part is handling when a piece rotates off the ground—I need to make sure `isOnGround` flips back to false if the rotation creates space underneath, so the lock timer doesn't trigger prematurely. My current approach checks if the piece can fall, and if not, I start the lock sequence with a timer that increments each frame and resets on player input, locking after 500ms of inactivity.\n\nFor the soft drop, I'm resetting the gravity timer to prevent double-dropping, and hard drop just moves the piece all the way down and locks immediately. Now I'm thinking through the DAS logic for left and right movement—immediate response on first press, then a delay before auto-repeat kicks in at regular intervals.\n\nI'm spotting a potential issue with overlapping key presses: if the player holds Right then presses Left while still holding Right, the last pressed direction wins, but when they release Left, I'm resetting the direction state without checking if Right is still being held. I need to check the keys state when releasing to see if the opposite direction is still active.\n\nFixing key release handling...\n\nFor the soft drop, I'll leverage the browser's built-in key repeat instead of managing it manually.\n\nThe issue is that my early return guard prevents repeated keydown events, which blocks the natural repeat behavior I need. I should remove that guard and let keydown fire naturally for each repeat, while still tracking held keys separately for the DAS mechanism on left and right arrows.\n\nSetting up the key event handler...\n\nI see the issue though—ArrowDown is firing on every keydown event including browser key repeats, which means soft drop speed depends on the user's OS settings. I should move soft drop into the game loop instead so it drops at a consistent rate I control, just faster than the normal gravity.\n\nI'm settling on the final implementation now. The key spawn positions are y=-1 for the I-piece and y=0 for everything else, with x-coordinates at 3 for most pieces and 4 for the O-piece.\n\nI'm also locking in the game mechanics: 500ms lock delay that resets on moves and rotations (capped at 15 resets), standard DAS timing of 167ms delay with 33ms repeats, 150ms flash animation for line clears, and a speed curve that starts at 800ms per drop at level 1 and accelerates to 17ms at level 20 and beyond, with level progression every 10 lines.\n\nNow I need to handle keyboard input properly—preventing default scrolling behavior for arrow keys and space, and making sure the pause key works even when there's no active piece during animations.\n\nWriting the complete implementation... Setting up the piece definitions and rotation matrices... Defining the kick tables... I'm defining the kick offset data for different rotation states, then setting up a function to retrieve the appropriate kick table based on piece type and rotation direction. Now I'm adding the scoring system and calculating drop speed based on the current level.\n\nSetting up the game state variables... I'm implementing the piece shuffling logic using a Fisher-Yates shuffle to randomize the bag of Tetris pieces, then I realize my spawn function is getting convoluted so I'm going to scrap the complicated logic and just write out the complete, clean HTML file from scratch.\n\nWriting the HTML structure... Still writing styles... Writing the HTML structure... Building the game interface... Setting up the game constants and piece definitions... Setting up rotation data structures...\n\nNow I'm defining the wall kick offsets for the SRS rotation system, mapping each rotation transition to a series of potential kick positions that let pieces slide into place when they'd otherwise collide. Defining kick offset data for different rotation states and a function to retrieve the appropriate kicks based on the piece type and rotation direction, then setting up scoring constants and a speed calculation function...\n\nNow I'm setting up the canvas elements and 2D contexts for the game board, next piece preview, and hold piece display, along with references to the UI elements for score and level.\n\nI'm initializing the core game state variables for the board, current piece, held piece, and piece queue, plus tracking score, level, and lines cleared. I'm also setting up flags for game status like whether the player can hold, if the game is over or paused, and various timing variables for piece locking, line clearing animations, and input handling like delayed auto-shift and soft drop mechanics.\n\nNow I'm setting up the bag randomizer system that shuffles through all seven tetromino types and refills when empty, along with functions to manage the piece queue that always keeps three pieces ahead for preview.\n\nWriting piece helper functions... Writing game logic... Writing game logic... Writing the input handler...\n\nNow I'm setting up the game initialization function that resets the board, clears the score and level, and prepares all the game state variables before spawning the first piece and updating the display.\n\nHandling the animation loop and pause functionality... Writing game loop logic... Writing cell rendering... Writing the game rendering logic... Writing the active piece rendering...\n\nNow I'm finishing the pause overlay with the resume prompt, then moving on to render the next piece queue by setting up the preview canvas and calculating positions for each upcoming tetromino in the queue.\n\nRendering the preview blocks... Rendering the held piece in the hold box with proper shading and opacity based on whether it can be held.\n\nNow I'm setting up the start button click handler and doing the initial render. I notice there's a bug in the `hold()` function—I need to save the current piece type before calling `spawn()`, and I also need to fix how `spawn()` handles the next piece type to avoid calling it twice.\n\nLet me trace through the logic: when holding with no previously held piece, the current piece goes into hold and a new one spawns from the queue. When there is a held piece, I swap the current piece with the held one without consuming the queue. That's the correct behavior, so I just need to make sure `spawn()` isn't being called redundantly. Looking at the spawn and nextType functions, I can see that spawn pulls the first item from the queue and pushes a new one from the bag, so after initialization with three items and the first spawn call, the queue should have those three items minus the one that was consumed. The \"next\" display showing three items makes sense since we're displaying what comes after the current piece. The queue logic checks out. Now I'm noticing the `hold()` function doesn't reset the movement state variables when swapping pieces—I need to add resets for `grounded`, `lockT`, `lockMoves`, and `dropT` so the newly held piece starts fresh.\n\nI'm also reconsidering the spawn collision detection. The current approach tries moving the piece up by one cell if it can't spawn, then checks again before ending the game, but that's not how standard Tetris handles it.\n\nThe proper lockout condition is when a piece can't be placed at its default spawn position—for most pieces that's y=0, and for the I piece it's y=-1. I should just check if the spawn position is valid, and if not, end the game immediately. The valid() function needs to properly account for the board boundaries to make this work correctly. I'm checking the lock condition—if any block lands above the visible field (y < 0), that's game over. The spawn check catches when a piece can't fit at all, and the lock check catches when blocks end up placed in the lockout zone, which handles both the block out and lock out conditions.\n\nRestructuring the lock function...\n\nI need to check for lock-out before placing any blocks on the board. The key insight is that when a piece spawns at y=-1, its blocks are initially at row 0 of the playfield, so the check `piece.y+r < 0` correctly identifies when blocks extend above the visible area. Even in edge cases like an immediate hard-drop on a full board, this would properly trigger game over.\n\nNow I'm ready to finalize the code and move on to the row-clearing animation, where I'll make the cleared cells flash between white and their original color before they disappear. Writing the flash overlay... Writing the flash effect...\n\nNow I'm thinking through the edge cases—specifically what happens when the player presses a key (like pause) while the flash animation is running, since the game loop returns early during the flash and doesn't process normal physics. I also need to figure out what happens after the flash completes and the rows are cleared.\n\nLet me trace through the piece spawning and hold mechanics to make sure they're working correctly. After initialization, the queue should dequeue and enqueue properly, and when I hold a piece, it should swap correctly with the next spawned piece.\n\nI also need to make sure that when I create a new piece during a hold swap, it gets the proper initial rotation and position, and the drop/lock timers reset. One more thing to check: the `draw()` function gets called before the game starts, so I need to handle the case where the queue hasn't been initialized yet.\n\nI'll add guards to check if the game has started before trying to draw the queue and held piece, or I could just initialize those variables as empty defaults from the start. Let me go with initializing them upfront so the draw function doesn't need extra checks.\n\nNow I'm ready to write out the complete HTML file. Before I do, let me verify the SRS kick table offsets...\n\nReviewing kick offsets... Verifying the y-axis negation conversions for the remaining rotation states, and they all check out correctly. Defining rotation kick data... I'm realizing I need to be more careful with the coordinate transformations when converting from y-up to y-down orientation. Let me recalculate these rotation kick offsets systematically to make sure I'm negating the y-coordinates correctly at each step. Updating the kick offset tables... Defining rotation data for JLSTZ pieces...\n\nNow I'm ready to write out the complete HTML file and get this working. I need to reconsider how the clockwise rotation actually works for the T piece. Let me trace through the transformation more carefully—when I rotate a 3×3 matrix 90 degrees clockwise, each element at position (r, c) should move to (c, rows-1-r), which means the leftmost column becomes the top row. Working through the T piece specifically, I'm verifying that my rotation function produces the correct orientations. Verifying the rotation function works correctly for the T piece by tracing through the logic with the 3x3 matrix dimensions. I'm verifying the rotation logic visually with the T piece, and it matches what my function produces. Now let me test this with a non-square matrix like the I piece to make sure the algorithm works correctly for different dimensions. Looking at the rotation sequence for the I piece, I need to verify that rotating clockwise cycles through the standard four orientations correctly—starting with the horizontal spawn position, then vertical, then horizontal again, and back to vertical. Verifying the rotation logic by checking that rotation 3 equals the clockwise rotation of rotation 2, working through the column transformations to confirm the vertical line becomes horizontal. Verifying the spawn positions for each piece type—the I piece appears at row 0 with its cells spread across columns 3-6, the O piece sits at rows 0-1 in columns 4-5, and the T piece occupies row 0-1 starting at column 3, all matching the expected Tetris spawn behavior.\n\nNow I'm writing out the complete implementation file. One thing I need to handle carefully is the DAS (Delayed Auto Shift) timing—when the delay threshold is reached, I'm setting the repeat timer to trigger immediately so the first auto-shift happens right away without waiting for another interval. I'm realizing there's a one-frame delay (around 16ms) between when DAS activates and when the first ARR move happens, which is acceptable. But I could also trigger that first ARR move immediately when DAS activates instead of waiting for the next frame.\n\nThe classic Tetris behavior would be: initial keypress triggers a move, then after DAS_MS another move happens, then ARR_MS intervals after that. I'll go with the immediate approach for the most responsive feel.\n\nNow I'm going back to verify the SRS kick tables one more time with a concrete example before finalizing the code. I'm realizing my rotation calculation is producing a different result than the standard Tetris T-piece rotation—my function is centering the piece in the matrix while the expected rotation should align it differently. Let me trace through what the correct rotation should actually be by visualizing the piece step by step. I'm working through the rotation logic step by step—calculating what each position in the rotated matrix should contain by pulling values from the original T piece, and I'm seeing that my result gives a vertical line of T's down the middle rather than the expected horizontal orientation when rotated clockwise. I'm looking at the standard SRS rotation states for the T-piece to verify how each rotation maps to the next when applying clockwise rotation, checking whether my rotation logic produces the correct sequence. my rotCW function is definitely correct—the matrix representation matches the SRS spec perfectly. Now I'm ready to write out the final HTML file with the rotation logic and kick tables all verified.\n\nWriting the HTML file... Still writing styles... Still writing styles... Building the game interface... Setting up the game constants and piece definitions... Defining rotation matrices for each piece... Defining the kick rotation data... Setting up the game constants and DOM references...\n\nNow I'm initializing the game state variables for the board, pieces, scoring, and input handling, along with timing constants for lock delays, flash effects, and movement controls.\n\nSetting up the bag randomizer to shuffle through the seven tetromino types, then implementing queue management to always have the next three pieces ready.\n\nNow I'm writing helper functions for piece creation and validation—setting up each new piece with its type, rotation state, and spawn position, then checking whether a piece can legally occupy a given position on the board by testing collision against boundaries and existing blocks.\n\nWriting game mechanics... Finishing the hard drop and now handling piece locking—checking for lock-out conditions where blocks exceed the visible field, then writing the placed piece to the board and preparing to scan for completed lines. Writing game logic... I'm tracing through the hold logic to verify it works correctly—when I hold a piece, the current piece goes into the hold slot, a new piece spawns from the queue, and the hold flag resets to prevent immediate re-holding. Refactoring the hold logic...\n\nThe key insight is that `holdPiece()` needs to spawn a new piece from the queue without re-enabling the hold ability, while `spawnPiece()` is the only place that sets `canHold = true` to allow holding again. This way, after holding a piece, the player can't hold again until they naturally spawn the next piece.\n\nNow for the flash animation during line clears—`flashRows` tracks which rows need to be cleared, and the game loop enters a special animation-only mode that skips physics updates. Once the flash duration expires, `clearLines()` removes those rows and calls `spawnPiece()` to bring in the next piece. The pause mechanic works correctly here since `flashT` freezes when paused and resumes when unpaused. I also need to make sure the current piece doesn't render during the flash animation since it's already been locked into place.\n\nSetting `piece = null` after locking...\n\nContinuing with the lock piece logic...\n\nNow I'm working on the rendering side—during the flash animation, I want the completed rows to pulse with a bright white overlay that fades in and out using a sine wave, creating that satisfying visual feedback before the rows clear. Writing the blink logic... I'm verifying the timing works out—at each 40ms interval the phase alternates between white and the original color, ending on white right before the rows clear. But honestly, just keeping them solid white for the full 120ms duration is simpler and probably looks fine, though it might feel a bit static.\n\nActually, a fade effect would be better—I'll draw the base cell color first, then layer a white overlay that starts subtle and intensifies as the flash progresses, creating a smooth brightening effect that peaks just before the rows disappear.\n\nNow I'm ready to write out the complete game implementation with all the mechanics figured out. I need to handle the case where input is processed during the flash animation but the piece is null, so I'll add null checks to the movement handlers to prevent errors. The cleanest approach is to disable input entirely during the flash sequence, which keeps the logic simple and prevents any edge cases with piece state. I'm confident the piece state is always valid since lockPiece() flows synchronously into either game over, a flash animation, or spawning the next piece. Now I'm writing out the complete implementation with all the core Tetris mechanics—the seven tetrominoes with proper rotation, wall kick offsets, ghost and hold pieces, a visible next queue, line clear animations with flashing, standard scoring scaled by level, level progression every ten lines, accelerating gravity, input handling with DAS and ARR for smooth movement, soft drop acceleration, hard drop, and lock delay that resets on movement.\n\nI'm reconsidering the soft drop speed—standard Tetris uses 20G when held, but for simplicity I'll stick with a fixed interval around 50ms per row.\n\nNow I'm looking at the scoring system: single lines give 100 points per level, doubles are 300, triples are 500, and a full Tetris is 800, all multiplied by the current level. Soft and hard drops add bonus points per cell dropped. I'll implement this exactly as specified.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":0,"cache_read_input_tokens":4723,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","uuid":"018c5646-8174-41d2-aaa4-10f8d8332836"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Cdc2qgZk9nZ3yBLS8tVNP8","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_011UsreBGBdjqE1i1mc48QG8","name":"Bash","input":{"command":"ls /tmp/loop-bench-eh4etafl","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":0,"cache_read_input_tokens":4723,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","uuid":"aa4019e8-8809-44fd-9f9a-515213bab3f7"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":782229,"duration_api_ms":92098,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"d8c245f9-210b-42b3-a308-05ce1dc83420","total_cost_usd":0.9963687000000001,"usage":{"input_tokens":2,"cache_creation_input_tokens":482,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":482},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":4,"outputTokens":66124,"cacheReadInputTokens":8964,"cacheCreationInputTokens":482,"webSearchRequests":0,"costUSD":0.9963687000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"8bbe64dd-cbef-493c-8896-e1d3e2a7aa55","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":369690,"duration_api_ms":320653,"is_error":true,"num_turns":6,"stop_reason":"tool_use","session_id":"51362cea-83a9-4448-b173-97c33c3a433b","total_cost_usd":0.5627619,"usage":{"input_tokens":8,"cache_creation_input_tokens":12023,"cache_read_input_tokens":36144,"output_tokens":27271,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":12023},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":9,"outputTokens":30310,"cacheReadInputTokens":52408,"cacheCreationInputTokens":24630,"webSearchRequests":0,"costUSD":0.5627619,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"a295b98f-2aed-4745-b8f0-ce4802d6cdc4","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 3, - "code": 1, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 948, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 4 - }, - "duplication_percentage": 0.0, - "score": 0.95 - }, - "transcript_analysis": { - "total_events": 22, - "tool_calls": { - "total": 6, - "bash": 3, - "write": 0, - "edit": 1, - "read": 2 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 5, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.5895 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "unspecified", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:24:22.034962+00:00", - "wall_time_seconds": 370, - "exit_code": 1, - "completed_at": "2026-04-04T09:30:35.563317+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,22 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "unspecified", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n"}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-st5faakp","session_id":"51362cea-83a9-4448-b173-97c33c3a433b","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"afba112f-79b3-4c7e-ba2c-886b5ba2497e","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01XAABJtxDKteD17aBgYQhWi","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser. I'll create a complete HTML/CSS/JavaScript Tetris game with all the standard mechanics. Let me build this as a single HTML file.\n\nKey features to include:\n1. All 7 Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed (levels)\n6. Keyboard controls (arrow keys for movement, up arrow or Z for rotation)\n7. Next piece preview\n8. Game over detection\n\n\n9. Canvas-based rendering on a 10×20 board with color-coded tetrominoes\n10. Scoring: 100 for single line, 300 for double, 500 for triple, 800 for Tetris, with levels increasing every 10 lines\n11. Full control scheme including soft drop, hard drop, rotation in both directions, and pause functionality\n\nWriting the complete HTML file...","signature":"EtYIClsIDBgCKkDy/fyWuLCo/LyeesBqhfKSgGL51LWsxi3pH+MjP75T+DjV7akxttuUylLS9YE57fVUS5dCRX2we208yPIqLVdGMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgyZAcNCiGsxDhxSy20aDIPQIIa5RzF1hJvjQiIwL2Wbrj5fJpwjj+Pnvew7Ybxa5jY8emAxOhedCqwAQC5apG8lPS+ilKiMN5xl8gdlKqgHwFktTRpacMt7KbWm96LexeSpOqEtvtn8ec27RJHbwzBZ480OePD+k6AAQ0U7QDbFzRPn1oSwp2v9XSP99byG8cz7EBbpk0fxFhP0fVIt8UBx4le1jey2xla/Rb5hnGcM6DLh8mRXu5l1yp7sEO2mgDvSv2ZcZA/0GsDY9yDyVg3BXdKW/J6CJwEhIPmjx9akA9/f+/MhOAnULlIQ54kTJ6ynVI78vTx7qHkP2LxImTfCAb3OIdtBW4u9wJcmndc3H3WqhPB9fK9OskKtFfM5WGcAL7irr0piTg3i5+Kb7V/0gi6Jub6QX4ISD8JnC3fCSqksDBm2LSc+dXpU7J8InPMelKcc9lRWTe+HFuAiHwps80oS53JbHpJeHRq2zEA8WKzCkkamScIpCmi3iS0s3t3W4b/tRHiBvbcBFvMTTx7/mTpJeugpFTgxA0n5rKUxlT/7O1gAo2pzX9aUgimMEDs01vkqsz1xDKKW7z9oZYEcNqF2v1QTiFnvbHZPUFtcOqsMzC4dv2mbdVd7ACwKwCUBJO4oO5oQcHaCRubft7YYQbwhWFutO1lrRyGuSa9BCLDjx9tQmYWniuh3rYtv9qEuCkcjGxAOgO/l3Z3WfWGqzkE7wYsoKJejbPgTinC3i4VSMJTr/59K3yBZjaPk1TA/E54o97mqR1o7odH3e4v416SM7AefvBuJLFyt4DZ6w4CEPNnb5nR6wtCwjQzUPS+Vft/3Qu2xQ/LqT6QDs9kr79hDjx8qqG1Z+Xdfx0u2XanLfyGXlHDWyafvD/Kt6ftF1U2SOHdC8Tysl16rNMjCVrpy0eGTGymhqN6PToPMqqI7rJr6Ge9DGBPD8Y08dLjTjZMfm6rWUumWys2TTZSPuCG/x90zmOtHoZEBQ8AeruhxclJxmD/bgJGigA8YwP1NMuQuNZTuboAYGytCpJ7AgDqsXwqNyVeEMU869tOGAQEOtYJuA/jVDmgrr0fcxNj5socit9VoxeNPftRfL0ozG/YwnzMgZGyMouYIVjDYyNUJ7F9oUJu+WoGHG6mEJd1e31NBJL9+VFB7ovJRx7m0hM8Eq0KyIcY7WvboT6tSchsKjbgT9OknfGxDutq/asD0BOV13eugCvH+9LsvJKN0r6EOreL8udICSq0qHKb5Ywy8qM3DFUo7tA1mkRAM1phXiay9BwHfc8sQ9yoLGSJpZJm0QUwXd0up2gdWYw2pNNnBw4F3CTEDyFgfiwAZER5yCXFJomV3GAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":482,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":482,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"07fd4860-d432-423b-bb35-f567a7b73637"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01XAABJtxDKteD17aBgYQhWi","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01An5PukvWqYZ3FyWQFCLhDc","name":"Bash","input":{"command":"ls /tmp/loop-bench-st5faakp","description":"List current working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":482,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":482,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"023c34f2-fb63-4719-af7c-3d4c7f3c8da3"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01An5PukvWqYZ3FyWQFCLhDc","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"af4de6e2-92c1-4c6e-b7da-7a5309e967c6","timestamp":"2026-04-04T09:24:34.199Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012rnpvY3wmuopCGYG1XTy9K","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01AiF6GVH2LN23QkMuZ9A4bM","name":"Read","input":{"file_path":"/tmp/loop-bench-st5faakp/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":413,"cache_read_input_tokens":4723,"cache_creation":{"ephemeral_5m_input_tokens":413,"ephemeral_1h_input_tokens":0},"output_tokens":59,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"3ba3f87a-a7a7-4db9-bc7a-65049482455a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01AiF6GVH2LN23QkMuZ9A4bM","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-st5faakp\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"eslint\": \"^10.2.0\"\n17\t }\n18\t}\n19\t"}]},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"bf36e87c-3a3e-4f6a-acf0-323292e87b7b","timestamp":"2026-04-04T09:24:36.038Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-st5faakp/package.json","content":"{\n \"name\": \"loop-bench-st5faakp\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"eslint\": \"^10.2.0\"\n }\n}\n","numLines":19,"startLine":1,"totalLines":19}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011VFmBdzxNbChNW9KNnaY7W","type":"message","role":"assistant","content":[{"type":"text","text":"Now I'll build the full Tetris game as a single, self-contained `index.html` file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":281,"cache_read_input_tokens":5136,"cache_creation":{"ephemeral_5m_input_tokens":281,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"4e233c9b-b5cd-433e-9103-4199150cce41"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_013yQuADCvrpW9nGt1BT4QvU","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013TaLLYZu5azos37hJxDNB8","name":"Bash","input":{"command":"ls /tmp/loop-bench-st5faakp/node_modules | head -20","description":"Check available node modules"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":5417,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":56,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"00902c7b-b830-4c12-828b-84577737f7ac"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013TaLLYZu5azos37hJxDNB8","type":"tool_result","content":"acorn\nacorn-jsx\najv\nbalanced-match\nbrace-expansion\ncross-spawn\ndebug\ndeep-is\nescape-string-regexp\n@eslint\neslint\n@eslint-community\neslint-scope\neslint-visitor-keys\nespree\nesquery\nesrecurse\nestraverse\nesutils\nfast-deep-equal","is_error":false}]},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"0bbd647a-6750-45ed-b94b-33059798dfc2","timestamp":"2026-04-04T09:26:12.128Z","tool_use_result":{"stdout":"acorn\nacorn-jsx\najv\nbalanced-match\nbrace-expansion\ncross-spawn\ndebug\ndeep-is\nescape-string-regexp\n@eslint\neslint\n@eslint-community\neslint-scope\neslint-visitor-keys\nespree\nesquery\nesrecurse\nestraverse\nesutils\nfast-deep-equal","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01MXGpCCD9dUTb9nw8CU6rWU","type":"message","role":"assistant","content":[{"type":"text","text":"Now I'll build the complete Tetris game as a single, polished HTML file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":188,"cache_read_input_tokens":5417,"cache_creation":{"ephemeral_5m_input_tokens":188,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"01181a27-a2bb-49a9-b782-e4bba637dd38"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01WcVMzGio9JerqEQ8VTbTbS","type":"message","role":"assistant","content":[{"type":"text","text":"Now I'll build the complete Tetris game as a single self-contained HTML file:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":5605,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"498025af-eb6a-49f4-ac0d-63679f9a7bdb"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01WcVMzGio9JerqEQ8VTbTbS","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01NGXmT1123ZWPq32Q3HRMdq","name":"Bash","input":{"command":"cat > /tmp/loop-bench-st5faakp/tetris.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0d0d1a;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n font-family: 'Segoe UI', system-ui, sans-serif;\n color: #e0e0ff;\n user-select: none;\n }\n\n #wrapper {\n display: flex;\n gap: 24px;\n align-items: flex-start;\n }\n\n /* ── Left panel ─────────────────────────────── */\n #left-panel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 140px;\n }\n\n /* ── Right panel ────────────────────────────── */\n #right-panel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 140px;\n }\n\n .panel-box {\n background: #12122a;\n border: 2px solid #2a2a5a;\n border-radius: 10px;\n padding: 14px 16px;\n }\n\n .panel-box h3 {\n font-size: 10px;\n letter-spacing: 2px;\n text-transform: uppercase;\n color: #6666aa;\n margin-bottom: 8px;\n }\n\n .panel-value {\n font-size: 26px;\n font-weight: 700;\n color: #c8c8ff;\n letter-spacing: 1px;\n }\n\n /* ── Canvas / game board ────────────────────── */\n #game-area {\n position: relative;\n }\n\n #board {\n display: block;\n border: 3px solid #2a2a5a;\n border-radius: 4px;\n box-shadow: 0 0 40px #3333aa55, inset 0 0 20px #00001888;\n }\n\n /* ── Overlay (start / pause / game-over) ───── */\n #overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 14px;\n background: rgba(5, 5, 20, 0.82);\n border-radius: 2px;\n backdrop-filter: blur(3px);\n }\n\n #overlay h2 {\n font-size: 30px;\n letter-spacing: 4px;\n text-transform: uppercase;\n color: #fff;\n text-shadow: 0 0 20px #8888ff;\n }\n\n #overlay p {\n font-size: 13px;\n color: #9090cc;\n letter-spacing: 1px;\n text-align: center;\n line-height: 1.7;\n }\n\n #overlay button {\n margin-top: 6px;\n padding: 11px 32px;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 2px;\n text-transform: uppercase;\n background: linear-gradient(135deg, #4444cc, #6644ff);\n color: #fff;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: filter 0.15s, transform 0.12s;\n box-shadow: 0 4px 18px #4444cc88;\n }\n\n #overlay button:hover { filter: brightness(1.25); transform: translateY(-2px); }\n #overlay button:active { transform: translateY(0); }\n\n /* ── Next-piece canvas ──────────────────────── */\n #next-canvas {\n display: block;\n margin: 6px auto 0;\n }\n\n /* ── Hold canvas ────────────────────────────── */\n #hold-canvas {\n display: block;\n margin: 6px auto 0;\n }\n\n /* ── Controls list ──────────────────────────── */\n .controls-list {\n font-size: 11px;\n line-height: 2;\n color: #7777bb;\n }\n\n .controls-list span {\n display: inline-block;\n background: #1e1e3e;\n border: 1px solid #3333668a;\n border-radius: 4px;\n padding: 1px 6px;\n font-size: 10px;\n color: #aaaadd;\n margin-right: 4px;\n }\n\n /* ── Ghost / level colours ──────────────────── */\n #level-bar-wrap {\n background: #1a1a35;\n border-radius: 4px;\n height: 6px;\n overflow: hidden;\n margin-top: 6px;\n }\n\n #level-bar {\n height: 100%;\n width: 0%;\n background: linear-gradient(90deg, #4466ff, #aa44ff);\n border-radius: 4px;\n transition: width 0.4s ease;\n }\n </style>\n</head>\n<body>\n\n<div id=\"wrapper\">\n\n <!-- LEFT PANEL -->\n <div id=\"left-panel\">\n <div class=\"panel-box\">\n <h3>Score</h3>\n <div class=\"panel-value\" id=\"score-display\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Level</h3>\n <div class=\"panel-value\" id=\"level-display\">1</div>\n <div id=\"level-bar-wrap\"><div id=\"level-bar\"></div></div>\n </div>\n <div class=\"panel-box\">\n <h3>Lines</h3>\n <div class=\"panel-value\" id=\"lines-display\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Hold <small style=\"font-size:9px;color:#555\">(C)</small></h3>\n <canvas id=\"hold-canvas\" width=\"100\" height=\"80\"></canvas>\n </div>\n </div>\n\n <!-- GAME BOARD -->\n <div id=\"game-area\">\n <canvas id=\"board\" width=\"300\" height=\"600\"></canvas>\n <div id=\"overlay\">\n <h2>Tetris</h2>\n <p>Arrow keys to move & soft-drop<br>\n ↑ / X rotate CW · Z rotate CCW<br>\n Space hard-drop · C hold<br>\n P pause</p>\n <button id=\"start-btn\">Start Game</button>\n </div>\n </div>\n\n <!-- RIGHT PANEL -->\n <div id=\"right-panel\">\n <div class=\"panel-box\">\n <h3>Next</h3>\n <canvas id=\"next-canvas\" width=\"100\" height=\"200\"></canvas>\n </div>\n <div class=\"panel-box\">\n <h3>Controls</h3>\n <div class=\"controls-list\">\n <span>←→</span> Move<br>\n <span>↓</span> Soft Drop<br>\n <span>Space</span> Hard Drop<br>\n <span>↑</span><span>X</span> Rotate CW<br>\n <span>Z</span> Rotate CCW<br>\n <span>C</span> Hold<br>\n <span>P</span> Pause\n </div>\n </div>\n <div class=\"panel-box\" id=\"combo-box\" style=\"display:none\">\n <h3>Combo</h3>\n <div class=\"panel-value\" id=\"combo-display\">x0</div>\n </div>\n </div>\n\n</div>\n\n<script>\n// ═══════════════════════════════════════════════════════════════\n// CONSTANTS\n// ═══════════════════════════════════════════════════════════════\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 30; // px per cell\n\n// Colours per piece type (index 0 = empty)\nconst COLORS = [\n null,\n '#00cfcf', // I – cyan\n '#f0a000', // O – orange/yellow\n '#a000f0', // T – purple\n '#00a000', // S – green\n '#f00000', // Z – red\n '#0000f0', // J – blue\n '#f07800', // L – orange\n];\n\nconst GHOST_ALPHA = 0.22;\n\n// Tetromino definitions – each piece has 4 rotation states\n// Stored as [row][col] offsets from the pivot\nconst PIECES = {\n // 0 1 2 3\n I: [\n [[0,0],[0,1],[0,2],[0,3]],\n [[0,2],[1,2],[2,2],[3,2]],\n [[1,0],[1,1],[1,2],[1,3]],\n [[0,1],[1,1],[2,1],[3,1]],\n ],\n O: [\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n ],\n T: [\n [[0,1],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[1,2],[2,1]],\n [[0,1],[1,0],[1,1],[2,1]],\n ],\n S: [\n [[0,1],[0,2],[1,0],[1,1]],\n [[0,1],[1,1],[1,2],[2,2]],\n [[1,1],[1,2],[2,0],[2,1]],\n [[0,0],[1,0],[1,1],[2,1]],\n ],\n Z: [\n [[0,0],[0,1],[1,1],[1,2]],\n [[0,2],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[2,1],[2,2]],\n [[0,1],[1,0],[1,1],[2,0]],\n ],\n J: [\n [[0,0],[1,0],[1,1],[1,2]],\n [[0,1],[0,2],[1,1],[2,1]],\n [[1,0],[1,1],[1,2],[2,2]],\n [[0,1],[1,1],[2,0],[2,1]],\n ],\n L: [\n [[0,2],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[2,1],[2,2]],\n [[1,0],[1,1],[1,2],[2,0]],\n [[0,0],[0,1],[1,1],[2,1]],\n ],\n};\n\nconst PIECE_KEYS = Object.keys(PIECES); // ['I','O','T','S','Z','J','L']\nconst PIECE_IDX = { I:1, O:2, T:3, S:4, Z:5, J:6, L:7 };\n\n// Wall-kick offsets for standard rotation (SRS-lite)\n// [from-rotation][to-rotation] = array of (dr,dc) attempts\nconst KICKS = {};\n(function buildKicks() {\n // Non-I pieces\n const standard = {\n '01': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n '10': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n '12': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n '21': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2,-1]],\n '23': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n '32': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n '30': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n '03': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2, 1]],\n };\n // I piece\n const iKicks = {\n '01': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n '10': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n '12': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n '21': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n '23': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n '32': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n '30': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n '03': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n };\n KICKS['standard'] = standard;\n KICKS['I'] = iKicks;\n})();\n\n// Level → fall interval (ms)\nfunction levelSpeed(level) {\n // Classic Tetris-style curve\n const frames = [48,43,38,33,28,23,18,13,8,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1];\n const idx = Math.min(level - 1, frames.length - 1);\n return Math.round(frames[idx] * (1000 / 60));\n}\n\n// Points for line clears (single,double,triple,tetris)\nconst LINE_POINTS = [0, 100, 300, 500, 800];\nconst SOFT_DROP_PTS = 1;\nconst HARD_DROP_PTS = 2;\n\n// ═══════════════════════════════════════════════════════════════\n// GAME STATE\n// ═══════════════════════════════════════════════════════════════\nlet board, current, ghost, nextQueue, held;\nlet score, level, lines, combo;\nlet canHold, gameOver, paused, started;\nlet dropTimer, lastTime, animId;\nlet lockTimer, lockMoved;\nconst LOCK_DELAY = 500; // ms before a grounded piece locks\nconst LOCK_MOVES = 15; // max moves before forced lock\n\n// 7-bag randomiser\nlet bag = [];\nfunction nextBag() {\n if (bag.length === 0) {\n bag = [...PIECE_KEYS];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n }\n return bag.pop();\n}\n\nfunction createPiece(type) {\n // spawn position: row 0, col 3\n return { type, rot: 0, row: 0, col: 3 };\n}\n\nfunction initGame() {\n board = Array.from({ length: ROWS }, () => new Array(COLS).fill(0));\n bag = [];\n nextQueue = [nextBag(), nextBag(), nextBag()];\n current = spawnPiece();\n held = null;\n score = 0; level = 1; lines = 0; combo = -1;\n canHold = true;\n gameOver = false; paused = false;\n dropTimer = 0; lastTime = null;\n lockTimer = null; lockMoved = 0;\n updateUI();\n updateGhost();\n}\n\nfunction spawnPiece() {\n const type = nextQueue.shift();\n nextQueue.push(nextBag());\n const p = createPiece(type);\n // I and O spawn slightly lower\n if (type === 'I') p.row = -1;\n return p;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// BOARD HELPERS\n// ═══════════════════════════════════════════════════════════════\nfunction cells(piece) {\n return PIECES[piece.type][piece.rot].map(([dr, dc]) => [piece.row + dr, piece.col + dc]);\n}\n\nfunction valid(piece, dr = 0, dc = 0, rot = piece.rot) {\n const test = { ...piece, row: piece.row + dr, col: piece.col + dc, rot };\n return cells(test).every(([r, c]) =>\n r < ROWS && c >= 0 && c < COLS && (r < 0 || board[r][c] === 0)\n );\n}\n\nfunction lock(piece) {\n let topped = false;\n cells(piece).forEach(([r, c]) => {\n if (r < 0) { topped = true; return; }\n board[r][c] = PIECE_IDX[piece.type];\n });\n if (topped) { triggerGameOver(); return; }\n\n clearLines();\n\n current = spawnPiece();\n canHold = true;\n lockMoved = 0;\n clearTimeout(lockTimer); lockTimer = null;\n\n if (!valid(current)) {\n triggerGameOver();\n } else {\n updateGhost();\n }\n}\n\nfunction clearLines() {\n const full = [];\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(v => v !== 0)) full.push(r);\n }\n if (full.length === 0) {\n combo = -1;\n return;\n }\n\n // Remove full rows (animate via flash handled in draw)\n full.forEach(r => {\n board.splice(r, 1);\n board.unshift(new Array(COLS).fill(0));\n });\n\n combo++;\n const pts = (LINE_POINTS[full.length] + (combo > 0 ? 50 * combo : 0)) * level;\n score += pts;\n lines += full.length;\n level = Math.floor(lines / 10) + 1;\n updateUI();\n\n flashLines(full); // purely visual\n}\n\nfunction updateGhost() {\n if (!current) return;\n ghost = { ...current };\n while (valid(ghost, 1)) ghost.row++;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// CONTROLS\n// ═══════════════════════════════════════════════════════════════\nfunction moveLeft() { tryMove(0, -1); }\nfunction moveRight() { tryMove(0, 1); }\nfunction softDrop() {\n if (tryMove(1, 0)) {\n score += SOFT_DROP_PTS;\n updateUI();\n }\n}\n\nfunction tryMove(dr, dc) {\n if (!current || gameOver || paused) return false;\n if (valid(current, dr, dc)) {\n current.row += dr;\n current.col += dc;\n updateGhost();\n extendLock();\n return true;\n }\n return false;\n}\n\nfunction rotateCW() { rotate( 1); }\nfunction rotateCCW() { rotate(-1); }\n\nfunction rotate(dir) {\n if (!current || gameOver || paused) return;\n const newRot = ((current.rot + dir) + 4) % 4;\n const kickTable = current.type === 'I' ? KICKS['I'] : KICKS['standard'];\n const key = `${current.rot}${newRot}`;\n const kicks = kickTable[key] || [[0, 0]];\n for (const [kr, kc] of kicks) {\n if (valid(current, kr, kc, newRot)) {\n current.row += kr;\n current.col += kc;\n current.rot = newRot;\n updateGhost();\n extendLock();\n return;\n }\n }\n}\n\nfunction hardDrop() {\n if (!current || gameOver || paused) return;\n let dropped = 0;\n while (valid(current, 1)) { current.row++; dropped++; }\n score += dropped * HARD_DROP_PTS;\n updateUI();\n clearTimeout(lockTimer); lockTimer = null;\n lock(current);\n}\n\nfunction holdPiece() {\n if (!current || !canHold || gameOver || paused) return;\n if (held) {\n const prev = held;\n held = current.type;\n current = createPiece(prev);\n if (current.type === 'I') current.row = -1;\n } else {\n held = current.type;\n current = spawnPiece();\n }\n canHold = false;\n updateGhost();\n drawHold();\n}\n\nfunction extendLock() {\n // If the piece is grounded, reset lock timer (up to LOCK_MOVES times)\n if (!valid(current, 1) && lockMoved < LOCK_MOVES) {\n lockMoved++;\n clearTimeout(lockTimer);\n lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// GAME LOOP\n// ═══════════════════════════════════════════════════════════════\nfunction gameLoop(ts) {\n if (gameOver) return;\n animId = requestAnimationFrame(gameLoop);\n\n if (!lastTime) lastTime = ts;\n const dt = ts - lastTime;\n lastTime = ts;\n\n if (!paused) {\n dropTimer += dt;\n const interval = levelSpeed(level);\n if (dropTimer >= interval) {\n dropTimer -= interval;\n // Attempt to fall\n if (valid(current, 1)) {\n current.row++;\n updateGhost();\n } else {\n // Start lock delay if not already running\n if (!lockTimer) {\n lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n }\n }\n }\n }\n\n draw();\n}\n\nfunction triggerGameOver() {\n gameOver = true;\n clearTimeout(lockTimer);\n cancelAnimationFrame(animId);\n drawBoard(); // final frame\n showOverlay('GAME OVER', `Score: ${score} | Level: ${level} | Lines: ${lines}`, 'Play Again');\n}\n\n// ═══════════════════════════════════════════════════════════════\n// RENDERING\n// ═══════════════════════════════════════════════════════════════\nconst canvas = document.getElementById('board');\nconst ctx = canvas.getContext('2d');\nconst nextCvs = document.getElementById('next-canvas');\nconst nextCtx = nextCvs.getContext('2d');\nconst holdCvs = document.getElementById('hold-canvas');\nconst holdCtx = holdCvs.getContext('2d');\n\nlet flashRows = [];\nlet flashTimer = 0;\nconst FLASH_DUR = 320;\n\nfunction flashLines(rows) {\n flashRows = rows;\n flashTimer = FLASH_DUR;\n}\n\nfunction draw() {\n drawBoard();\n drawNext();\n drawHold();\n}\n\nfunction drawBoard() {\n // Background\n ctx.fillStyle = '#090918';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // Grid lines (subtle)\n ctx.strokeStyle = '#12122a';\n ctx.lineWidth = 0.5;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n }\n\n // Settled board cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (board[r][c]) {\n drawCell(ctx, r, c, COLORS[board[r][c]], 1, 0, 0);\n }\n }\n }\n\n // Flash overlay\n if (flashTimer > 0 && !paused) {\n flashTimer -= 16;\n const alpha = 0.7 * (flashTimer / FLASH_DUR);\n ctx.fillStyle = `rgba(255,255,255,${alpha})`;\n flashRows.forEach(r => {\n ctx.fillRect(0, r * BLOCK, canvas.width, BLOCK);\n });\n if (flashTimer <= 0) flashRows = [];\n }\n\n if (paused) {\n ctx.fillStyle = 'rgba(5,5,20,0.7)';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = '#fff';\n ctx.font = 'bold 28px system-ui';\n ctx.textAlign = 'center';\n ctx.fillText('PAUSED', canvas.width / 2, canvas.height / 2);\n ctx.font = '13px system-ui';\n ctx.fillStyle = '#8888cc';\n ctx.fillText('Press P to resume', canvas.width / 2, canvas.height / 2 + 32);\n return;\n }\n\n if (!current) return;\n\n // Ghost piece\n if (ghost && (ghost.row !== current.row || ghost.col !== current.col)) {\n cells(ghost).forEach(([r, c]) => {\n if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], GHOST_ALPHA, 0, 0);\n });\n }\n\n // Active piece\n cells(current).forEach(([r, c]) => {\n if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], 1, 0, 0);\n });\n}\n\nfunction drawCell(context, row, col, color, alpha, offR, offC) {\n const x = (col + offC) * BLOCK;\n const y = (row + offR) * BLOCK;\n const s = BLOCK - 1;\n\n context.save();\n context.globalAlpha = alpha;\n\n // Main fill with gradient\n const grad = context.createLinearGradient(x, y, x + s, y + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n context.fillStyle = grad;\n context.fillRect(x + 1, y + 1, s - 1, s - 1);\n\n // Highlight edge (top-left)\n context.fillStyle = lighten(color, 60);\n context.fillRect(x + 1, y + 1, s - 1, 2);\n context.fillRect(x + 1, y + 1, 2, s - 1);\n\n // Shadow edge (bottom-right)\n context.fillStyle = darken(color, 50);\n context.fillRect(x + 1, y + s - 2, s - 1, 2);\n context.fillRect(x + s - 2, y + 1, 2, s - 1);\n\n context.restore();\n}\n\nfunction drawMiniPiece(context, cvs, type) {\n context.fillStyle = '#0d0d1f';\n context.fillRect(0, 0, cvs.width, cvs.height);\n if (!type) return;\n\n const shape = PIECES[type][0];\n const minR = Math.min(...shape.map(([r]) => r));\n const maxR = Math.max(...shape.map(([r]) => r));\n const minC = Math.min(...shape.map(([, c]) => c));\n const maxC = Math.max(...shape.map(([, c]) => c));\n const h = maxR - minR + 1;\n const w = maxC - minC + 1;\n const bs = 20;\n const startX = Math.floor((cvs.width - w * bs) / 2);\n const startY = Math.floor((cvs.height - h * bs) / 2);\n\n shape.forEach(([r, c]) => {\n const px = startX + (c - minC) * bs;\n const py = startY + (r - minR) * bs;\n const s = bs - 1;\n\n const color = COLORS[PIECE_IDX[type]];\n const grad = context.createLinearGradient(px, py, px + s, py + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n context.fillStyle = grad;\n context.fillRect(px + 1, py + 1, s - 1, s - 1);\n\n context.fillStyle = lighten(color, 60);\n context.fillRect(px + 1, py + 1, s - 1, 2);\n context.fillRect(px + 1, py + 1, 2, s - 1);\n\n context.fillStyle = darken(color, 50);\n context.fillRect(px + 1, py + s - 2, s - 1, 2);\n context.fillRect(px + s - 2, py + 1, 2, s - 1);\n });\n}\n\nfunction drawNext() {\n const w = nextCvs.width;\n const h = nextCvs.height;\n nextCtx.fillStyle = '#0d0d1f';\n nextCtx.fillRect(0, 0, w, h);\n\n const slotH = h / 3;\n nextQueue.forEach((type, i) => {\n const shape = PIECES[type][0];\n const minR = Math.min(...shape.map(([r]) => r));\n const maxR = Math.max(...shape.map(([r]) => r));\n const minC = Math.min(...shape.map(([, c]) => c));\n const maxC = Math.max(...shape.map(([, c]) => c));\n const ph = maxR - minR + 1;\n const pw = maxC - minC + 1;\n const bs = i === 0 ? 20 : 16;\n const startX = Math.floor((w - pw * bs) / 2);\n const baseY = i * slotH + Math.floor((slotH - ph * bs) / 2);\n\n shape.forEach(([r, c]) => {\n const px = startX + (c - minC) * bs;\n const py = baseY + (r - minR) * bs;\n const s = bs - 1;\n const color = COLORS[PIECE_IDX[type]];\n const alpha = i === 0 ? 1 : 0.65 - i * 0.1;\n\n nextCtx.save();\n nextCtx.globalAlpha = alpha;\n const grad = nextCtx.createLinearGradient(px, py, px + s, py + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n nextCtx.fillStyle = grad;\n nextCtx.fillRect(px + 1, py + 1, s - 1, s - 1);\n nextCtx.fillStyle = lighten(color, 60);\n nextCtx.fillRect(px + 1, py + 1, s - 1, 2);\n nextCtx.fillRect(px + 1, py + 1, 2, s - 1);\n nextCtx.fillStyle = darken(color, 50);\n nextCtx.fillRect(px + 1, py + s - 2, s - 1, 2);\n nextCtx.fillRect(px + s - 2, py + 1, 2, s - 1);\n nextCtx.restore();\n });\n });\n}\n\nfunction drawHold() {\n drawMiniPiece(holdCtx, holdCvs, held);\n if (!canHold && held) {\n holdCtx.fillStyle = 'rgba(0,0,0,0.5)';\n holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// UI\n// ═══════════════════════════════════════════════════════════════\nconst scoreEl = document.getElementById('score-display');\nconst levelEl = document.getElementById('level-display');\nconst linesEl = document.getElementById('lines-display');\nconst levelBar = document.getElementById('level-bar');\nconst comboBox = document.getElementById('combo-box');\nconst comboDis = document.getElementById('combo-display');\n\nfunction updateUI() {\n scoreEl.textContent = score.toLocaleString();\n levelEl.textContent = level;\n linesEl.textContent = lines;\n const pct = ((lines % 10) / 10) * 100;\n levelBar.style.width = pct + '%';\n\n if (combo > 0) {\n comboBox.style.display = 'block';\n comboDis.textContent = 'x' + (combo + 1);\n } else {\n comboBox.style.display = 'none';\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// OVERLAY\n// ═══════════════════════════════════════════════════════════════\nconst overlay = document.getElementById('overlay');\nconst startBtn = document.getElementById('start-btn');\n\nfunction showOverlay(title, msg, btnText) {\n overlay.querySelector('h2').textContent = title;\n overlay.querySelector('p').innerHTML = msg;\n startBtn.textContent = btnText;\n overlay.style.display = 'flex';\n}\n\nfunction hideOverlay() {\n overlay.style.display = 'none';\n}\n\nstartBtn.addEventListener('click', () => {\n hideOverlay();\n initGame();\n lastTime = null;\n started = true;\n animId = requestAnimationFrame(gameLoop);\n});\n\n// ═══════════════════════════════════════════════════════════════\n// KEYBOARD\n// ═══════════════════════════════════════════════════════════════\nconst DAS_DELAY = 170; // ms before auto-repeat\nconst DAS_REPEAT = 50; // ms between repeats\n\nlet dasKey = null, dasTimer = null, dasRepeat = null;\n\nfunction startDAS(key) {\n if (dasKey === key) return;\n stopDAS();\n dasKey = key;\n applyKey(key);\n dasTimer = setTimeout(() => {\n dasRepeat = setInterval(() => applyKey(key), DAS_REPEAT);\n }, DAS_DELAY);\n}\n\nfunction stopDAS(key) {\n if (key && dasKey !== key) return;\n clearTimeout(dasTimer);\n clearInterval(dasRepeat);\n dasKey = null;\n}\n\nfunction applyKey(key) {\n if (key === 'ArrowLeft') moveLeft();\n if (key === 'ArrowRight') moveRight();\n if (key === 'ArrowDown') softDrop();\n}\n\nwindow.addEventListener('keydown', e => {\n if (!started) return;\n\n // Pause toggle\n if (e.code === 'KeyP') {\n if (gameOver) return;\n paused = !paused;\n if (!paused) { lastTime = null; }\n return;\n }\n\n if (paused || gameOver) return;\n\n switch (e.code) {\n case 'ArrowLeft': e.preventDefault(); startDAS('ArrowLeft'); break;\n case 'ArrowRight': e.preventDefault(); startDAS('ArrowRight'); break;\n case 'ArrowDown': e.preventDefault(); startDAS('ArrowDown'); break;\n case 'ArrowUp': e.preventDefault(); rotateCW(); break;\n case 'KeyX': e.preventDefault(); rotateCW(); break;\n case 'KeyZ': e.preventDefault(); rotateCCW(); break;\n case 'Space': e.preventDefault(); hardDrop(); break;\n case 'KeyC': e.preventDefault(); holdPiece(); break;\n }\n});\n\nwindow.addEventListener('keyup', e => {\n if (['ArrowLeft','ArrowRight','ArrowDown'].includes(e.code)) {\n stopDAS(e.code);\n }\n});\n\n// ═══════════════════════════════════════════════════════════════\n// COLOUR HELPERS\n// ═══════════════════════════════════════════════════════════════\nfunction parseHex(hex) {\n const n = parseInt(hex.replace('#',''), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\nfunction toHex([r, g, b]) {\n return '#' + [r, g, b].map(v => Math.min(255, Math.max(0, v)).toString(16).padStart(2,'0')).join('');\n}\nfunction lighten(hex, amt) { return toHex(parseHex(hex).map(v => v + amt)); }\nfunction darken(hex, amt) { return toHex(parseHex(hex).map(v => v - amt)); }\n\n// ═══════════════════════════════════════════════════════════════\n// INITIAL RENDER\n// ═══════════════════════════════════════════════════════════════\n(function initialDraw() {\n ctx.fillStyle = '#090918';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n // subtle grid\n ctx.strokeStyle = '#12122a';\n ctx.lineWidth = 0.5;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n }\n holdCtx.fillStyle = '#0d0d1f'; holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n nextCtx.fillStyle = '#0d0d1f'; nextCtx.fillRect(0, 0, nextCvs.width, nextCvs.height);\n})();\n</script>\n</body>\n</html>\nHTMLEOF\necho \"File written successfully\"","description":"Write the complete Tetris HTML game file"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":5605,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"40096783-6d7a-4d94-95bf-43a849283ce4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01NGXmT1123ZWPq32Q3HRMdq","type":"tool_result","content":"File written successfully","is_error":false}]},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"a3aebb86-9a04-4f0a-8c23-7c7cf18d29db","timestamp":"2026-04-04T09:29:40.466Z","tool_use_result":{"stdout":"File written successfully","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011nRrgYJ4e6VJ5u3WmFc8Jr","type":"message","role":"assistant","content":[{"type":"text","text":"Now let me verify the file looks correct and complete:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":10659,"cache_read_input_tokens":5605,"cache_creation":{"ephemeral_5m_input_tokens":10659,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"4b5cc9b5-85ca-4c2d-9fce-ca9c9a7191f6"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011nRrgYJ4e6VJ5u3WmFc8Jr","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QYr6X6gShcSXMFFf7mNMKx","name":"Read","input":{"file_path":"/tmp/loop-bench-st5faakp/tetris.html"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":10659,"cache_read_input_tokens":5605,"cache_creation":{"ephemeral_5m_input_tokens":10659,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"b7cef9f4-ea36-41c6-8b24-3e64799c564b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QYr6X6gShcSXMFFf7mNMKx","type":"tool_result","content":"1\t<!DOCTYPE html>\n2\t<html lang=\"en\">\n3\t<head>\n4\t <meta charset=\"UTF-8\" />\n5\t <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n6\t <title>Tetris</title>\n7\t <style>\n8\t *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n9\t\n10\t body {\n11\t background: #0d0d1a;\n12\t display: flex;\n13\t justify-content: center;\n14\t align-items: center;\n15\t min-height: 100vh;\n16\t font-family: 'Segoe UI', system-ui, sans-serif;\n17\t color: #e0e0ff;\n18\t user-select: none;\n19\t }\n20\t\n21\t #wrapper {\n22\t display: flex;\n23\t gap: 24px;\n24\t align-items: flex-start;\n25\t }\n26\t\n27\t /* ── Left panel ─────────────────────────────── */\n28\t #left-panel {\n29\t display: flex;\n30\t flex-direction: column;\n31\t gap: 16px;\n32\t width: 140px;\n33\t }\n34\t\n35\t /* ── Right panel ────────────────────────────── */\n36\t #right-panel {\n37\t display: flex;\n38\t flex-direction: column;\n39\t gap: 16px;\n40\t width: 140px;\n41\t }\n42\t\n43\t .panel-box {\n44\t background: #12122a;\n45\t border: 2px solid #2a2a5a;\n46\t border-radius: 10px;\n47\t padding: 14px 16px;\n48\t }\n49\t\n50\t .panel-box h3 {\n51\t font-size: 10px;\n52\t letter-spacing: 2px;\n53\t text-transform: uppercase;\n54\t color: #6666aa;\n55\t margin-bottom: 8px;\n56\t }\n57\t\n58\t .panel-value {\n59\t font-size: 26px;\n60\t font-weight: 700;\n61\t color: #c8c8ff;\n62\t letter-spacing: 1px;\n63\t }\n64\t\n65\t /* ── Canvas / game board ────────────────────── */\n66\t #game-area {\n67\t position: relative;\n68\t }\n69\t\n70\t #board {\n71\t display: block;\n72\t border: 3px solid #2a2a5a;\n73\t border-radius: 4px;\n74\t box-shadow: 0 0 40px #3333aa55, inset 0 0 20px #00001888;\n75\t }\n76\t\n77\t /* ── Overlay (start / pause / game-over) ───── */\n78\t #overlay {\n79\t position: absolute;\n80\t inset: 0;\n81\t display: flex;\n82\t flex-direction: column;\n83\t justify-content: center;\n84\t align-items: center;\n85\t gap: 14px;\n86\t background: rgba(5, 5, 20, 0.82);\n87\t border-radius: 2px;\n88\t backdrop-filter: blur(3px);\n89\t }\n90\t\n91\t #overlay h2 {\n92\t font-size: 30px;\n93\t letter-spacing: 4px;\n94\t text-transform: uppercase;\n95\t color: #fff;\n96\t text-shadow: 0 0 20px #8888ff;\n97\t }\n98\t\n99\t #overlay p {\n100\t font-size: 13px;\n101\t color: #9090cc;\n102\t letter-spacing: 1px;\n103\t text-align: center;\n104\t line-height: 1.7;\n105\t }\n106\t\n107\t #overlay button {\n108\t margin-top: 6px;\n109\t padding: 11px 32px;\n110\t font-size: 14px;\n111\t font-weight: 700;\n112\t letter-spacing: 2px;\n113\t text-transform: uppercase;\n114\t background: linear-gradient(135deg, #4444cc, #6644ff);\n115\t color: #fff;\n116\t border: none;\n117\t border-radius: 8px;\n118\t cursor: pointer;\n119\t transition: filter 0.15s, transform 0.12s;\n120\t box-shadow: 0 4px 18px #4444cc88;\n121\t }\n122\t\n123\t #overlay button:hover { filter: brightness(1.25); transform: translateY(-2px); }\n124\t #overlay button:active { transform: translateY(0); }\n125\t\n126\t /* ── Next-piece canvas ──────────────────────── */\n127\t #next-canvas {\n128\t display: block;\n129\t margin: 6px auto 0;\n130\t }\n131\t\n132\t /* ── Hold canvas ────────────────────────────── */\n133\t #hold-canvas {\n134\t display: block;\n135\t margin: 6px auto 0;\n136\t }\n137\t\n138\t /* ── Controls list ──────────────────────────── */\n139\t .controls-list {\n140\t font-size: 11px;\n141\t line-height: 2;\n142\t color: #7777bb;\n143\t }\n144\t\n145\t .controls-list span {\n146\t display: inline-block;\n147\t background: #1e1e3e;\n148\t border: 1px solid #3333668a;\n149\t border-radius: 4px;\n150\t padding: 1px 6px;\n151\t font-size: 10px;\n152\t color: #aaaadd;\n153\t margin-right: 4px;\n154\t }\n155\t\n156\t /* ── Ghost / level colours ──────────────────── */\n157\t #level-bar-wrap {\n158\t background: #1a1a35;\n159\t border-radius: 4px;\n160\t height: 6px;\n161\t overflow: hidden;\n162\t margin-top: 6px;\n163\t }\n164\t\n165\t #level-bar {\n166\t height: 100%;\n167\t width: 0%;\n168\t background: linear-gradient(90deg, #4466ff, #aa44ff);\n169\t border-radius: 4px;\n170\t transition: width 0.4s ease;\n171\t }\n172\t </style>\n173\t</head>\n174\t<body>\n175\t\n176\t<div id=\"wrapper\">\n177\t\n178\t <!-- LEFT PANEL -->\n179\t <div id=\"left-panel\">\n180\t <div class=\"panel-box\">\n181\t <h3>Score</h3>\n182\t <div class=\"panel-value\" id=\"score-display\">0</div>\n183\t </div>\n184\t <div class=\"panel-box\">\n185\t <h3>Level</h3>\n186\t <div class=\"panel-value\" id=\"level-display\">1</div>\n187\t <div id=\"level-bar-wrap\"><div id=\"level-bar\"></div></div>\n188\t </div>\n189\t <div class=\"panel-box\">\n190\t <h3>Lines</h3>\n191\t <div class=\"panel-value\" id=\"lines-display\">0</div>\n192\t </div>\n193\t <div class=\"panel-box\">\n194\t <h3>Hold <small style=\"font-size:9px;color:#555\">(C)</small></h3>\n195\t <canvas id=\"hold-canvas\" width=\"100\" height=\"80\"></canvas>\n196\t </div>\n197\t </div>\n198\t\n199\t <!-- GAME BOARD -->\n200\t <div id=\"game-area\">\n201\t <canvas id=\"board\" width=\"300\" height=\"600\"></canvas>\n202\t <div id=\"overlay\">\n203\t <h2>Tetris</h2>\n204\t <p>Arrow keys to move & soft-drop<br>\n205\t ↑ / X rotate CW · Z rotate CCW<br>\n206\t Space hard-drop · C hold<br>\n207\t P pause</p>\n208\t <button id=\"start-btn\">Start Game</button>\n209\t </div>\n210\t </div>\n211\t\n212\t <!-- RIGHT PANEL -->\n213\t <div id=\"right-panel\">\n214\t <div class=\"panel-box\">\n215\t <h3>Next</h3>\n216\t <canvas id=\"next-canvas\" width=\"100\" height=\"200\"></canvas>\n217\t </div>\n218\t <div class=\"panel-box\">\n219\t <h3>Controls</h3>\n220\t <div class=\"controls-list\">\n221\t <span>←→</span> Move<br>\n222\t <span>↓</span> Soft Drop<br>\n223\t <span>Space</span> Hard Drop<br>\n224\t <span>↑</span><span>X</span> Rotate CW<br>\n225\t <span>Z</span> Rotate CCW<br>\n226\t <span>C</span> Hold<br>\n227\t <span>P</span> Pause\n228\t </div>\n229\t </div>\n230\t <div class=\"panel-box\" id=\"combo-box\" style=\"display:none\">\n231\t <h3>Combo</h3>\n232\t <div class=\"panel-value\" id=\"combo-display\">x0</div>\n233\t </div>\n234\t </div>\n235\t\n236\t</div>\n237\t\n238\t<script>\n239\t// ═══════════════════════════════════════════════════════════════\n240\t// CONSTANTS\n241\t// ═══════════════════════════════════════════════════════════════\n242\tconst COLS = 10;\n243\tconst ROWS = 20;\n244\tconst BLOCK = 30; // px per cell\n245\t\n246\t// Colours per piece type (index 0 = empty)\n247\tconst COLORS = [\n248\t null,\n249\t '#00cfcf', // I – cyan\n250\t '#f0a000', // O – orange/yellow\n251\t '#a000f0', // T – purple\n252\t '#00a000', // S – green\n253\t '#f00000', // Z – red\n254\t '#0000f0', // J – blue\n255\t '#f07800', // L – orange\n256\t];\n257\t\n258\tconst GHOST_ALPHA = 0.22;\n259\t\n260\t// Tetromino definitions – each piece has 4 rotation states\n261\t// Stored as [row][col] offsets from the pivot\n262\tconst PIECES = {\n263\t // 0 1 2 3\n264\t I: [\n265\t [[0,0],[0,1],[0,2],[0,3]],\n266\t [[0,2],[1,2],[2,2],[3,2]],\n267\t [[1,0],[1,1],[1,2],[1,3]],\n268\t [[0,1],[1,1],[2,1],[3,1]],\n269\t ],\n270\t O: [\n271\t [[0,0],[0,1],[1,0],[1,1]],\n272\t [[0,0],[0,1],[1,0],[1,1]],\n273\t [[0,0],[0,1],[1,0],[1,1]],\n274\t [[0,0],[0,1],[1,0],[1,1]],\n275\t ],\n276\t T: [\n277\t [[0,1],[1,0],[1,1],[1,2]],\n278\t [[0,1],[1,1],[1,2],[2,1]],\n279\t [[1,0],[1,1],[1,2],[2,1]],\n280\t [[0,1],[1,0],[1,1],[2,1]],\n281\t ],\n282\t S: [\n283\t [[0,1],[0,2],[1,0],[1,1]],\n284\t [[0,1],[1,1],[1,2],[2,2]],\n285\t [[1,1],[1,2],[2,0],[2,1]],\n286\t [[0,0],[1,0],[1,1],[2,1]],\n287\t ],\n288\t Z: [\n289\t [[0,0],[0,1],[1,1],[1,2]],\n290\t [[0,2],[1,1],[1,2],[2,1]],\n291\t [[1,0],[1,1],[2,1],[2,2]],\n292\t [[0,1],[1,0],[1,1],[2,0]],\n293\t ],\n294\t J: [\n295\t [[0,0],[1,0],[1,1],[1,2]],\n296\t [[0,1],[0,2],[1,1],[2,1]],\n297\t [[1,0],[1,1],[1,2],[2,2]],\n298\t [[0,1],[1,1],[2,0],[2,1]],\n299\t ],\n300\t L: [\n301\t [[0,2],[1,0],[1,1],[1,2]],\n302\t [[0,1],[1,1],[2,1],[2,2]],\n303\t [[1,0],[1,1],[1,2],[2,0]],\n304\t [[0,0],[0,1],[1,1],[2,1]],\n305\t ],\n306\t};\n307\t\n308\tconst PIECE_KEYS = Object.keys(PIECES); // ['I','O','T','S','Z','J','L']\n309\tconst PIECE_IDX = { I:1, O:2, T:3, S:4, Z:5, J:6, L:7 };\n310\t\n311\t// Wall-kick offsets for standard rotation (SRS-lite)\n312\t// [from-rotation][to-rotation] = array of (dr,dc) attempts\n313\tconst KICKS = {};\n314\t(function buildKicks() {\n315\t // Non-I pieces\n316\t const standard = {\n317\t '01': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n318\t '10': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n319\t '12': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n320\t '21': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2,-1]],\n321\t '23': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n322\t '32': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n323\t '30': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n324\t '03': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2, 1]],\n325\t };\n326\t // I piece\n327\t const iKicks = {\n328\t '01': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n329\t '10': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n330\t '12': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n331\t '21': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n332\t '23': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n333\t '32': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n334\t '30': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n335\t '03': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n336\t };\n337\t KICKS['standard'] = standard;\n338\t KICKS['I'] = iKicks;\n339\t})();\n340\t\n341\t// Level → fall interval (ms)\n342\tfunction levelSpeed(level) {\n343\t // Classic Tetris-style curve\n344\t const frames = [48,43,38,33,28,23,18,13,8,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1];\n345\t const idx = Math.min(level - 1, frames.length - 1);\n346\t return Math.round(frames[idx] * (1000 / 60));\n347\t}\n348\t\n349\t// Points for line clears (single,double,triple,tetris)\n350\tconst LINE_POINTS = [0, 100, 300, 500, 800];\n351\tconst SOFT_DROP_PTS = 1;\n352\tconst HARD_DROP_PTS = 2;\n353\t\n354\t// ═══════════════════════════════════════════════════════════════\n355\t// GAME STATE\n356\t// ═══════════════════════════════════════════════════════════════\n357\tlet board, current, ghost, nextQueue, held;\n358\tlet score, level, lines, combo;\n359\tlet canHold, gameOver, paused, started;\n360\tlet dropTimer, lastTime, animId;\n361\tlet lockTimer, lockMoved;\n362\tconst LOCK_DELAY = 500; // ms before a grounded piece locks\n363\tconst LOCK_MOVES = 15; // max moves before forced lock\n364\t\n365\t// 7-bag randomiser\n366\tlet bag = [];\n367\tfunction nextBag() {\n368\t if (bag.length === 0) {\n369\t bag = [...PIECE_KEYS];\n370\t for (let i = bag.length - 1; i > 0; i--) {\n371\t const j = Math.floor(Math.random() * (i + 1));\n372\t [bag[i], bag[j]] = [bag[j], bag[i]];\n373\t }\n374\t }\n375\t return bag.pop();\n376\t}\n377\t\n378\tfunction createPiece(type) {\n379\t // spawn position: row 0, col 3\n380\t return { type, rot: 0, row: 0, col: 3 };\n381\t}\n382\t\n383\tfunction initGame() {\n384\t board = Array.from({ length: ROWS }, () => new Array(COLS).fill(0));\n385\t bag = [];\n386\t nextQueue = [nextBag(), nextBag(), nextBag()];\n387\t current = spawnPiece();\n388\t held = null;\n389\t score = 0; level = 1; lines = 0; combo = -1;\n390\t canHold = true;\n391\t gameOver = false; paused = false;\n392\t dropTimer = 0; lastTime = null;\n393\t lockTimer = null; lockMoved = 0;\n394\t updateUI();\n395\t updateGhost();\n396\t}\n397\t\n398\tfunction spawnPiece() {\n399\t const type = nextQueue.shift();\n400\t nextQueue.push(nextBag());\n401\t const p = createPiece(type);\n402\t // I and O spawn slightly lower\n403\t if (type === 'I') p.row = -1;\n404\t return p;\n405\t}\n406\t\n407\t// ═══════════════════════════════════════════════════════════════\n408\t// BOARD HELPERS\n409\t// ═══════════════════════════════════════════════════════════════\n410\tfunction cells(piece) {\n411\t return PIECES[piece.type][piece.rot].map(([dr, dc]) => [piece.row + dr, piece.col + dc]);\n412\t}\n413\t\n414\tfunction valid(piece, dr = 0, dc = 0, rot = piece.rot) {\n415\t const test = { ...piece, row: piece.row + dr, col: piece.col + dc, rot };\n416\t return cells(test).every(([r, c]) =>\n417\t r < ROWS && c >= 0 && c < COLS && (r < 0 || board[r][c] === 0)\n418\t );\n419\t}\n420\t\n421\tfunction lock(piece) {\n422\t let topped = false;\n423\t cells(piece).forEach(([r, c]) => {\n424\t if (r < 0) { topped = true; return; }\n425\t board[r][c] = PIECE_IDX[piece.type];\n426\t });\n427\t if (topped) { triggerGameOver(); return; }\n428\t\n429\t clearLines();\n430\t\n431\t current = spawnPiece();\n432\t canHold = true;\n433\t lockMoved = 0;\n434\t clearTimeout(lockTimer); lockTimer = null;\n435\t\n436\t if (!valid(current)) {\n437\t triggerGameOver();\n438\t } else {\n439\t updateGhost();\n440\t }\n441\t}\n442\t\n443\tfunction clearLines() {\n444\t const full = [];\n445\t for (let r = ROWS - 1; r >= 0; r--) {\n446\t if (board[r].every(v => v !== 0)) full.push(r);\n447\t }\n448\t if (full.length === 0) {\n449\t combo = -1;\n450\t return;\n451\t }\n452\t\n453\t // Remove full rows (animate via flash handled in draw)\n454\t full.forEach(r => {\n455\t board.splice(r, 1);\n456\t board.unshift(new Array(COLS).fill(0));\n457\t });\n458\t\n459\t combo++;\n460\t const pts = (LINE_POINTS[full.length] + (combo > 0 ? 50 * combo : 0)) * level;\n461\t score += pts;\n462\t lines += full.length;\n463\t level = Math.floor(lines / 10) + 1;\n464\t updateUI();\n465\t\n466\t flashLines(full); // purely visual\n467\t}\n468\t\n469\tfunction updateGhost() {\n470\t if (!current) return;\n471\t ghost = { ...current };\n472\t while (valid(ghost, 1)) ghost.row++;\n473\t}\n474\t\n475\t// ═══════════════════════════════════════════════════════════════\n476\t// CONTROLS\n477\t// ═══════════════════════════════════════════════════════════════\n478\tfunction moveLeft() { tryMove(0, -1); }\n479\tfunction moveRight() { tryMove(0, 1); }\n480\tfunction softDrop() {\n481\t if (tryMove(1, 0)) {\n482\t score += SOFT_DROP_PTS;\n483\t updateUI();\n484\t }\n485\t}\n486\t\n487\tfunction tryMove(dr, dc) {\n488\t if (!current || gameOver || paused) return false;\n489\t if (valid(current, dr, dc)) {\n490\t current.row += dr;\n491\t current.col += dc;\n492\t updateGhost();\n493\t extendLock();\n494\t return true;\n495\t }\n496\t return false;\n497\t}\n498\t\n499\tfunction rotateCW() { rotate( 1); }\n500\tfunction rotateCCW() { rotate(-1); }\n501\t\n502\tfunction rotate(dir) {\n503\t if (!current || gameOver || paused) return;\n504\t const newRot = ((current.rot + dir) + 4) % 4;\n505\t const kickTable = current.type === 'I' ? KICKS['I'] : KICKS['standard'];\n506\t const key = `${current.rot}${newRot}`;\n507\t const kicks = kickTable[key] || [[0, 0]];\n508\t for (const [kr, kc] of kicks) {\n509\t if (valid(current, kr, kc, newRot)) {\n510\t current.row += kr;\n511\t current.col += kc;\n512\t current.rot = newRot;\n513\t updateGhost();\n514\t extendLock();\n515\t return;\n516\t }\n517\t }\n518\t}\n519\t\n520\tfunction hardDrop() {\n521\t if (!current || gameOver || paused) return;\n522\t let dropped = 0;\n523\t while (valid(current, 1)) { current.row++; dropped++; }\n524\t score += dropped * HARD_DROP_PTS;\n525\t updateUI();\n526\t clearTimeout(lockTimer); lockTimer = null;\n527\t lock(current);\n528\t}\n529\t\n530\tfunction holdPiece() {\n531\t if (!current || !canHold || gameOver || paused) return;\n532\t if (held) {\n533\t const prev = held;\n534\t held = current.type;\n535\t current = createPiece(prev);\n536\t if (current.type === 'I') current.row = -1;\n537\t } else {\n538\t held = current.type;\n539\t current = spawnPiece();\n540\t }\n541\t canHold = false;\n542\t updateGhost();\n543\t drawHold();\n544\t}\n545\t\n546\tfunction extendLock() {\n547\t // If the piece is grounded, reset lock timer (up to LOCK_MOVES times)\n548\t if (!valid(current, 1) && lockMoved < LOCK_MOVES) {\n549\t lockMoved++;\n550\t clearTimeout(lockTimer);\n551\t lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n552\t }\n553\t}\n554\t\n555\t// ═══════════════════════════════════════════════════════════════\n556\t// GAME LOOP\n557\t// ═══════════════════════════════════════════════════════════════\n558\tfunction gameLoop(ts) {\n559\t if (gameOver) return;\n560\t animId = requestAnimationFrame(gameLoop);\n561\t\n562\t if (!lastTime) lastTime = ts;\n563\t const dt = ts - lastTime;\n564\t lastTime = ts;\n565\t\n566\t if (!paused) {\n567\t dropTimer += dt;\n568\t const interval = levelSpeed(level);\n569\t if (dropTimer >= interval) {\n570\t dropTimer -= interval;\n571\t // Attempt to fall\n572\t if (valid(current, 1)) {\n573\t current.row++;\n574\t updateGhost();\n575\t } else {\n576\t // Start lock delay if not already running\n577\t if (!lockTimer) {\n578\t lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n579\t }\n580\t }\n581\t }\n582\t }\n583\t\n584\t draw();\n585\t}\n586\t\n587\tfunction triggerGameOver() {\n588\t gameOver = true;\n589\t clearTimeout(lockTimer);\n590\t cancelAnimationFrame(animId);\n591\t drawBoard(); // final frame\n592\t showOverlay('GAME OVER', `Score: ${score} | Level: ${level} | Lines: ${lines}`, 'Play Again');\n593\t}\n594\t\n595\t// ═══════════════════════════════════════════════════════════════\n596\t// RENDERING\n597\t// ═══════════════════════════════════════════════════════════════\n598\tconst canvas = document.getElementById('board');\n599\tconst ctx = canvas.getContext('2d');\n600\tconst nextCvs = document.getElementById('next-canvas');\n601\tconst nextCtx = nextCvs.getContext('2d');\n602\tconst holdCvs = document.getElementById('hold-canvas');\n603\tconst holdCtx = holdCvs.getContext('2d');\n604\t\n605\tlet flashRows = [];\n606\tlet flashTimer = 0;\n607\tconst FLASH_DUR = 320;\n608\t\n609\tfunction flashLines(rows) {\n610\t flashRows = rows;\n611\t flashTimer = FLASH_DUR;\n612\t}\n613\t\n614\tfunction draw() {\n615\t drawBoard();\n616\t drawNext();\n617\t drawHold();\n618\t}\n619\t\n620\tfunction drawBoard() {\n621\t // Background\n622\t ctx.fillStyle = '#090918';\n623\t ctx.fillRect(0, 0, canvas.width, canvas.height);\n624\t\n625\t // Grid lines (subtle)\n626\t ctx.strokeStyle = '#12122a';\n627\t ctx.lineWidth = 0.5;\n628\t for (let c = 1; c < COLS; c++) {\n629\t ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n630\t }\n631\t for (let r = 1; r < ROWS; r++) {\n632\t ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n633\t }\n634\t\n635\t // Settled board cells\n636\t for (let r = 0; r < ROWS; r++) {\n637\t for (let c = 0; c < COLS; c++) {\n638\t if (board[r][c]) {\n639\t drawCell(ctx, r, c, COLORS[board[r][c]], 1, 0, 0);\n640\t }\n641\t }\n642\t }\n643\t\n644\t // Flash overlay\n645\t if (flashTimer > 0 && !paused) {\n646\t flashTimer -= 16;\n647\t const alpha = 0.7 * (flashTimer / FLASH_DUR);\n648\t ctx.fillStyle = `rgba(255,255,255,${alpha})`;\n649\t flashRows.forEach(r => {\n650\t ctx.fillRect(0, r * BLOCK, canvas.width, BLOCK);\n651\t });\n652\t if (flashTimer <= 0) flashRows = [];\n653\t }\n654\t\n655\t if (paused) {\n656\t ctx.fillStyle = 'rgba(5,5,20,0.7)';\n657\t ctx.fillRect(0, 0, canvas.width, canvas.height);\n658\t ctx.fillStyle = '#fff';\n659\t ctx.font = 'bold 28px system-ui';\n660\t ctx.textAlign = 'center';\n661\t ctx.fillText('PAUSED', canvas.width / 2, canvas.height / 2);\n662\t ctx.font = '13px system-ui';\n663\t ctx.fillStyle = '#8888cc';\n664\t ctx.fillText('Press P to resume', canvas.width / 2, canvas.height / 2 + 32);\n665\t return;\n666\t }\n667\t\n668\t if (!current) return;\n669\t\n670\t // Ghost piece\n671\t if (ghost && (ghost.row !== current.row || ghost.col !== current.col)) {\n672\t cells(ghost).forEach(([r, c]) => {\n673\t if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], GHOST_ALPHA, 0, 0);\n674\t });\n675\t }\n676\t\n677\t // Active piece\n678\t cells(current).forEach(([r, c]) => {\n679\t if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], 1, 0, 0);\n680\t });\n681\t}\n682\t\n683\tfunction drawCell(context, row, col, color, alpha, offR, offC) {\n684\t const x = (col + offC) * BLOCK;\n685\t const y = (row + offR) * BLOCK;\n686\t const s = BLOCK - 1;\n687\t\n688\t context.save();\n689\t context.globalAlpha = alpha;\n690\t\n691\t // Main fill with gradient\n692\t const grad = context.createLinearGradient(x, y, x + s, y + s);\n693\t grad.addColorStop(0, lighten(color, 40));\n694\t grad.addColorStop(1, darken(color, 30));\n695\t context.fillStyle = grad;\n696\t context.fillRect(x + 1, y + 1, s - 1, s - 1);\n697\t\n698\t // Highlight edge (top-left)\n699\t context.fillStyle = lighten(color, 60);\n700\t context.fillRect(x + 1, y + 1, s - 1, 2);\n701\t context.fillRect(x + 1, y + 1, 2, s - 1);\n702\t\n703\t // Shadow edge (bottom-right)\n704\t context.fillStyle = darken(color, 50);\n705\t context.fillRect(x + 1, y + s - 2, s - 1, 2);\n706\t context.fillRect(x + s - 2, y + 1, 2, s - 1);\n707\t\n708\t context.restore();\n709\t}\n710\t\n711\tfunction drawMiniPiece(context, cvs, type) {\n712\t context.fillStyle = '#0d0d1f';\n713\t context.fillRect(0, 0, cvs.width, cvs.height);\n714\t if (!type) return;\n715\t\n716\t const shape = PIECES[type][0];\n717\t const minR = Math.min(...shape.map(([r]) => r));\n718\t const maxR = Math.max(...shape.map(([r]) => r));\n719\t const minC = Math.min(...shape.map(([, c]) => c));\n720\t const maxC = Math.max(...shape.map(([, c]) => c));\n721\t const h = maxR - minR + 1;\n722\t const w = maxC - minC + 1;\n723\t const bs = 20;\n724\t const startX = Math.floor((cvs.width - w * bs) / 2);\n725\t const startY = Math.floor((cvs.height - h * bs) / 2);\n726\t\n727\t shape.forEach(([r, c]) => {\n728\t const px = startX + (c - minC) * bs;\n729\t const py = startY + (r - minR) * bs;\n730\t const s = bs - 1;\n731\t\n732\t const color = COLORS[PIECE_IDX[type]];\n733\t const grad = context.createLinearGradient(px, py, px + s, py + s);\n734\t grad.addColorStop(0, lighten(color, 40));\n735\t grad.addColorStop(1, darken(color, 30));\n736\t context.fillStyle = grad;\n737\t context.fillRect(px + 1, py + 1, s - 1, s - 1);\n738\t\n739\t context.fillStyle = lighten(color, 60);\n740\t context.fillRect(px + 1, py + 1, s - 1, 2);\n741\t context.fillRect(px + 1, py + 1, 2, s - 1);\n742\t\n743\t context.fillStyle = darken(color, 50);\n744\t context.fillRect(px + 1, py + s - 2, s - 1, 2);\n745\t context.fillRect(px + s - 2, py + 1, 2, s - 1);\n746\t });\n747\t}\n748\t\n749\tfunction drawNext() {\n750\t const w = nextCvs.width;\n751\t const h = nextCvs.height;\n752\t nextCtx.fillStyle = '#0d0d1f';\n753\t nextCtx.fillRect(0, 0, w, h);\n754\t\n755\t const slotH = h / 3;\n756\t nextQueue.forEach((type, i) => {\n757\t const shape = PIECES[type][0];\n758\t const minR = Math.min(...shape.map(([r]) => r));\n759\t const maxR = Math.max(...shape.map(([r]) => r));\n760\t const minC = Math.min(...shape.map(([, c]) => c));\n761\t const maxC = Math.max(...shape.map(([, c]) => c));\n762\t const ph = maxR - minR + 1;\n763\t const pw = maxC - minC + 1;\n764\t const bs = i === 0 ? 20 : 16;\n765\t const startX = Math.floor((w - pw * bs) / 2);\n766\t const baseY = i * slotH + Math.floor((slotH - ph * bs) / 2);\n767\t\n768\t shape.forEach(([r, c]) => {\n769\t const px = startX + (c - minC) * bs;\n770\t const py = baseY + (r - minR) * bs;\n771\t const s = bs - 1;\n772\t const color = COLORS[PIECE_IDX[type]];\n773\t const alpha = i === 0 ? 1 : 0.65 - i * 0.1;\n774\t\n775\t nextCtx.save();\n776\t nextCtx.globalAlpha = alpha;\n777\t const grad = nextCtx.createLinearGradient(px, py, px + s, py + s);\n778\t grad.addColorStop(0, lighten(color, 40));\n779\t grad.addColorStop(1, darken(color, 30));\n780\t nextCtx.fillStyle = grad;\n781\t nextCtx.fillRect(px + 1, py + 1, s - 1, s - 1);\n782\t nextCtx.fillStyle = lighten(color, 60);\n783\t nextCtx.fillRect(px + 1, py + 1, s - 1, 2);\n784\t nextCtx.fillRect(px + 1, py + 1, 2, s - 1);\n785\t nextCtx.fillStyle = darken(color, 50);\n786\t nextCtx.fillRect(px + 1, py + s - 2, s - 1, 2);\n787\t nextCtx.fillRect(px + s - 2, py + 1, 2, s - 1);\n788\t nextCtx.restore();\n789\t });\n790\t });\n791\t}\n792\t\n793\tfunction drawHold() {\n794\t drawMiniPiece(holdCtx, holdCvs, held);\n795\t if (!canHold && held) {\n796\t holdCtx.fillStyle = 'rgba(0,0,0,0.5)';\n797\t holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n798\t }\n799\t}\n800\t\n801\t// ═══════════════════════════════════════════════════════════════\n802\t// UI\n803\t// ═══════════════════════════════════════════════════════════════\n804\tconst scoreEl = document.getElementById('score-display');\n805\tconst levelEl = document.getElementById('level-display');\n806\tconst linesEl = document.getElementById('lines-display');\n807\tconst levelBar = document.getElementById('level-bar');\n808\tconst comboBox = document.getElementById('combo-box');\n809\tconst comboDis = document.getElementById('combo-display');\n810\t\n811\tfunction updateUI() {\n812\t scoreEl.textContent = score.toLocaleString();\n813\t levelEl.textContent = level;\n814\t linesEl.textContent = lines;\n815\t const pct = ((lines % 10) / 10) * 100;\n816\t levelBar.style.width = pct + '%';\n817\t\n818\t if (combo > 0) {\n819\t comboBox.style.display = 'block';\n820\t comboDis.textContent = 'x' + (combo + 1);\n821\t } else {\n822\t comboBox.style.display = 'none';\n823\t }\n824\t}\n825\t\n826\t// ═══════════════════════════════════════════════════════════════\n827\t// OVERLAY\n828\t// ═══════════════════════════════════════════════════════════════\n829\tconst overlay = document.getElementById('overlay');\n830\tconst startBtn = document.getElementById('start-btn');\n831\t\n832\tfunction showOverlay(title, msg, btnText) {\n833\t overlay.querySelector('h2').textContent = title;\n834\t overlay.querySelector('p').innerHTML = msg;\n835\t startBtn.textContent = btnText;\n836\t overlay.style.display = 'flex';\n837\t}\n838\t\n839\tfunction hideOverlay() {\n840\t overlay.style.display = 'none';\n841\t}\n842\t\n843\tstartBtn.addEventListener('click', () => {\n844\t hideOverlay();\n845\t initGame();\n846\t lastTime = null;\n847\t started = true;\n848\t animId = requestAnimationFrame(gameLoop);\n849\t});\n850\t\n851\t// ═══════════════════════════════════════════════════════════════\n852\t// KEYBOARD\n853\t// ═══════════════════════════════════════════════════════════════\n854\tconst DAS_DELAY = 170; // ms before auto-repeat\n855\tconst DAS_REPEAT = 50; // ms between repeats\n856\t\n857\tlet dasKey = null, dasTimer = null, dasRepeat = null;\n858\t\n859\tfunction startDAS(key) {\n860\t if (dasKey === key) return;\n861\t stopDAS();\n862\t dasKey = key;\n863\t applyKey(key);\n864\t dasTimer = setTimeout(() => {\n865\t dasRepeat = setInterval(() => applyKey(key), DAS_REPEAT);\n866\t }, DAS_DELAY);\n867\t}\n868\t\n869\tfunction stopDAS(key) {\n870\t if (key && dasKey !== key) return;\n871\t clearTimeout(dasTimer);\n872\t clearInterval(dasRepeat);\n873\t dasKey = null;\n874\t}\n875\t\n876\tfunction applyKey(key) {\n877\t if (key === 'ArrowLeft') moveLeft();\n878\t if (key === 'ArrowRight') moveRight();\n879\t if (key === 'ArrowDown') softDrop();\n880\t}\n881\t\n882\twindow.addEventListener('keydown', e => {\n883\t if (!started) return;\n884\t\n885\t // Pause toggle\n886\t if (e.code === 'KeyP') {\n887\t if (gameOver) return;\n888\t paused = !paused;\n889\t if (!paused) { lastTime = null; }\n890\t return;\n891\t }\n892\t\n893\t if (paused || gameOver) return;\n894\t\n895\t switch (e.code) {\n896\t case 'ArrowLeft': e.preventDefault(); startDAS('ArrowLeft'); break;\n897\t case 'ArrowRight': e.preventDefault(); startDAS('ArrowRight'); break;\n898\t case 'ArrowDown': e.preventDefault(); startDAS('ArrowDown'); break;\n899\t case 'ArrowUp': e.preventDefault(); rotateCW(); break;\n900\t case 'KeyX': e.preventDefault(); rotateCW(); break;\n901\t case 'KeyZ': e.preventDefault(); rotateCCW(); break;\n902\t case 'Space': e.preventDefault(); hardDrop(); break;\n903\t case 'KeyC': e.preventDefault(); holdPiece(); break;\n904\t }\n905\t});\n906\t\n907\twindow.addEventListener('keyup', e => {\n908\t if (['ArrowLeft','ArrowRight','ArrowDown'].includes(e.code)) {\n909\t stopDAS(e.code);\n910\t }\n911\t});\n912\t\n913\t// ═══════════════════════════════════════════════════════════════\n914\t// COLOUR HELPERS\n915\t// ═══════════════════════════════════════════════════════════════\n916\tfunction parseHex(hex) {\n917\t const n = parseInt(hex.replace('#',''), 16);\n918\t return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n919\t}\n920\tfunction toHex([r, g, b]) {\n921\t return '#' + [r, g, b].map(v => Math.min(255, Math.max(0, v)).toString(16).padStart(2,'0')).join('');\n922\t}\n923\tfunction lighten(hex, amt) { return toHex(parseHex(hex).map(v => v + amt)); }\n924\tfunction darken(hex, amt) { return toHex(parseHex(hex).map(v => v - amt)); }\n925\t\n926\t// ═══════════════════════════════════════════════════════════════\n927\t// INITIAL RENDER\n928\t// ═══════════════════════════════════════════════════════════════\n929\t(function initialDraw() {\n930\t ctx.fillStyle = '#090918';\n931\t ctx.fillRect(0, 0, canvas.width, canvas.height);\n932\t // subtle grid\n933\t ctx.strokeStyle = '#12122a';\n934\t ctx.lineWidth = 0.5;\n935\t for (let c = 1; c < COLS; c++) {\n936\t ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n937\t }\n938\t for (let r = 1; r < ROWS; r++) {\n939\t ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n940\t }\n941\t holdCtx.fillStyle = '#0d0d1f'; holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n942\t nextCtx.fillStyle = '#0d0d1f'; nextCtx.fillRect(0, 0, nextCvs.width, nextCvs.height);\n943\t})();\n944\t</script>\n945\t</body>\n946\t</html>\n947\t"}]},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"b70358d3-4998-4897-ba6e-2563a49f8780","timestamp":"2026-04-04T09:29:46.272Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-st5faakp/tetris.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0d0d1a;\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 100vh;\n font-family: 'Segoe UI', system-ui, sans-serif;\n color: #e0e0ff;\n user-select: none;\n }\n\n #wrapper {\n display: flex;\n gap: 24px;\n align-items: flex-start;\n }\n\n /* ── Left panel ─────────────────────────────── */\n #left-panel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 140px;\n }\n\n /* ── Right panel ────────────────────────────── */\n #right-panel {\n display: flex;\n flex-direction: column;\n gap: 16px;\n width: 140px;\n }\n\n .panel-box {\n background: #12122a;\n border: 2px solid #2a2a5a;\n border-radius: 10px;\n padding: 14px 16px;\n }\n\n .panel-box h3 {\n font-size: 10px;\n letter-spacing: 2px;\n text-transform: uppercase;\n color: #6666aa;\n margin-bottom: 8px;\n }\n\n .panel-value {\n font-size: 26px;\n font-weight: 700;\n color: #c8c8ff;\n letter-spacing: 1px;\n }\n\n /* ── Canvas / game board ────────────────────── */\n #game-area {\n position: relative;\n }\n\n #board {\n display: block;\n border: 3px solid #2a2a5a;\n border-radius: 4px;\n box-shadow: 0 0 40px #3333aa55, inset 0 0 20px #00001888;\n }\n\n /* ── Overlay (start / pause / game-over) ───── */\n #overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 14px;\n background: rgba(5, 5, 20, 0.82);\n border-radius: 2px;\n backdrop-filter: blur(3px);\n }\n\n #overlay h2 {\n font-size: 30px;\n letter-spacing: 4px;\n text-transform: uppercase;\n color: #fff;\n text-shadow: 0 0 20px #8888ff;\n }\n\n #overlay p {\n font-size: 13px;\n color: #9090cc;\n letter-spacing: 1px;\n text-align: center;\n line-height: 1.7;\n }\n\n #overlay button {\n margin-top: 6px;\n padding: 11px 32px;\n font-size: 14px;\n font-weight: 700;\n letter-spacing: 2px;\n text-transform: uppercase;\n background: linear-gradient(135deg, #4444cc, #6644ff);\n color: #fff;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n transition: filter 0.15s, transform 0.12s;\n box-shadow: 0 4px 18px #4444cc88;\n }\n\n #overlay button:hover { filter: brightness(1.25); transform: translateY(-2px); }\n #overlay button:active { transform: translateY(0); }\n\n /* ── Next-piece canvas ──────────────────────── */\n #next-canvas {\n display: block;\n margin: 6px auto 0;\n }\n\n /* ── Hold canvas ────────────────────────────── */\n #hold-canvas {\n display: block;\n margin: 6px auto 0;\n }\n\n /* ── Controls list ──────────────────────────── */\n .controls-list {\n font-size: 11px;\n line-height: 2;\n color: #7777bb;\n }\n\n .controls-list span {\n display: inline-block;\n background: #1e1e3e;\n border: 1px solid #3333668a;\n border-radius: 4px;\n padding: 1px 6px;\n font-size: 10px;\n color: #aaaadd;\n margin-right: 4px;\n }\n\n /* ── Ghost / level colours ──────────────────── */\n #level-bar-wrap {\n background: #1a1a35;\n border-radius: 4px;\n height: 6px;\n overflow: hidden;\n margin-top: 6px;\n }\n\n #level-bar {\n height: 100%;\n width: 0%;\n background: linear-gradient(90deg, #4466ff, #aa44ff);\n border-radius: 4px;\n transition: width 0.4s ease;\n }\n </style>\n</head>\n<body>\n\n<div id=\"wrapper\">\n\n <!-- LEFT PANEL -->\n <div id=\"left-panel\">\n <div class=\"panel-box\">\n <h3>Score</h3>\n <div class=\"panel-value\" id=\"score-display\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Level</h3>\n <div class=\"panel-value\" id=\"level-display\">1</div>\n <div id=\"level-bar-wrap\"><div id=\"level-bar\"></div></div>\n </div>\n <div class=\"panel-box\">\n <h3>Lines</h3>\n <div class=\"panel-value\" id=\"lines-display\">0</div>\n </div>\n <div class=\"panel-box\">\n <h3>Hold <small style=\"font-size:9px;color:#555\">(C)</small></h3>\n <canvas id=\"hold-canvas\" width=\"100\" height=\"80\"></canvas>\n </div>\n </div>\n\n <!-- GAME BOARD -->\n <div id=\"game-area\">\n <canvas id=\"board\" width=\"300\" height=\"600\"></canvas>\n <div id=\"overlay\">\n <h2>Tetris</h2>\n <p>Arrow keys to move & soft-drop<br>\n ↑ / X rotate CW · Z rotate CCW<br>\n Space hard-drop · C hold<br>\n P pause</p>\n <button id=\"start-btn\">Start Game</button>\n </div>\n </div>\n\n <!-- RIGHT PANEL -->\n <div id=\"right-panel\">\n <div class=\"panel-box\">\n <h3>Next</h3>\n <canvas id=\"next-canvas\" width=\"100\" height=\"200\"></canvas>\n </div>\n <div class=\"panel-box\">\n <h3>Controls</h3>\n <div class=\"controls-list\">\n <span>←→</span> Move<br>\n <span>↓</span> Soft Drop<br>\n <span>Space</span> Hard Drop<br>\n <span>↑</span><span>X</span> Rotate CW<br>\n <span>Z</span> Rotate CCW<br>\n <span>C</span> Hold<br>\n <span>P</span> Pause\n </div>\n </div>\n <div class=\"panel-box\" id=\"combo-box\" style=\"display:none\">\n <h3>Combo</h3>\n <div class=\"panel-value\" id=\"combo-display\">x0</div>\n </div>\n </div>\n\n</div>\n\n<script>\n// ═══════════════════════════════════════════════════════════════\n// CONSTANTS\n// ═══════════════════════════════════════════════════════════════\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 30; // px per cell\n\n// Colours per piece type (index 0 = empty)\nconst COLORS = [\n null,\n '#00cfcf', // I – cyan\n '#f0a000', // O – orange/yellow\n '#a000f0', // T – purple\n '#00a000', // S – green\n '#f00000', // Z – red\n '#0000f0', // J – blue\n '#f07800', // L – orange\n];\n\nconst GHOST_ALPHA = 0.22;\n\n// Tetromino definitions – each piece has 4 rotation states\n// Stored as [row][col] offsets from the pivot\nconst PIECES = {\n // 0 1 2 3\n I: [\n [[0,0],[0,1],[0,2],[0,3]],\n [[0,2],[1,2],[2,2],[3,2]],\n [[1,0],[1,1],[1,2],[1,3]],\n [[0,1],[1,1],[2,1],[3,1]],\n ],\n O: [\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n [[0,0],[0,1],[1,0],[1,1]],\n ],\n T: [\n [[0,1],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[1,2],[2,1]],\n [[0,1],[1,0],[1,1],[2,1]],\n ],\n S: [\n [[0,1],[0,2],[1,0],[1,1]],\n [[0,1],[1,1],[1,2],[2,2]],\n [[1,1],[1,2],[2,0],[2,1]],\n [[0,0],[1,0],[1,1],[2,1]],\n ],\n Z: [\n [[0,0],[0,1],[1,1],[1,2]],\n [[0,2],[1,1],[1,2],[2,1]],\n [[1,0],[1,1],[2,1],[2,2]],\n [[0,1],[1,0],[1,1],[2,0]],\n ],\n J: [\n [[0,0],[1,0],[1,1],[1,2]],\n [[0,1],[0,2],[1,1],[2,1]],\n [[1,0],[1,1],[1,2],[2,2]],\n [[0,1],[1,1],[2,0],[2,1]],\n ],\n L: [\n [[0,2],[1,0],[1,1],[1,2]],\n [[0,1],[1,1],[2,1],[2,2]],\n [[1,0],[1,1],[1,2],[2,0]],\n [[0,0],[0,1],[1,1],[2,1]],\n ],\n};\n\nconst PIECE_KEYS = Object.keys(PIECES); // ['I','O','T','S','Z','J','L']\nconst PIECE_IDX = { I:1, O:2, T:3, S:4, Z:5, J:6, L:7 };\n\n// Wall-kick offsets for standard rotation (SRS-lite)\n// [from-rotation][to-rotation] = array of (dr,dc) attempts\nconst KICKS = {};\n(function buildKicks() {\n // Non-I pieces\n const standard = {\n '01': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n '10': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n '12': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n '21': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2,-1]],\n '23': [[ 0, 0],[ 0,-1],[-1,-1],[ 2, 0],[ 2,-1]],\n '32': [[ 0, 0],[ 0, 1],[ 1, 1],[-2, 0],[-2, 1]],\n '30': [[ 0, 0],[ 0, 1],[-1, 1],[ 2, 0],[ 2, 1]],\n '03': [[ 0, 0],[ 0,-1],[ 1,-1],[-2, 0],[-2, 1]],\n };\n // I piece\n const iKicks = {\n '01': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n '10': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n '12': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n '21': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n '23': [[ 0, 0],[ 0, 2],[ 0,-1],[ 1, 2],[-2,-1]],\n '32': [[ 0, 0],[ 0,-2],[ 0, 1],[-1,-2],[ 2, 1]],\n '30': [[ 0, 0],[ 0, 1],[ 0,-2],[-2, 1],[ 1,-2]],\n '03': [[ 0, 0],[ 0,-1],[ 0, 2],[ 2,-1],[-1, 2]],\n };\n KICKS['standard'] = standard;\n KICKS['I'] = iKicks;\n})();\n\n// Level → fall interval (ms)\nfunction levelSpeed(level) {\n // Classic Tetris-style curve\n const frames = [48,43,38,33,28,23,18,13,8,6,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1];\n const idx = Math.min(level - 1, frames.length - 1);\n return Math.round(frames[idx] * (1000 / 60));\n}\n\n// Points for line clears (single,double,triple,tetris)\nconst LINE_POINTS = [0, 100, 300, 500, 800];\nconst SOFT_DROP_PTS = 1;\nconst HARD_DROP_PTS = 2;\n\n// ═══════════════════════════════════════════════════════════════\n// GAME STATE\n// ═══════════════════════════════════════════════════════════════\nlet board, current, ghost, nextQueue, held;\nlet score, level, lines, combo;\nlet canHold, gameOver, paused, started;\nlet dropTimer, lastTime, animId;\nlet lockTimer, lockMoved;\nconst LOCK_DELAY = 500; // ms before a grounded piece locks\nconst LOCK_MOVES = 15; // max moves before forced lock\n\n// 7-bag randomiser\nlet bag = [];\nfunction nextBag() {\n if (bag.length === 0) {\n bag = [...PIECE_KEYS];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n }\n return bag.pop();\n}\n\nfunction createPiece(type) {\n // spawn position: row 0, col 3\n return { type, rot: 0, row: 0, col: 3 };\n}\n\nfunction initGame() {\n board = Array.from({ length: ROWS }, () => new Array(COLS).fill(0));\n bag = [];\n nextQueue = [nextBag(), nextBag(), nextBag()];\n current = spawnPiece();\n held = null;\n score = 0; level = 1; lines = 0; combo = -1;\n canHold = true;\n gameOver = false; paused = false;\n dropTimer = 0; lastTime = null;\n lockTimer = null; lockMoved = 0;\n updateUI();\n updateGhost();\n}\n\nfunction spawnPiece() {\n const type = nextQueue.shift();\n nextQueue.push(nextBag());\n const p = createPiece(type);\n // I and O spawn slightly lower\n if (type === 'I') p.row = -1;\n return p;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// BOARD HELPERS\n// ═══════════════════════════════════════════════════════════════\nfunction cells(piece) {\n return PIECES[piece.type][piece.rot].map(([dr, dc]) => [piece.row + dr, piece.col + dc]);\n}\n\nfunction valid(piece, dr = 0, dc = 0, rot = piece.rot) {\n const test = { ...piece, row: piece.row + dr, col: piece.col + dc, rot };\n return cells(test).every(([r, c]) =>\n r < ROWS && c >= 0 && c < COLS && (r < 0 || board[r][c] === 0)\n );\n}\n\nfunction lock(piece) {\n let topped = false;\n cells(piece).forEach(([r, c]) => {\n if (r < 0) { topped = true; return; }\n board[r][c] = PIECE_IDX[piece.type];\n });\n if (topped) { triggerGameOver(); return; }\n\n clearLines();\n\n current = spawnPiece();\n canHold = true;\n lockMoved = 0;\n clearTimeout(lockTimer); lockTimer = null;\n\n if (!valid(current)) {\n triggerGameOver();\n } else {\n updateGhost();\n }\n}\n\nfunction clearLines() {\n const full = [];\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(v => v !== 0)) full.push(r);\n }\n if (full.length === 0) {\n combo = -1;\n return;\n }\n\n // Remove full rows (animate via flash handled in draw)\n full.forEach(r => {\n board.splice(r, 1);\n board.unshift(new Array(COLS).fill(0));\n });\n\n combo++;\n const pts = (LINE_POINTS[full.length] + (combo > 0 ? 50 * combo : 0)) * level;\n score += pts;\n lines += full.length;\n level = Math.floor(lines / 10) + 1;\n updateUI();\n\n flashLines(full); // purely visual\n}\n\nfunction updateGhost() {\n if (!current) return;\n ghost = { ...current };\n while (valid(ghost, 1)) ghost.row++;\n}\n\n// ═══════════════════════════════════════════════════════════════\n// CONTROLS\n// ═══════════════════════════════════════════════════════════════\nfunction moveLeft() { tryMove(0, -1); }\nfunction moveRight() { tryMove(0, 1); }\nfunction softDrop() {\n if (tryMove(1, 0)) {\n score += SOFT_DROP_PTS;\n updateUI();\n }\n}\n\nfunction tryMove(dr, dc) {\n if (!current || gameOver || paused) return false;\n if (valid(current, dr, dc)) {\n current.row += dr;\n current.col += dc;\n updateGhost();\n extendLock();\n return true;\n }\n return false;\n}\n\nfunction rotateCW() { rotate( 1); }\nfunction rotateCCW() { rotate(-1); }\n\nfunction rotate(dir) {\n if (!current || gameOver || paused) return;\n const newRot = ((current.rot + dir) + 4) % 4;\n const kickTable = current.type === 'I' ? KICKS['I'] : KICKS['standard'];\n const key = `${current.rot}${newRot}`;\n const kicks = kickTable[key] || [[0, 0]];\n for (const [kr, kc] of kicks) {\n if (valid(current, kr, kc, newRot)) {\n current.row += kr;\n current.col += kc;\n current.rot = newRot;\n updateGhost();\n extendLock();\n return;\n }\n }\n}\n\nfunction hardDrop() {\n if (!current || gameOver || paused) return;\n let dropped = 0;\n while (valid(current, 1)) { current.row++; dropped++; }\n score += dropped * HARD_DROP_PTS;\n updateUI();\n clearTimeout(lockTimer); lockTimer = null;\n lock(current);\n}\n\nfunction holdPiece() {\n if (!current || !canHold || gameOver || paused) return;\n if (held) {\n const prev = held;\n held = current.type;\n current = createPiece(prev);\n if (current.type === 'I') current.row = -1;\n } else {\n held = current.type;\n current = spawnPiece();\n }\n canHold = false;\n updateGhost();\n drawHold();\n}\n\nfunction extendLock() {\n // If the piece is grounded, reset lock timer (up to LOCK_MOVES times)\n if (!valid(current, 1) && lockMoved < LOCK_MOVES) {\n lockMoved++;\n clearTimeout(lockTimer);\n lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// GAME LOOP\n// ═══════════════════════════════════════════════════════════════\nfunction gameLoop(ts) {\n if (gameOver) return;\n animId = requestAnimationFrame(gameLoop);\n\n if (!lastTime) lastTime = ts;\n const dt = ts - lastTime;\n lastTime = ts;\n\n if (!paused) {\n dropTimer += dt;\n const interval = levelSpeed(level);\n if (dropTimer >= interval) {\n dropTimer -= interval;\n // Attempt to fall\n if (valid(current, 1)) {\n current.row++;\n updateGhost();\n } else {\n // Start lock delay if not already running\n if (!lockTimer) {\n lockTimer = setTimeout(() => { lock(current); }, LOCK_DELAY);\n }\n }\n }\n }\n\n draw();\n}\n\nfunction triggerGameOver() {\n gameOver = true;\n clearTimeout(lockTimer);\n cancelAnimationFrame(animId);\n drawBoard(); // final frame\n showOverlay('GAME OVER', `Score: ${score} | Level: ${level} | Lines: ${lines}`, 'Play Again');\n}\n\n// ═══════════════════════════════════════════════════════════════\n// RENDERING\n// ═══════════════════════════════════════════════════════════════\nconst canvas = document.getElementById('board');\nconst ctx = canvas.getContext('2d');\nconst nextCvs = document.getElementById('next-canvas');\nconst nextCtx = nextCvs.getContext('2d');\nconst holdCvs = document.getElementById('hold-canvas');\nconst holdCtx = holdCvs.getContext('2d');\n\nlet flashRows = [];\nlet flashTimer = 0;\nconst FLASH_DUR = 320;\n\nfunction flashLines(rows) {\n flashRows = rows;\n flashTimer = FLASH_DUR;\n}\n\nfunction draw() {\n drawBoard();\n drawNext();\n drawHold();\n}\n\nfunction drawBoard() {\n // Background\n ctx.fillStyle = '#090918';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n // Grid lines (subtle)\n ctx.strokeStyle = '#12122a';\n ctx.lineWidth = 0.5;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n }\n\n // Settled board cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (board[r][c]) {\n drawCell(ctx, r, c, COLORS[board[r][c]], 1, 0, 0);\n }\n }\n }\n\n // Flash overlay\n if (flashTimer > 0 && !paused) {\n flashTimer -= 16;\n const alpha = 0.7 * (flashTimer / FLASH_DUR);\n ctx.fillStyle = `rgba(255,255,255,${alpha})`;\n flashRows.forEach(r => {\n ctx.fillRect(0, r * BLOCK, canvas.width, BLOCK);\n });\n if (flashTimer <= 0) flashRows = [];\n }\n\n if (paused) {\n ctx.fillStyle = 'rgba(5,5,20,0.7)';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = '#fff';\n ctx.font = 'bold 28px system-ui';\n ctx.textAlign = 'center';\n ctx.fillText('PAUSED', canvas.width / 2, canvas.height / 2);\n ctx.font = '13px system-ui';\n ctx.fillStyle = '#8888cc';\n ctx.fillText('Press P to resume', canvas.width / 2, canvas.height / 2 + 32);\n return;\n }\n\n if (!current) return;\n\n // Ghost piece\n if (ghost && (ghost.row !== current.row || ghost.col !== current.col)) {\n cells(ghost).forEach(([r, c]) => {\n if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], GHOST_ALPHA, 0, 0);\n });\n }\n\n // Active piece\n cells(current).forEach(([r, c]) => {\n if (r >= 0) drawCell(ctx, r, c, COLORS[PIECE_IDX[current.type]], 1, 0, 0);\n });\n}\n\nfunction drawCell(context, row, col, color, alpha, offR, offC) {\n const x = (col + offC) * BLOCK;\n const y = (row + offR) * BLOCK;\n const s = BLOCK - 1;\n\n context.save();\n context.globalAlpha = alpha;\n\n // Main fill with gradient\n const grad = context.createLinearGradient(x, y, x + s, y + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n context.fillStyle = grad;\n context.fillRect(x + 1, y + 1, s - 1, s - 1);\n\n // Highlight edge (top-left)\n context.fillStyle = lighten(color, 60);\n context.fillRect(x + 1, y + 1, s - 1, 2);\n context.fillRect(x + 1, y + 1, 2, s - 1);\n\n // Shadow edge (bottom-right)\n context.fillStyle = darken(color, 50);\n context.fillRect(x + 1, y + s - 2, s - 1, 2);\n context.fillRect(x + s - 2, y + 1, 2, s - 1);\n\n context.restore();\n}\n\nfunction drawMiniPiece(context, cvs, type) {\n context.fillStyle = '#0d0d1f';\n context.fillRect(0, 0, cvs.width, cvs.height);\n if (!type) return;\n\n const shape = PIECES[type][0];\n const minR = Math.min(...shape.map(([r]) => r));\n const maxR = Math.max(...shape.map(([r]) => r));\n const minC = Math.min(...shape.map(([, c]) => c));\n const maxC = Math.max(...shape.map(([, c]) => c));\n const h = maxR - minR + 1;\n const w = maxC - minC + 1;\n const bs = 20;\n const startX = Math.floor((cvs.width - w * bs) / 2);\n const startY = Math.floor((cvs.height - h * bs) / 2);\n\n shape.forEach(([r, c]) => {\n const px = startX + (c - minC) * bs;\n const py = startY + (r - minR) * bs;\n const s = bs - 1;\n\n const color = COLORS[PIECE_IDX[type]];\n const grad = context.createLinearGradient(px, py, px + s, py + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n context.fillStyle = grad;\n context.fillRect(px + 1, py + 1, s - 1, s - 1);\n\n context.fillStyle = lighten(color, 60);\n context.fillRect(px + 1, py + 1, s - 1, 2);\n context.fillRect(px + 1, py + 1, 2, s - 1);\n\n context.fillStyle = darken(color, 50);\n context.fillRect(px + 1, py + s - 2, s - 1, 2);\n context.fillRect(px + s - 2, py + 1, 2, s - 1);\n });\n}\n\nfunction drawNext() {\n const w = nextCvs.width;\n const h = nextCvs.height;\n nextCtx.fillStyle = '#0d0d1f';\n nextCtx.fillRect(0, 0, w, h);\n\n const slotH = h / 3;\n nextQueue.forEach((type, i) => {\n const shape = PIECES[type][0];\n const minR = Math.min(...shape.map(([r]) => r));\n const maxR = Math.max(...shape.map(([r]) => r));\n const minC = Math.min(...shape.map(([, c]) => c));\n const maxC = Math.max(...shape.map(([, c]) => c));\n const ph = maxR - minR + 1;\n const pw = maxC - minC + 1;\n const bs = i === 0 ? 20 : 16;\n const startX = Math.floor((w - pw * bs) / 2);\n const baseY = i * slotH + Math.floor((slotH - ph * bs) / 2);\n\n shape.forEach(([r, c]) => {\n const px = startX + (c - minC) * bs;\n const py = baseY + (r - minR) * bs;\n const s = bs - 1;\n const color = COLORS[PIECE_IDX[type]];\n const alpha = i === 0 ? 1 : 0.65 - i * 0.1;\n\n nextCtx.save();\n nextCtx.globalAlpha = alpha;\n const grad = nextCtx.createLinearGradient(px, py, px + s, py + s);\n grad.addColorStop(0, lighten(color, 40));\n grad.addColorStop(1, darken(color, 30));\n nextCtx.fillStyle = grad;\n nextCtx.fillRect(px + 1, py + 1, s - 1, s - 1);\n nextCtx.fillStyle = lighten(color, 60);\n nextCtx.fillRect(px + 1, py + 1, s - 1, 2);\n nextCtx.fillRect(px + 1, py + 1, 2, s - 1);\n nextCtx.fillStyle = darken(color, 50);\n nextCtx.fillRect(px + 1, py + s - 2, s - 1, 2);\n nextCtx.fillRect(px + s - 2, py + 1, 2, s - 1);\n nextCtx.restore();\n });\n });\n}\n\nfunction drawHold() {\n drawMiniPiece(holdCtx, holdCvs, held);\n if (!canHold && held) {\n holdCtx.fillStyle = 'rgba(0,0,0,0.5)';\n holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// UI\n// ═══════════════════════════════════════════════════════════════\nconst scoreEl = document.getElementById('score-display');\nconst levelEl = document.getElementById('level-display');\nconst linesEl = document.getElementById('lines-display');\nconst levelBar = document.getElementById('level-bar');\nconst comboBox = document.getElementById('combo-box');\nconst comboDis = document.getElementById('combo-display');\n\nfunction updateUI() {\n scoreEl.textContent = score.toLocaleString();\n levelEl.textContent = level;\n linesEl.textContent = lines;\n const pct = ((lines % 10) / 10) * 100;\n levelBar.style.width = pct + '%';\n\n if (combo > 0) {\n comboBox.style.display = 'block';\n comboDis.textContent = 'x' + (combo + 1);\n } else {\n comboBox.style.display = 'none';\n }\n}\n\n// ═══════════════════════════════════════════════════════════════\n// OVERLAY\n// ═══════════════════════════════════════════════════════════════\nconst overlay = document.getElementById('overlay');\nconst startBtn = document.getElementById('start-btn');\n\nfunction showOverlay(title, msg, btnText) {\n overlay.querySelector('h2').textContent = title;\n overlay.querySelector('p').innerHTML = msg;\n startBtn.textContent = btnText;\n overlay.style.display = 'flex';\n}\n\nfunction hideOverlay() {\n overlay.style.display = 'none';\n}\n\nstartBtn.addEventListener('click', () => {\n hideOverlay();\n initGame();\n lastTime = null;\n started = true;\n animId = requestAnimationFrame(gameLoop);\n});\n\n// ═══════════════════════════════════════════════════════════════\n// KEYBOARD\n// ═══════════════════════════════════════════════════════════════\nconst DAS_DELAY = 170; // ms before auto-repeat\nconst DAS_REPEAT = 50; // ms between repeats\n\nlet dasKey = null, dasTimer = null, dasRepeat = null;\n\nfunction startDAS(key) {\n if (dasKey === key) return;\n stopDAS();\n dasKey = key;\n applyKey(key);\n dasTimer = setTimeout(() => {\n dasRepeat = setInterval(() => applyKey(key), DAS_REPEAT);\n }, DAS_DELAY);\n}\n\nfunction stopDAS(key) {\n if (key && dasKey !== key) return;\n clearTimeout(dasTimer);\n clearInterval(dasRepeat);\n dasKey = null;\n}\n\nfunction applyKey(key) {\n if (key === 'ArrowLeft') moveLeft();\n if (key === 'ArrowRight') moveRight();\n if (key === 'ArrowDown') softDrop();\n}\n\nwindow.addEventListener('keydown', e => {\n if (!started) return;\n\n // Pause toggle\n if (e.code === 'KeyP') {\n if (gameOver) return;\n paused = !paused;\n if (!paused) { lastTime = null; }\n return;\n }\n\n if (paused || gameOver) return;\n\n switch (e.code) {\n case 'ArrowLeft': e.preventDefault(); startDAS('ArrowLeft'); break;\n case 'ArrowRight': e.preventDefault(); startDAS('ArrowRight'); break;\n case 'ArrowDown': e.preventDefault(); startDAS('ArrowDown'); break;\n case 'ArrowUp': e.preventDefault(); rotateCW(); break;\n case 'KeyX': e.preventDefault(); rotateCW(); break;\n case 'KeyZ': e.preventDefault(); rotateCCW(); break;\n case 'Space': e.preventDefault(); hardDrop(); break;\n case 'KeyC': e.preventDefault(); holdPiece(); break;\n }\n});\n\nwindow.addEventListener('keyup', e => {\n if (['ArrowLeft','ArrowRight','ArrowDown'].includes(e.code)) {\n stopDAS(e.code);\n }\n});\n\n// ═══════════════════════════════════════════════════════════════\n// COLOUR HELPERS\n// ═══════════════════════════════════════════════════════════════\nfunction parseHex(hex) {\n const n = parseInt(hex.replace('#',''), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\nfunction toHex([r, g, b]) {\n return '#' + [r, g, b].map(v => Math.min(255, Math.max(0, v)).toString(16).padStart(2,'0')).join('');\n}\nfunction lighten(hex, amt) { return toHex(parseHex(hex).map(v => v + amt)); }\nfunction darken(hex, amt) { return toHex(parseHex(hex).map(v => v - amt)); }\n\n// ═══════════════════════════════════════════════════════════════\n// INITIAL RENDER\n// ═══════════════════════════════════════════════════════════════\n(function initialDraw() {\n ctx.fillStyle = '#090918';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n // subtle grid\n ctx.strokeStyle = '#12122a';\n ctx.lineWidth = 0.5;\n for (let c = 1; c < COLS; c++) {\n ctx.beginPath(); ctx.moveTo(c * BLOCK, 0); ctx.lineTo(c * BLOCK, canvas.height); ctx.stroke();\n }\n for (let r = 1; r < ROWS; r++) {\n ctx.beginPath(); ctx.moveTo(0, r * BLOCK); ctx.lineTo(canvas.width, r * BLOCK); ctx.stroke();\n }\n holdCtx.fillStyle = '#0d0d1f'; holdCtx.fillRect(0, 0, holdCvs.width, holdCvs.height);\n nextCtx.fillStyle = '#0d0d1f'; nextCtx.fillRect(0, 0, nextCvs.width, nextCvs.height);\n})();\n</script>\n</body>\n</html>\n","numLines":947,"startLine":1,"totalLines":947}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EWMKR36UUCpREudhxgS23g","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The file looks complete and correct. Let me verify the line-clearing bug - when I splice rows from the board, I need to be careful about the ordering. Since `full` is built by iterating from `ROWS-1` to 0, the indices are in descending order. When I splice the first (highest-index) row, the remaining rows shift down in the array, which means the subsequent indices are now off by 1.\n\nWait, let me think about this more carefully. The `full` array has rows collected from bottom to top (highest row index first). When we splice a row at index `r` and unshift a new empty row at the top, the rows below `r` remain at the same indices, but rows above `r` shift down by 1.\n \nActually, I'm processing from the highest row index down to the lowest, so each splice removes a row and unshift adds one at the top. Since I'm always moving to lower indices next, the shifting from the unshift shouldn't affect the remaining indices I need to process. rows [r1, r2] where r1 > r2 (since we iterate from bottom to top), and we splice(r1) then unshift an empty row at top. This shifts all indices above r1 down by 1, so the row that was at r2 is now at r2 + 1 — meaning when we try to splice(r2) next, we're actually removing the wrong row.\n\nI see the bug now. Since we're iterating through full rows in descending order, I need to either splice them all at once or adjust for the index shifts as we go. When we remove a row and add one at the top, every row above it shifts down, so I should splice from the highest index first and work downward to avoid these index conflicts. still (since we unshifted at index 0, and `r2 < r1`, the unshift moved everything up by 1, so old `r2` is now at `r2 + 1`)\n\nHmm, so after each splice+unshift pair:\n- rows above the spliced row shift up by 1 index (due to unshift)\n- we want to splice the next one at `r2`, but it's now at `r2 + 1`\n\nThis is indeed a bug. The standard fix is to process from lowest to highest (or handle index compensation).\n\nActually, wait. Let me re-examine. `full` is computed bottom-to-top, so `full[0]` is the highest row index, `full[1]` is lower, etc.\n\nAfter splice(full[0]) + unshift:\n- The row that was at `full[0]` is removed\n- An empty row is added at index 0\n- Old `full[1]` row was at index `full[1]` (where `full[1] < full[0]`)\n- After removing index `full[0]` (higher), old `full[1]` stays at `full[1]`\n- After unshifting a new row at index 0, old `full[1]` is now at `full[1] + 1`\n\nSo when I try to splice at `full[1]`, I'm actually hitting the wrong row since the indices have shifted. The simplest approach is to collect all the full rows first, then rebuild the board by filtering out the full ones and adding empty rows back in.\n\nImplementing the bulk removal... I'm tracing through what happens when we remove full rows in descending order to see if there's actually a bug. Starting with board rows 0-19 where rows 18 and 15 are full, when I splice row 18 first and add an empty row at the top, the indices shift and row 15 moves to a different position, which could cause us to remove the wrong row on the next iteration. I see the real issue now—the flash effect is trying to highlight the original row indices (15 and 18), but after the board gets modified with the splice and unshift operations, those indices now contain different pieces, so the visual feedback is misleading. The core gameplay bug is that the splice operation is hitting the wrong row because the indices shift as I modify the array.\n\nLet me rewrite the line clearing logic to properly identify full rows, collect them, remove them from the board, and add empty rows at the top while keeping track of which rows to flash.\n\nWriting the cleaner clearing function...\n\nNow I'm calculating the points earned based on how many lines were cleared and the current combo multiplier, updating the score and level accordingly, then triggering the flash animation for the cleared rows.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12607,"cache_read_input_tokens":16264,"cache_creation":{"ephemeral_5m_input_tokens":12607,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"80f71dc0-10aa-4f1a-a096-2082299a6fa2"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EWMKR36UUCpREudhxgS23g","type":"message","role":"assistant","content":[{"type":"text","text":"Let me check for and fix a subtle bug in the line-clearing logic — when splicing multiple rows in a loop, each splice+unshift shifts the remaining indices:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12607,"cache_read_input_tokens":16264,"cache_creation":{"ephemeral_5m_input_tokens":12607,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"bf92b2c9-b9ad-4e08-a3fa-04c1eabc1b74"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EWMKR36UUCpREudhxgS23g","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_015fQnfVYroz6KPJPh5kSw88","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-st5faakp/tetris.html","old_string":"function clearLines() {\n const full = [];\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(v => v !== 0)) full.push(r);\n }\n if (full.length === 0) {\n combo = -1;\n return;\n }\n\n // Remove full rows (animate via flash handled in draw)\n full.forEach(r => {\n board.splice(r, 1);\n board.unshift(new Array(COLS).fill(0));\n });\n\n combo++;\n const pts = (LINE_POINTS[full.length] + (combo > 0 ? 50 * combo : 0)) * level;\n score += pts;\n lines += full.length;\n level = Math.floor(lines / 10) + 1;\n updateUI();\n\n flashLines(full); // purely visual\n}","new_string":"function clearLines() {\n const fullSet = new Set();\n for (let r = ROWS - 1; r >= 0; r--) {\n if (board[r].every(v => v !== 0)) fullSet.add(r);\n }\n if (fullSet.size === 0) {\n combo = -1;\n return;\n }\n\n const count = fullSet.size;\n const flashRowArr = [...fullSet]; // original indices for flash effect\n\n // Remove all full rows atomically, prepend empty rows at top\n const kept = board.filter((_, r) => !fullSet.has(r));\n const empties = Array.from({ length: count }, () => new Array(COLS).fill(0));\n board.splice(0, ROWS, ...empties, ...kept);\n\n combo++;\n const pts = (LINE_POINTS[count] + (combo > 0 ? 50 * combo : 0)) * level;\n score += pts;\n lines += count;\n level = Math.floor(lines / 10) + 1;\n updateUI();\n\n flashLines(flashRowArr); // purely visual\n}"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":12607,"cache_read_input_tokens":16264,"cache_creation":{"ephemeral_5m_input_tokens":12607,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"51362cea-83a9-4448-b173-97c33c3a433b","uuid":"eea422c0-68c6-403f-bff8-d06f86d2c3fd"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":369690,"duration_api_ms":320653,"is_error":true,"num_turns":6,"stop_reason":"tool_use","session_id":"51362cea-83a9-4448-b173-97c33c3a433b","total_cost_usd":0.5627619,"usage":{"input_tokens":8,"cache_creation_input_tokens":12023,"cache_read_input_tokens":36144,"output_tokens":27271,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":12023},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":9,"outputTokens":30310,"cacheReadInputTokens":52408,"cacheCreationInputTokens":24630,"webSearchRequests":0,"costUSD":0.5627619,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"a295b98f-2aed-4745-b8f0-ce4802d6cdc4","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":665925,"duration_api_ms":83182,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","total_cost_usd":0.8200067999999998,"usage":{"input_tokens":2,"cache_creation_input_tokens":484,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":484},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":4,"outputTokens":54366,"cacheReadInputTokens":8966,"cacheCreationInputTokens":484,"webSearchRequests":0,"costUSD":0.8200067999999998,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"5181054c-814b-4cac-b9bd-7077e907591e","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 3, - "total": 3 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 7, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "unspecified", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:24:26.132580+00:00", - "wall_time_seconds": 666, - "exit_code": 1, - "completed_at": "2026-04-04T09:35:35.999585+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=en_language=unspecified_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,7 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "unspecified", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n"}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-u5h42hq_","session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"b0555a95-43d6-4ed0-86ca-9add86f2ebee","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SD1rV1EPkCusNZk9LVwVBc","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser. I'll create a complete HTML/CSS/JavaScript implementation with all the standard Tetris mechanics:\n\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z/X for rotation)\n\nLet me build this as a single HTML file with embedded CSS and JavaScript.\n\nKey features to implement:\n- Game board (10x20 grid)\n\n\n- 7 tetromino pieces with colors\n- Movement: left, right, down\n- Rotation (clockwise and counter-clockwise)\n- Wall kicks for rotation\n- Hard drop (space bar)\n- Soft drop (down arrow)\n- Line clearing with scoring\n- Level progression (speed increases)\n- Next piece preview\n- Score/level/lines display\n- Game over detection\n- Ghost piece (shows where piece will land)\n- Pause functionality\n\nWriting the complete Tetris implementation...\n\nBuilding the HTML structure and styling...\n\nNow I'm planning out the core mechanics: the seven tetromino shapes with their respective colors, NES-style scoring where clearing four lines gives 800 points multiplied by the current level, and level progression that increases speed every 10 lines cleared. The controls will use arrow keys for movement and rotation, with space for hard drop and the down arrow for soft drop.\n\nI'm setting up the canvas-based rendering system with the game state variables I'll need to track, then implementing the core game loop with piece movement, collision detection, wall kick rotation, and line clearing logic.\n\nStill writing implementation... Writing the HTML and CSS... Writing the HTML structure... Writing the HTML structure... Defining the tetromino shapes... Defining the rotation states for the remaining Tetris pieces... Setting up the game canvas and next piece preview canvas with their dimensions, then initializing the overlay styling and starting to define the core game state variables like the board and current piece. I'm finishing the random piece selection, then setting up the spawn logic to pick the next piece type, position it in the center of the board, and check if the game should end if that position is already occupied.\n\nNow I need to handle the game loop timing—I'm using a speed table that increases difficulty with each level, similar to classic Tetris, then implementing the main game loop that tracks elapsed time and triggers piece drops at the appropriate intervals.\n\nAdding collision detection and movement logic... Writing game mechanics... Defining wall kick data... Implementing the piece locking logic... Writing the rendering functions... Writing the rendering functions... Still writing the rendering functions... Writing game state functions...\n\nNow I'm setting up keyboard event listeners to handle player input—Enter restarts the game, arrow keys control piece movement and rotation, and the down arrow also increases the score when pressed.\n\nI'm thinking through some edge cases around piece spawning positions to make sure they align with standard Tetris behavior.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":484,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":484,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","uuid":"4c4cc691-0e52-4a0f-8a74-1210d30bfa03"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011jYezqLUNJQovzDgDHJ3cq","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser. I'll create a complete HTML/CSS/JavaScript Tetris game with all standard mechanics. Let me build this as a single HTML file with embedded CSS and JavaScript.\n\nKey features to implement:\n1. All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or space for rotation)\n\n\n7. Next piece preview\n8. Level display\n9. Game over screen\n\nI'm designing the board as a standard 10×20 grid with all seven tetrominoes in their classic colors, and I'll implement controls for movement, rotation, and hard drops along with a pause feature. For scoring, I'm using the classic NES Tetris formula where clearing multiple lines gives exponentially higher points multiplied by the current level.\n\nBuilding the complete HTML file with styling and game logic... Defining the tetromino pieces... Finishing up the piece definitions with the J and L pieces, then I'm setting up a rotation function that transposes the matrix and flips it to handle piece rotations. Now I'm planning out the core game state with the board and other variables I'll need.\n\nFor the game loop, I'm using requestAnimationFrame to track time between frames and accumulate a drop counter that triggers piece drops at regular intervals, then redraws the board.\n\nNow I'm working out the drop speed curve based on the level. I'll use the NES Tetris speed progression, which gives a nice difficulty ramp—starting around 800ms at level 1 and accelerating significantly as levels increase, eventually capping at a minimum of 50ms to keep the game playable.\n\nI'll build out the complete game with a dark theme and clean layout. The board will be centered with stats on the left and a next piece preview on the right.\n\nBuilding the HTML structure and styling... Still writing styles... I'm setting up the canvas dimensions and planning out the full game implementation with piece definitions, rotation mechanics, collision detection, line clearing with animations, scoring and level progression, plus quality-of-life features like the ghost piece preview, hard and soft drops, and a start screen.\n\nWriting the game code... Setting up the canvas elements and initializing the game state variables like board, current piece, score, and level, then defining a function to create new tetromino pieces with their shape and color properties.\n\nNow I'm implementing piece generation using a bag system instead of pure randomization, which ensures each tetromino type appears exactly once per cycle before reshuffling, and starting to set up the game initialization.\n\nImplementing rotation logic... Still writing game logic... Writing game logic... Writing the game rendering... Finishing the grid rendering, then iterating through the board to draw any placed cells, and handling the ghost piece preview that shows where the current falling piece would land if dropped immediately. Drawing the current piece onto the canvas by iterating through its shape matrix and rendering each block in the appropriate color, then layering on the game state overlays—start screen, game over, or pause message depending on what's happening.\n\nNow I'm setting up the overlay rendering function that darkens the screen and displays centered text in different sizes and colors, then moving on to draw the next piece preview in its own canvas.\n\nStill writing drawing logic... Writing the game loop and input handling... Setting up key repeat timers for right and down arrow movement...\n\nNow I'm handling the up arrow for rotation and the Z key for counter-clockwise rotation, then setting up the spacebar for what looks like hard drop functionality.\n\nI'm also setting up a keyup listener to clean up the key state and clear any active timers when keys are released. Then I'm initializing the game board and starting the animation loop.\n\nActually, I'm realizing the key repeat logic is getting complicated with all these timers. Let me think about simplifying this with a polling approach instead.\n\nI'll implement a cleaner DAS system where movement keys trigger an initial action, then after a short delay they start repeating at regular intervals. This way I can handle left, right, and down movements more smoothly without so much timer management overhead.\n\nSetting up DAS timers... Still writing game controls...\n\nNow I'm thinking about the visual polish—adding a modern dark theme with blue-to-purple gradients, classic Tetris piece colors but more vibrant, and some nice animations like line clear flashes and score popups. I should also track the high score and keep the implementation clean without over-engineering it.\n\nI'm structuring this with a proper game state machine to handle IDLE, PLAYING, PAUSED, and GAME_OVER states, plus features like a hold piece mechanic and smooth animations. Let me write out the complete self-contained HTML file with all the styling and logic built in.\n\nBuilding the complete game file... Still writing styles... Building the game UI panels... Defining the game constants and tetromino shapes... Setting up the game constants and canvas elements...\n\nNow I'm initializing the game state variables—the board grid, current and next pieces, hold functionality, and score tracking.\n\nSetting up the piece randomization system... Writing game logic... Writing game logic... Writing game logic... I'm setting up the game initialization by resetting the board, clearing the score and level counters, and pulling the saved best score from storage before spawning the first piece.\n\nNow I'm handling the UI updates—displaying the current score, best score, level, and lines cleared to the player, plus saving the best score to local storage if it's beaten.\n\nWriting the rendering code... Finishing the shadow rectangles for the 3D effect on the cells. Now I'm realizing the per-cell glow is overcomplicating things—I'll focus the visual polish on just the active piece instead. Let me step back and write out a complete, streamlined Tetris implementation in a single HTML file with canvas rendering, including hold and next piece previews, smooth movement with delayed auto-shift, lock delay mechanics, and back-to-back bonus scoring.\n\nWriting the complete implementation... I'm settling on simple 2D arrays for each piece shape, spawning them at row 0 for straightforward positioning. The I-piece rotation will need special handling since it transforms between 1×4 and 4×1 dimensions, but for now I'll keep the implementation basic and functional. rotation and it'll work fine.\n\nHere's the issue: if I-piece starts as [[1,1,1,1]], after rotation it becomes [[1],[1],[1],[1]] (4×1). The width changes, so the x position needs to be adjusted. Let me handle this by adjusting x to keep the piece centered.\n\nMy `rotateCW` function transforms a 1×4 matrix into a 4×1 matrix correctly by swapping rows and columns. The wall kick logic should handle any positioning issues that arise from the dimension change.\n\nNow I'm writing out the complete file with a nice visual design—dark blue and purple gradient background, a dark board with subtle grid lines, and colored pieces.\n\nWriting the HTML and CSS... Still writing styles... Building the left panel layout... Setting up the game constants and piece definitions... Setting up the next and hold piece canvases with their own 2D contexts, then initializing the game state object with idle, playing, paused, and gameover states, along with variables to track the current piece, ghost position, and next piece in the queue.\n\nNow I'm defining variables for the held piece, score tracking, and line-clearing animations with a flash effect, plus a lock delay mechanism to prevent pieces from locking too quickly when they touch the bottom. I'm also implementing a 7-bag randomizer system that shuffles through all piece types to ensure fair distribution.\n\nSetting up the bag refill and draw functions... Writing game logic... Still writing rotation logic... Still writing game logic... I'm realizing I need to step back and rewrite this whole thing cleanly from scratch, being careful about variable naming and structure consistency. Let me build out the complete HTML file with all the game logic, focusing on getting the implementation right before worrying about styling. Setting up the Tetris game constants and initializing the board state... Setting up the canvas elements for the next piece preview and hold piece display, then defining a helper function to grab DOM elements and implementing a bag randomizer that shuffles through all available piece types. Still writing game logic... Continuing with the lock function to place the piece on the board and check for completed lines, then either flash them or spawn the next piece.\n\nNow I'm handling the line clear animation—removing full rows, shifting everything down, updating the score and level based on how many lines were cleared, then spawning the next piece.\n\nFor spawning, I'm pulling the next piece into play, generating a new preview piece, and checking if the new piece can actually fit—if not, the game ends.\n\nWhen the game ends, I'm saving the high score to local storage if it's beaten, then initializing a fresh game state with reset counters and retrieving the saved best score.\n\nNow I'm setting up the pause toggle to switch between playing and paused states, calculating the drop speed based on the current level, and updating the UI to display the score, best, level, and lines cleared.\n\nWriting block rendering code... Writing the board rendering... Still writing rendering logic... Writing overlay rendering... Writing the rendering logic... Writing the mini piece renderer... I'm thinking through the canvas dimensions for the next/hold pieces—the I-piece is 1×4 when horizontal and 4×1 when rotated, while other shapes like T, S, and Z are 2×3, and O is 2×2, so I need to account for the maximum dimensions of 2 rows by 4 columns to properly size the mini canvas with padding. for the preview, I'll always show the default orientation, so 1×4 or 2×4 (some have 3 rows).\n\nWait:\n- I: 1 row × 4 cols\n- O: 2 rows × 2 cols\n- T: 2 rows × 3 cols\n- S: 2 rows × 3 cols\n- Z: 2 rows × 3 cols\n- J: 2 rows × 3 cols\n- L: 2 rows × 3 cols\n\nOK so max dimensions are 2 rows × 4 cols. For MINI_SIZE = 24, that gives me a preview canvas of 104 × 58 pixels with some padding. I'll center each piece in that space. Alright, I'm going to stop overthinking and just write the complete file with all the mechanics: CELL_SIZE of 30 for the main 10×20 board, MINI_SIZE of 24 for previews, DAS timing at 150ms delay with 50ms repeat, lock delay of 400ms, and a flash animation on line clears.\n\nWriting the complete Tetris implementation... Now I'm thinking through the remaining mechanics: lock delay gives players a moment to adjust after a piece stops falling, and game over triggers when a new piece can't spawn or blocks reach above the board. Soft and hard drops both award points based on distance, while the hold feature lets players swap pieces once per turn. For scoring, I'm mapping out the point values for line clears at different levels, plus bonuses for soft drops and hard drops.\n\nNow I'm planning the visual design—I want a polished, modern Tetris aesthetic with a dark board, colorful solid pieces with highlights, ghost pieces shown as outlines, and semi-transparent UI panels. I'll use a deep gradient background and glowing text for the title, with a bright flash effect when lines clear. I'm skipping shadow blur effects to keep performance smooth, and I'm setting up the canvas dimensions at 30 pixels per cell for a 10×20 board.\n\nSetting up the HTML structure... I'm skipping the drop line animation since it's too complex, and instead focusing on a simple flash effect for cleared lines—three quick blinks over 300ms alternating between white and the board background, then clearing the lines and spawning the next piece. Now I'm writing out the complete HTML and CSS...\n\nBuilding the layout with styles... Still writing styles... Setting up the game board structure with canvases for the main play area and preview windows, then defining the core constants like board dimensions, cell sizes, and animation timings for the Tetris mechanics.\n\nNow I'm defining the tetromino shapes and their corresponding colors, along with the drop speed progression for each level.\n\nSetting up the canvas elements... Setting up game state variables for tracking drop acceleration, lock delay, and flash effects, then implementing a 7-bag randomizer to cycle through piece types fairly.\n\nNow I'm defining helper functions to create new pieces with their initial position and rotation, plus board utilities to check if pieces fit within bounds and don't collide with existing blocks. Writing game logic... Writing game logic... Writing game logic... Writing the rendering code... Finishing the ghost tile rendering, then moving into the main game loop where I'm handling delta time calculations and the core game physics—checking piece collisions, managing lock delay when pieces hit the floor, and triggering line clears when rows flash. Writing the rendering logic... Writing the rendering pipeline... Still writing the drawing logic...\n\nNow I'm setting up the keyboard input handler to track which keys are being held down and implementing the delayed auto-repeat system for directional controls, with special handling for game state transitions like starting a new game or toggling pause.\n\nHandling arrow key movements and rotations...\n\nNow I'm setting up the key release handler and implementing the delayed auto-repeat system for continuous movement when keys are held down, then attaching the event listeners to the document.\n\nI notice I made an error in the initialization block—I used `localStorage.getContext` when it should be `localStorage.getItem` to retrieve the best score. Let me correct that and make sure the canvas context variable is used consistently throughout, then kick off the animation loop.\n\nNow I'm reviewing the hold piece logic to make sure it properly swaps the current piece with the held piece, and handles the case where nothing was previously held by pulling from the next queue instead. The flash animation logic looks solid—when a row is flashing, we alternate between white and light blue regardless of grid content, and since full rows are guaranteed to have all cells filled, there's no issue there. During the flash animation itself, `cur` is null so the ghost piece and current piece don't draw, which is the right behavior. Now I'm checking the game over condition in `spawnNext()` to see if it properly detects when a new piece can't fit. when it locks, I should trigger game over immediately rather than placing partial cells above the board.\n\nFor casual play, my current approach of placing visible cells and skipping hidden ones works fine, though competitive Tetris would end the game right away. Now I'm realizing the DAS logic for the Shift key is problematic since it's a modifier rather than a regular key.\n\nI'll stick with 'c'/'C' for the hold action since Shift can interfere with other inputs. The `held_keys` check prevents browser autorepeat, but I need to think through how this interacts with continuous key presses like holding ArrowDown.\n\nActually, the DAS system handles the continuous input properly—keys like ArrowUp, 'z', and Space shouldn't repeat, and the `held_keys` check prevents that. Both ShiftLeft and ShiftRight report as 'Shift' in `e.key`, so that works fine.\n\nNow I'm thinking through the visual design, starting with the canvas dimensions.\n\nThe main board is 300×600 pixels at 30px per cell. For the sidebar elements, the next piece preview needs 4×2 cells and the hold piece needs the same, so I'm calculating those dimensions. The sidebar itself is 120px wide, but with padding that leaves only about 96-100px of usable space. I need to adjust the mini canvas size from 24px down to 22px per cell so a 4-cell-wide preview fits comfortably within the available width. I'm settling on a sidebar width of 130px with a module size of 24px, which gives me a canvas of 104×48px with 13px padding on each side. Now I'm setting up the flexible CSS styling... Setting the mini canvas to 104×60 pixels with a sidebar width of 130px gives me enough space with the 12px padding. Since all standard Tetris pieces fit within 2 rows maximum, this height should work well for displaying them. I'm checking whether the controls panel will fit vertically—7 keys at roughly 20px each plus padding comes to about 152px, which leaves plenty of room in the 600px board height. The entire sidebar content totals around 474px, so everything should fit comfortably.\n\nNow I need to handle a few details: showing \"NONE\" when there's no held piece, dimming the hold display when it can't be used, and making sure my key repeat logic is correct. For rotation keys like ArrowUp, holding them down won't trigger repeated rotations since I only start DAS for movement keys—that's the intended behavior.\n\nAs for the hold key itself, I'm going to stick with just 'C' to keep things simple and avoid any potential conflicts with shift key combinations.\n\nNow I'm mapping out the final control scheme: arrow keys for movement and soft drop with DAS, up arrow or X for clockwise rotation, Z for counter-clockwise, space for hard drop, C for hold, P to pause, and Enter to start or restart the game.\n\nBefore I write the complete implementation, I want to handle a few visual polish touches—showing the final score prominently when the game ends and darkening the board during pause. I'm skipping the level-up animation for now to keep scope manageable, though I do want to add a visual indicator showing progress toward the next level.\n\nWriting the complete Tetris implementation... Still writing styles... Building the HTML structure... Setting up the game constants and canvas context...\n\nNow I'm initializing the canvas dimensions for the main board, next piece preview, and hold piece display, then declaring all the game state variables like the grid, current piece, score, and game phase.\n\nSetting up the 7-bag randomizer system... Still writing game logic... Writing game mechanics... Writing game logic... Writing game initialization and UI logic... Writing the rendering functions... Writing the rendering functions... Still writing game loop... Drawing the ghost piece and current piece...\n\nNow I'm handling the game state overlays—showing the start prompt when idle, pause message when paused, and the game over screen with the final score. Then I'm rendering the preview windows for the next piece and the held piece, before requesting the next animation frame to keep the game loop running.\n\nSetting up input handling with delayed auto-repeat (DAS) mechanics so that holding a key triggers an immediate action, then waits before repeating at a faster rate...\n\nNow I'm wiring up the keyboard event listeners to prevent default browser behavior for game controls, track which keys are pressed, and handle special keys like Enter to start the game and P to toggle pause.\n\nSetting up game input handling...\n\nNow I'm initializing the game state by loading the high score from local storage, resetting the score and level counters, and kicking off the main game loop. I'm also thinking through the DAS behavior—the action fires immediately when a key is pressed, then again after the initial delay, then repeats at the faster rate, which is the standard Tetris feel. The soft drop and hard drop functions return booleans but I'm not using those values, which is fine for what I need.\n\nLooking at the rendering pipeline, I'm drawing in the right order: grid, placed blocks with their flash animation, ghost piece, current piece, then overlays on top. The flash timing works out to about five color alternations over 300ms, which should look smooth. I'm realizing there might be an issue with how the current piece is hidden when rows are flashing—I need to make sure the condition properly prevents it from rendering during that state.\n\nThe pause reset logic looks solid too: setting `prevTs = 0` when unpausing ensures the next frame doesn't jump by the pause duration. Now I'm checking the overlay positioning...\n\nCalculating overlay positioning... Verifying the math for centering multiple lines around the midpoint—with 3 lines, the spacing works out so they're evenly distributed vertically. The game over overlay is being called with the right number of arguments. Now I'm checking edge cases, like what happens when a new piece spawns at the top and immediately collides with existing blocks—the collision detection should catch that and end the game.\n\nFor rotation mechanics, the I-piece has enough wall kick offsets to rotate near boundaries, while the O-piece doesn't need kicks since it's rotationally symmetric. The DAS system handles left/right movement independently from hard drop, so they won't conflict with each other.\n\nLooking at the `commitPiece` function, it places the current piece onto the grid, marks any blocks that spawn above the top as a topped condition, clears the current piece, and ends the game if blocks reached the top—otherwise it continues to spawn the next piece.\n\nNow I'm thinking through a potential edge case: what if a piece is committed with some cells at y=0 and others below, and then a new piece spawns at y=0? The `fits` check in `spawnPiece` should catch any overlap and trigger game over. That seems right.\n\nBut there's another concern—during the lock delay, the player can still move or rotate the piece horizontally. If those actions push the piece into already-occupied cells, that would be a problem. Let me trace through `doMove` to verify it's checking collisions properly.\n\nChecking movement validation... I'm verifying the `fits` function handles bounds checking correctly—it allows negative y values for pieces partially off the top, and only checks grid collisions for cells within the visible board. Before writing the final file, I need to make sure `drawMini` handles the case where `nxt` is null on the first call before the game starts.\n\nInitializing `nxt` and `heldType` to null at the top would be cleaner, though the current undefined values work fine since they're falsy in the conditional checks. The hold preview will be dimmed initially since `holdEnabled` is undefined, but that's fine since there's nothing to display anyway.\n\nNow I'm realizing `score` needs proper initialization—declaring `let score;` leaves it undefined, so calling `score.toLocaleString()` would crash. I need to initialize the game state variables properly: `score = 0`, `lines = 0`, `level = 1`, `best = 0`, `phase = 'idle'`, and `prevTs = 0` so they have sensible defaults before `startGame()` runs. I'm handling the Shift key as an alternative for the hold mechanic since it won't conflict with arrow keys—when Shift is pressed with an arrow, they're separate events. Now I'll finalize the complete HTML file with all the logic I've worked through.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":0,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","uuid":"b86c4e8d-36b7-410a-a8e2-3e53396ff1fd"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_011jYezqLUNJQovzDgDHJ3cq","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QiXihSqCKN9xsYPGdAHYEc","name":"Bash","input":{"command":"ls /tmp/loop-bench-u5h42hq_","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":2,"cache_creation_input_tokens":0,"cache_read_input_tokens":4725,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","uuid":"14213319-532d-429e-a1ab-4290bc1fce30"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":665925,"duration_api_ms":83182,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"48aa13fb-e7ca-45a3-b6c4-240f42676d8e","total_cost_usd":0.8200067999999998,"usage":{"input_tokens":2,"cache_creation_input_tokens":484,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":484},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":4,"outputTokens":54366,"cacheReadInputTokens":8966,"cacheCreationInputTokens":484,"webSearchRequests":0,"costUSD":0.8200067999999998,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"5181054c-814b-4cac-b9bd-7077e907591e","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":332803,"duration_api_ms":318878,"is_error":true,"num_turns":14,"stop_reason":"tool_use","session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","total_cost_usd":0.50546745,"usage":{"input_tokens":18,"cache_creation_input_tokens":16805,"cache_read_input_tokens":124393,"output_tokens":25191,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":16805},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":19,"outputTokens":26222,"cacheReadInputTokens":145439,"cacheCreationInputTokens":18253,"webSearchRequests":0,"costUSD":0.50546745,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9d75aaa1-03a7-499c-9344-f0d43a123f0c","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,268 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": false, - "detail": "tsc --noEmit failed" - } - ], - "score": 0.75 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 4 - }, - "performance": { - "bundle_size_bytes": 91041, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 12, - "code": 9, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1362, - "dependencies": { - "production": 0, - "dev": 6, - "total": 6 - }, - "complexity": "over-engineered", - "console_logs": 0, - "magic_numbers": { - "count": 24, - "excessive": true - }, - "function_length": { - "count": 67, - "average": 5.8, - "max": 22, - "long_functions": 0 - }, - "max_nesting_depth": 11, - "global_declarations": 22, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 100.0, - "camel_case": 449, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 80, - "source_lines": 893, - "ratio_pct": 9.0 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 6, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 4 - }, - "duplication_percentage": 0.0, - "score": 0.75 - }, - "transcript_analysis": { - "total_events": 35, - "tool_calls": { - "total": 14, - "bash": 13, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 3, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.25, - "total": 16, - "passed": 4, - "failed": 12, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 36, - "height": 72 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 78 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 4, - "failed": 12, - "score": 0.25 - }, - "gameplay": { - "pieces_placed": 188, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 8, - "pass": false - } - } - }, - "score": 0.5535 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,133 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 36, - "height": 72 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "score did not increase: [0] -> no change after polling" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 78 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 4, - "failed": 12, - "score": 0.25 - }, - "gameplay": { - "pieces_placed": 188, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 8, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "es", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:54:36.621135+00:00", - "wall_time_seconds": 333, - "exit_code": 1, - "completed_at": "2026-04-03T21:00:13.805001+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,35 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Construye un juego de Tetris jugable que funcione en un navegador web. Debe tener todas las mecanicas estandar: rotacion de piezas, eliminacion de lineas, puntuacion y velocidad creciente. Usa controles de teclado para el movimiento y la rotacion.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-f6z2ybi3","session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"e18b1bc7-5914-430a-a0c1-cfa23ea68253","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01A5CXWDLr38cGgTBjYdNbxP","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a web browser. Let me create a complete Tetris game using TypeScript. I'll create:\n\n1. An `index.html` file - the main HTML structure\n2. A `style.css` file - styling for the game\n3. A `tetris.ts` file - the TypeScript game logic\n4. A `tsconfig.json` - TypeScript configuration\n5. A `package.json` - for dependencies\n\nLet me plan the Tetris game:\n\n**Features to implement:**\n- All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n\n\n- Piece rotation, line clearing, and a standard scoring system\n- Increasing speed as the game progresses\n- Ghost piece preview and next piece display\n- Hold piece functionality for strategic gameplay\n- Game over detection and pause mechanics\n\n**Controls:**\n- Arrow keys for movement and soft drop\n- Arrow Up or X for clockwise rotation, Z for counter-clockwise\n- Space for hard drop, C to hold a piece, P or Escape to pause\n\nI'll structure this with a clean architecture using TypeScript, setting up the project with a package.json and necessary configuration files.\n\nDefining the core architecture... Defining the piece rotations... Defining the rotation states for the remaining Tetris pieces... I'm finishing up the Tetris piece definitions and now moving into the full game implementation with a canvas-based approach, setting up the board dimensions and block rendering system.\n\nNow I'm defining the color palette for each piece type and the ghost piece preview, then planning out the core game mechanics like the game loop, drop speeds tied to level progression, movement input handling with DAS, lock delay mechanics, and the standard Tetris scoring system.\n\nSetting up the speed curve...\n\nNow I'm planning the layout with the board centered and info panels flanking it on both sides—the hold piece on the left and a stack of upcoming pieces on the right, with score, level, and line count displayed above.\n\nSetting up the TypeScript structure... Writing the game class structure...\n\nNow I'm thinking about implementing wall kicks for rotation using the SRS system, which will let pieces slide into valid positions when they rotate near walls or other blocks. I'm verifying the SRS wall kick offsets for the standard Tetris rotation system—these are the fallback positions the game tries when a piece can't rotate in its primary location. I'm settling on a straightforward approach with wall kicks rather than implementing the full SRS complexity. I'll use the standard 7-bag randomizer to ensure balanced piece distribution, then build out the complete game with TypeScript, organizing it across a package configuration, TypeScript setup, HTML structure, and the main game logic file.\n\nSetting up project files... I'm setting up the project structure with TypeScript configuration, then planning out the visual design with a dark theme, neon-colored pieces, and a layout that positions the hold panel, main board, and next pieces preview side by side. Now I'm ready to start writing the actual implementation code for a polished, production-quality Tetris game.\n\nDefining the core game logic... Defining the tetromino shapes... Defining the rotation states for the remaining Tetris pieces... Defining wall kick offsets... Defining game constants for wall kick offsets and drop speeds... Setting up the game class with canvas references for the main board and preview windows, then initializing the core game state including the current piece, held piece, and other tracking variables.\n\nNow I'm defining the timing mechanics for piece drops and lock delays, along with animation state for line clears. Setting up the canvas contexts for the hold and next piece displays, initializing the game board, and wiring up keyboard controls to handle player input.\n\nNow I'm implementing the piece randomization system using a 7-bag algorithm with Fisher-Yates shuffling to ensure fair distribution of Tetromino types, then managing the queue of upcoming pieces...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":520,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":520,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"83042515-235f-4980-a4ce-f0b67cd8aa44"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NhwVas9CU5y5EEhicXXdfZ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a web browser. Let me create a complete Tetris game using TypeScript with all standard mechanics:\n\n1. Piece rotation\n2. Line clearing\n3. Scoring\n4. Increasing speed\n5. Keyboard controls\n\nI'll create a well-structured TypeScript Tetris game. Let me plan the structure:\n\n- `index.html` - Main HTML file\n- `src/tetris.ts` - Main TypeScript file\n- `src/types.ts` - Type definitions\n\n\n- `style.css` - Styles\n\nI'll keep this simple and self-contained, using a straightforward setup without complex bundlers. I need to implement the 7 standard Tetris pieces (I, O, T, S, Z, J, L) with rotation mechanics...\n\nBuilding the game logic... Now I'm mapping out the core game mechanics—pieces falling with gravity, movement and rotation with wall kick support, line clearing with scoring, and level progression—along with the rendering system to display the board, current and ghost pieces, next queue, and hold functionality. I'm starting to write the TypeScript code to define the piece types and their properties.\n\nDefining piece shapes and colors... I'm finishing up the piece definitions and now thinking through the overall file structure for this Tetris game. I'll organize it with separate modules for constants, types, game logic, board management, piece handling, and rendering, then use esbuild to bundle everything together. Setting up the project files and constants now...\n\nDefining type interfaces... I'm planning out the full feature set for this Tetris implementation—levels with increasing speed, lock delay mechanics, and game over detection—plus a polished dark-themed UI with colored pieces, a score panel, and control instructions displayed at the bottom. Now I need to start writing the actual code files.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4761,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"a8df72f5-b46b-47db-bdac-64a01ca65608"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NhwVas9CU5y5EEhicXXdfZ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01H6PuR8dEHV39hp9ZRnStND","name":"Bash","input":{"command":"ls /tmp/loop-bench-f6z2ybi3/","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4761,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"57c822ca-d0c3-466a-a56c-de52029744c8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01H6PuR8dEHV39hp9ZRnStND","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"03058cf6-337e-47f6-92a8-d394b13a13af","timestamp":"2026-04-03T20:56:49.076Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014a8Gn3rtDABCJm9xAdhZq8","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HhzNVDh6998PL9bq5Wia6A","name":"Read","input":{"file_path":"/tmp/loop-bench-f6z2ybi3/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2063,"cache_read_input_tokens":4761,"cache_creation":{"ephemeral_5m_input_tokens":2063,"ephemeral_1h_input_tokens":0},"output_tokens":45,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"e1088321-a1af-4c17-afba-7ee0641fec87"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01HhzNVDh6998PL9bq5Wia6A","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-f6z2ybi3\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"452b1eeb-8608-4ba3-b22d-f065d6e4a8e5","timestamp":"2026-04-03T20:56:51.246Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-f6z2ybi3/package.json","content":"{\n \"name\": \"loop-bench-f6z2ybi3\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01RjBHEraANMz21zwdXUFXDJ","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I have TypeScript available. Let me add esbuild for bundling and then create all the necessary files. Let me install esbuild first.","signature":"EsECClsIDBgCKkDWH29quLqeLFLhfnspFpK4KxwMs+mTg9pKFDvjCcaS6XajPF2Vz+h5HyIPaKn+TUPpUk9NIzP4AQiXWDuHSULbMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxiZ0kNORcDT8U1p1oaDJCJLQL+k1i447QVEyIwb3BoaXJ3Fs/nEifAXsyVAAWXW8D8b34dgEgeM/I75saICSx2AWgIoF3WtnnHt1E3KpMBbmj4JX6DzNjDKvyU98x/7xX5NcdhdRnbSsRjbaH3UQFgDAr6CJ/6Uh5Unkq7PMtQWep4uyaNxFNoK+ezmbFk4YfQtuazaU2uK/2Majz6UaTdzf8N9xzQO3xoBCQE7IlDP4fykNRv2ziWnuI80+YTYScWU0lZCsh7ruyso6wGbJPVmnpNbUeMlK2J0unqIfJYmmtTGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":397,"cache_read_input_tokens":6824,"cache_creation":{"ephemeral_5m_input_tokens":397,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"d231e630-7713-434c-a3c6-06788bde071c"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01RjBHEraANMz21zwdXUFXDJ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01HtW32BQFgaJEs2J4BkLXvK","name":"Bash","input":{"command":"npm install --save-dev esbuild 2>&1 | tail -5","description":"Install esbuild for bundling"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":397,"cache_read_input_tokens":6824,"cache_creation":{"ephemeral_5m_input_tokens":397,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"8f6cb855-930d-4fd6-924b-4e03a6f16e8b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01HtW32BQFgaJEs2J4BkLXvK","type":"tool_result","content":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"938b087b-2e89-4197-9d9d-48b069bca07c","timestamp":"2026-04-03T20:56:55.116Z","tool_use_result":{"stdout":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FpYHJvb9NEvcGzK1prME6p","type":"message","role":"assistant","content":[{"type":"text","text":"Perfecto. Ahora construyo todo el juego:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":173,"cache_read_input_tokens":7221,"cache_creation":{"ephemeral_5m_input_tokens":173,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"f1fd053a-e151-4859-bbee-6e066592c620"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FpYHJvb9NEvcGzK1prME6p","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01XJEq865YfniAnJu4RLPYjj","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-f6z2ybi3/src /tmp/loop-bench-f6z2ybi3/styles","description":"Create project directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":173,"cache_read_input_tokens":7221,"cache_creation":{"ephemeral_5m_input_tokens":173,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"6c39291e-f238-4cd9-b49e-61a389eb1a56"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01XJEq865YfniAnJu4RLPYjj","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"c4cf8024-175f-4a64-9450-c11c51b7d6ea","timestamp":"2026-04-03T20:56:57.804Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01RqqfVdDovXgSJRUMeLqJ3q","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_014unn8va6i5A8wEN5c1ieX7","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"moduleResolution\": \"bundler\",\n \"strict\": true,\n \"noUnusedLocals\": true,\n \"noUnusedParameters\": true,\n \"noImplicitReturns\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\"\n },\n \"include\": [\"src/**/*\"]\n}\nEOF","description":"Create TypeScript configuration"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":138,"cache_read_input_tokens":7394,"cache_creation":{"ephemeral_5m_input_tokens":138,"ephemeral_1h_input_tokens":0},"output_tokens":63,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"ed9a24a5-c08c-4df9-a8a3-2c47d00b2295"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_014unn8va6i5A8wEN5c1ieX7","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"f4969a62-45f3-4a73-8a7e-997750f03257","timestamp":"2026-04-03T20:57:01.272Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CrSRRxDpVsh99Xvy3RMx2k","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_013i5wqXpNprDbuWGbyHmLfF","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/constants.ts << 'EOF'\n// Board dimensions\nexport const BOARD_COLS = 10;\nexport const BOARD_ROWS = 20;\nexport const HIDDEN_ROWS = 2; // rows above visible area for spawn\n\n// Rendering\nexport const CELL_SIZE = 30;\nexport const BORDER_RADIUS = 3;\n\n// Scoring (number of lines → points multiplied by level)\nexport const LINE_SCORE: Record<number, number> = {\n 1: 100,\n 2: 300,\n 3: 500,\n 4: 800,\n};\n\n// Soft-drop points per cell\nexport const SOFT_DROP_SCORE = 1;\n// Hard-drop points per cell\nexport const HARD_DROP_SCORE = 2;\n\n// Lines to clear to advance a level\nexport const LINES_PER_LEVEL = 10;\n\n// Fall interval in ms (level 1 → INITIAL_SPEED, decreases each level)\nexport const INITIAL_SPEED = 800;\nexport const SPEED_DECREMENT = 60; // ms less per level\nexport const MIN_SPEED = 80;\n\n// Lock-delay in ms (piece locks this long after landing)\nexport const LOCK_DELAY = 500;\n// Max lock-delay resets before forcing lock\nexport const MAX_LOCK_RESETS = 15;\n\n// DAS / ARR (keyboard auto-repeat)\nexport const DAS_DELAY = 170; // ms before auto-repeat starts\nexport const ARR_INTERVAL = 50; // ms between auto-repeat moves\n\n// Colors\nexport const BOARD_BG = '#0d0d1a';\nexport const GRID_COLOR = 'rgba(255,255,255,0.04)';\nexport const GHOST_ALPHA = 0.18;\nEOF","description":"Create game constants"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":254,"cache_read_input_tokens":7532,"cache_creation":{"ephemeral_5m_input_tokens":254,"ephemeral_1h_input_tokens":0},"output_tokens":59,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"65a85d7f-0134-4b56-98c4-faeeb10fd812"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_013i5wqXpNprDbuWGbyHmLfF","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"21087eb6-dfeb-4495-bdee-414d3ec285f4","timestamp":"2026-04-03T20:57:09.858Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014J1vMmnrkXFjrhs6neqLpx","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01GiZbpwEJA8q63Z4BkyYd1h","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/types.ts << 'EOF'\nexport type CellColor = string | null;\nexport type Grid = CellColor[][];\n\nexport interface Vec2 {\n x: number;\n y: number;\n}\n\nexport type PieceType = 'I' | 'O' | 'T' | 'S' | 'Z' | 'J' | 'L';\n\nexport interface PieceDef {\n shapes: number[][][]; // 4 rotation states\n color: string;\n highlight: string;\n shadow: string;\n}\n\nexport interface ActivePiece {\n type: PieceType;\n rotIndex: number; // 0-3\n pos: Vec2;\n}\n\nexport type GameStatus = 'idle' | 'playing' | 'paused' | 'gameover';\n\nexport interface GameState {\n board: Grid;\n current: ActivePiece;\n held: PieceType | null;\n holdUsed: boolean;\n bag: PieceType[];\n next: PieceType[]; // next 5 pieces\n score: number;\n lines: number;\n level: number;\n status: GameStatus;\n combo: number;\n}\nEOF","description":"Create TypeScript type definitions"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":546,"cache_read_input_tokens":7786,"cache_creation":{"ephemeral_5m_input_tokens":546,"ephemeral_1h_input_tokens":0},"output_tokens":58,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"af311174-7612-45e9-abe9-54160a8c832f"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01GiZbpwEJA8q63Z4BkyYd1h","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"52280bc3-272d-4e03-b605-4cbf7184eb1f","timestamp":"2026-04-03T20:57:15.304Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01VxJLxXiM1xhUXmB4ozduUo","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017wwVtfe398XPNJRyz6S3pc","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/pieces.ts << 'EOF'\nimport type { PieceDef, PieceType } from './types.js';\n\n/**\n * All 7 tetrominoes in their 4 rotation states.\n * Each rotation is a 4x4 (or smaller) grid of 0/1.\n * Rotations go clockwise: 0=spawn, 1=R, 2=2, 3=L.\n */\nconst PIECE_DEFS: Record<PieceType, PieceDef> = {\n I: {\n shapes: [\n [[0,0,0,0],[1,1,1,1],[0,0,0,0],[0,0,0,0]],\n [[0,0,1,0],[0,0,1,0],[0,0,1,0],[0,0,1,0]],\n [[0,0,0,0],[0,0,0,0],[1,1,1,1],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[0,1,0,0],[0,1,0,0]],\n ],\n color: '#00e5ff',\n highlight: '#80f4ff',\n shadow: '#007fa8',\n },\n O: {\n shapes: [\n [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,1,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]],\n ],\n color: '#ffe000',\n highlight: '#fff380',\n shadow: '#a08000',\n },\n T: {\n shapes: [\n [[0,1,0,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,0,0],[0,1,1,0],[0,1,0,0],[0,0,0,0]],\n [[0,0,0,0],[1,1,1,0],[0,1,0,0],[0,0,0,0]],\n [[0,1,0,0],[1,1,0,0],[0,1,0,0],[0,0,0,0]],\n ],\n color: '#c000ff',\n highlight: '#e080ff',\n shadow: '#6a00a0',\n },\n S: {\n shapes: [\n [[0,1,1,0],[1,1,0,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,0,0],[0,1,1,0],[0,0,1,0],[0,0,0,0]],\n [[0,0,0,0],[0,1,1,0],[1,1,0,0],[0,0,0,0]],\n [[1,0,0,0],[1,1,0,0],[0,1,0,0],[0,0,0,0]],\n ],\n color: '#00d000',\n highlight: '#80ff80',\n shadow: '#006800',\n },\n Z: {\n shapes: [\n [[1,1,0,0],[0,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,0,1,0],[0,1,1,0],[0,1,0,0],[0,0,0,0]],\n [[0,0,0,0],[1,1,0,0],[0,1,1,0],[0,0,0,0]],\n [[0,1,0,0],[1,1,0,0],[1,0,0,0],[0,0,0,0]],\n ],\n color: '#ff2020',\n highlight: '#ff8080',\n shadow: '#900000',\n },\n J: {\n shapes: [\n [[1,0,0,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,1,0],[0,1,0,0],[0,1,0,0],[0,0,0,0]],\n [[0,0,0,0],[1,1,1,0],[0,0,1,0],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[1,1,0,0],[0,0,0,0]],\n ],\n color: '#1a6fff',\n highlight: '#80b4ff',\n shadow: '#003da0',\n },\n L: {\n shapes: [\n [[0,0,1,0],[1,1,1,0],[0,0,0,0],[0,0,0,0]],\n [[0,1,0,0],[0,1,0,0],[0,1,1,0],[0,0,0,0]],\n [[0,0,0,0],[1,1,1,0],[1,0,0,0],[0,0,0,0]],\n [[1,1,0,0],[0,1,0,0],[0,1,0,0],[0,0,0,0]],\n ],\n color: '#ff8c00',\n highlight: '#ffc060',\n shadow: '#a04a00',\n },\n};\n\nexport const PIECE_TYPES: PieceType[] = ['I', 'O', 'T', 'S', 'Z', 'J', 'L'];\n\nexport function getDef(type: PieceType): PieceDef {\n return PIECE_DEFS[type];\n}\n\nexport function getShape(type: PieceType, rotIndex: number): number[][] {\n return PIECE_DEFS[type].shapes[rotIndex];\n}\n\n/** SRS wall-kick offsets for J/L/S/T/Z pieces.\n * Key: `${fromRot}>${toRot}` → array of [dx,dy] tests */\nconst KICKS_JLSTZ: Record<string, [number,number][]> = {\n '0>1': [[ 0,0],[-1,0],[-1,1],[ 0,-2],[-1,-2]],\n '1>0': [[ 0,0],[ 1,0],[ 1,-1],[ 0, 2],[ 1, 2]],\n '1>2': [[ 0,0],[ 1,0],[ 1,-1],[ 0, 2],[ 1, 2]],\n '2>1': [[ 0,0],[-1,0],[-1,1],[ 0,-2],[-1,-2]],\n '2>3': [[ 0,0],[ 1,0],[ 1,1],[ 0,-2],[ 1,-2]],\n '3>2': [[ 0,0],[-1,0],[-1,-1],[ 0, 2],[-1, 2]],\n '3>0': [[ 0,0],[-1,0],[-1,-1],[ 0, 2],[-1, 2]],\n '0>3': [[ 0,0],[ 1,0],[ 1,1],[ 0,-2],[ 1,-2]],\n};\n\nconst KICKS_I: Record<string, [number,number][]> = {\n '0>1': [[ 0,0],[-2,0],[ 1,0],[-2,-1],[ 1, 2]],\n '1>0': [[ 0,0],[ 2,0],[-1,0],[ 2, 1],[-1,-2]],\n '1>2': [[ 0,0],[-1,0],[ 2,0],[-1, 2],[ 2,-1]],\n '2>1': [[ 0,0],[ 1,0],[-2,0],[ 1,-2],[-2, 1]],\n '2>3': [[ 0,0],[ 2,0],[-1,0],[ 2, 1],[-1,-2]],\n '3>2': [[ 0,0],[-2,0],[ 1,0],[-2,-1],[ 1, 2]],\n '3>0': [[ 0,0],[ 1,0],[-2,0],[ 1,-2],[-2, 1]],\n '0>3': [[ 0,0],[-1,0],[ 2,0],[-1, 2],[ 2,-1]],\n};\n\nexport function getKicks(type: PieceType, fromRot: number, toRot: number): [number,number][] {\n const key = `${fromRot}>${toRot}`;\n if (type === 'I') return KICKS_I[key] ?? [[0,0]];\n if (type === 'O') return [[0,0]];\n return KICKS_JLSTZ[key] ?? [[0,0]];\n}\nEOF","description":"Create piece definitions with SRS rotation data"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":408,"cache_read_input_tokens":8332,"cache_creation":{"ephemeral_5m_input_tokens":408,"ephemeral_1h_input_tokens":0},"output_tokens":59,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"20b491c4-c68b-4d89-b5cc-3f210e78580d"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017wwVtfe398XPNJRyz6S3pc","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"fcf2ffa0-a50e-44bf-bbc7-a1591faf3409","timestamp":"2026-04-03T20:57:43.260Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01KwhAYhuUj8CS4ahzWqLzBh","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_012rPD3h8ivc9fr52xFCC1SW","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/board.ts << 'EOF'\nimport { BOARD_COLS, BOARD_ROWS } from './constants.js';\nimport type { Grid, CellColor, Vec2, ActivePiece } from './types.js';\nimport { getShape } from './pieces.js';\n\n/** Create a fresh empty board */\nexport function createBoard(): Grid {\n return Array.from({ length: BOARD_ROWS }, () =>\n Array<CellColor>(BOARD_COLS).fill(null)\n );\n}\n\n/** Deep-copy a board */\nexport function cloneBoard(board: Grid): Grid {\n return board.map(row => [...row]);\n}\n\n/** Returns all [row, col] cells occupied by the piece in absolute coords */\nexport function getPieceCells(piece: ActivePiece): Vec2[] {\n const shape = getShape(piece.type, piece.rotIndex);\n const cells: Vec2[] = [];\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n cells.push({ x: piece.pos.x + c, y: piece.pos.y + r });\n }\n }\n }\n return cells;\n}\n\n/** Returns true if the piece is in a valid position (no collision) */\nexport function isValid(board: Grid, piece: ActivePiece): boolean {\n for (const { x, y } of getPieceCells(piece)) {\n if (x < 0 || x >= BOARD_COLS) return false;\n if (y >= BOARD_ROWS) return false;\n if (y >= 0 && board[y][x] !== null) return false;\n }\n return true;\n}\n\n/** Lock the current piece onto the board and return the new board */\nexport function lockPiece(board: Grid, piece: ActivePiece, color: string): Grid {\n const next = cloneBoard(board);\n for (const { x, y } of getPieceCells(piece)) {\n if (y >= 0) next[y][x] = color;\n }\n return next;\n}\n\n/** Clear full lines, return [newBoard, linesCleared] */\nexport function clearLines(board: Grid): [Grid, number] {\n const remaining = board.filter(row => row.some(c => c === null));\n const cleared = BOARD_ROWS - remaining.length;\n const newRows = Array.from({ length: cleared }, () =>\n Array<CellColor>(BOARD_COLS).fill(null)\n );\n return [[...newRows, ...remaining], cleared];\n}\n\n/** Ghost-piece: find the lowest valid position by dropping straight down */\nexport function getGhostPiece(board: Grid, piece: ActivePiece): ActivePiece {\n let ghost: ActivePiece = { ...piece, pos: { ...piece.pos } };\n while (true) {\n const next: ActivePiece = { ...ghost, pos: { x: ghost.pos.x, y: ghost.pos.y + 1 } };\n if (!isValid(board, next)) break;\n ghost = next;\n }\n return ghost;\n}\nEOF","description":"Create board logic module"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2510,"cache_read_input_tokens":8740,"cache_creation":{"ephemeral_5m_input_tokens":2510,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"817952a1-0d5e-4dd1-b45d-87e1976f9bb3"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_012rPD3h8ivc9fr52xFCC1SW","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"11fcb5ab-5a04-4f9a-886d-76e3ea55e6d6","timestamp":"2026-04-03T20:57:55.701Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01PUeUM8MphqA3i6Jx7ckQQr","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01A6k8uSUUsn2t4pVETU5pSW","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/game.ts << 'EOF'\nimport {\n BOARD_COLS, HIDDEN_ROWS,\n LINE_SCORE, SOFT_DROP_SCORE, HARD_DROP_SCORE,\n LINES_PER_LEVEL, INITIAL_SPEED, SPEED_DECREMENT, MIN_SPEED,\n LOCK_DELAY, MAX_LOCK_RESETS,\n} from './constants.js';\nimport type { GameState, ActivePiece, PieceType } from './types.js';\nimport { PIECE_TYPES, getDef, getShape, getKicks } from './pieces.js';\nimport {\n createBoard, isValid, lockPiece, clearLines, getGhostPiece,\n} from './board.js';\n\n// ─── Bag randomizer ──────────────────────────────────────────────────────────\n\nfunction newBag(): PieceType[] {\n const bag = [...PIECE_TYPES];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n return bag;\n}\n\nfunction refillQueue(bag: PieceType[], next: PieceType[]): [PieceType[], PieceType[]] {\n const b = [...bag];\n const n = [...next];\n while (n.length < 6) {\n if (b.length === 0) b.push(...newBag());\n n.push(b.shift()!);\n }\n return [b, n];\n}\n\n// ─── Piece spawning ──────────────────────────────────────────────────────────\n\nfunction spawnPiece(type: PieceType): ActivePiece {\n const shape = getShape(type, 0);\n // Find the leftmost non-empty column to calculate centre spawn\n const cols = shape[0].length;\n return {\n type,\n rotIndex: 0,\n pos: {\n x: Math.floor(BOARD_COLS / 2) - Math.floor(cols / 2),\n y: -HIDDEN_ROWS,\n },\n };\n}\n\n// ─── Level / speed ───────────────────────────────────────────────────────────\n\nexport function levelSpeed(level: number): number {\n return Math.max(MIN_SPEED, INITIAL_SPEED - (level - 1) * SPEED_DECREMENT);\n}\n\n// ─── Initial state ───────────────────────────────────────────────────────────\n\nexport function createInitialState(): GameState {\n let bag: PieceType[] = newBag();\n let next: PieceType[] = [];\n [bag, next] = refillQueue(bag, next);\n\n const type = next.shift()!;\n [bag, next] = refillQueue(bag, next);\n\n return {\n board: createBoard(),\n current: spawnPiece(type),\n held: null,\n holdUsed: false,\n bag,\n next,\n score: 0,\n lines: 0,\n level: 1,\n status: 'idle',\n combo: -1,\n };\n}\n\n// ─── Action results ──────────────────────────────────────────────────────────\n\nexport type ActionResult =\n | { type: 'ok'; state: GameState }\n | { type: 'locked'; state: GameState; linesCleared: number }\n | { type: 'gameover'; state: GameState }\n | { type: 'noop' };\n\n// ─── Move helpers ────────────────────────────────────────────────────────────\n\nfunction tryMove(state: GameState, dx: number, dy: number): ActivePiece | null {\n const moved: ActivePiece = {\n ...state.current,\n pos: { x: state.current.pos.x + dx, y: state.current.pos.y + dy },\n };\n return isValid(state.board, moved) ? moved : null;\n}\n\nfunction tryRotate(state: GameState, dir: 1 | -1): ActivePiece | null {\n const fromRot = state.current.rotIndex;\n const toRot = (fromRot + dir + 4) % 4;\n const candidate: ActivePiece = { ...state.current, rotIndex: toRot };\n const kicks = getKicks(state.current.type, fromRot, toRot);\n\n for (const [dx, dy] of kicks) {\n const kicked: ActivePiece = {\n ...candidate,\n pos: { x: candidate.pos.x + dx, y: candidate.pos.y - dy },\n };\n if (isValid(state.board, kicked)) return kicked;\n }\n return null;\n}\n\n// Lock piece, clear lines, spawn next ─────────────────────────────────────────\n\nfunction lockAndSpawn(state: GameState): ActionResult {\n const color = getDef(state.current.type).color;\n let board = lockPiece(state.board, state.current, color);\n const [newBoard, linesCleared] = clearLines(board);\n board = newBoard;\n\n // Score\n let score = state.score;\n let combo = state.combo;\n if (linesCleared > 0) {\n combo += 1;\n const base = LINE_SCORE[linesCleared] ?? 0;\n score += base * state.level + (combo > 0 ? 50 * combo * state.level : 0);\n } else {\n combo = -1;\n }\n\n const lines = state.lines + linesCleared;\n const level = Math.floor(lines / LINES_PER_LEVEL) + 1;\n\n // Next piece\n let { bag, next } = state;\n const type = next.shift()!;\n [bag, next] = refillQueue(bag, next);\n\n const newPiece = spawnPiece(type);\n\n // Game over if spawn position is occupied\n if (!isValid(board, newPiece)) {\n return {\n type: 'gameover',\n state: { ...state, board, status: 'gameover', score, lines, level, combo },\n };\n }\n\n return {\n type: 'locked',\n state: {\n ...state,\n board,\n current: newPiece,\n holdUsed: false,\n bag,\n next,\n score,\n lines,\n level,\n combo,\n },\n linesCleared,\n };\n}\n\n// ─── Public actions ───────────────────────────────────────────────────────────\n\nexport function actionMoveLeft(state: GameState): ActionResult {\n const moved = tryMove(state, -1, 0);\n if (!moved) return { type: 'noop' };\n return { type: 'ok', state: { ...state, current: moved } };\n}\n\nexport function actionMoveRight(state: GameState): ActionResult {\n const moved = tryMove(state, 1, 0);\n if (!moved) return { type: 'noop' };\n return { type: 'ok', state: { ...state, current: moved } };\n}\n\nexport function actionSoftDrop(state: GameState): ActionResult {\n const moved = tryMove(state, 0, 1);\n if (!moved) return { type: 'noop' }; // signal: piece should lock\n return {\n type: 'ok',\n state: { ...state, current: moved, score: state.score + SOFT_DROP_SCORE },\n };\n}\n\nexport function actionHardDrop(state: GameState): ActionResult {\n let s = state;\n let cells = 0;\n while (true) {\n const moved = tryMove(s, 0, 1);\n if (!moved) break;\n s = { ...s, current: moved };\n cells++;\n }\n s = { ...s, score: s.score + cells * HARD_DROP_SCORE };\n return lockAndSpawn(s);\n}\n\nexport function actionRotateCW(state: GameState): ActionResult {\n const rotated = tryRotate(state, 1);\n if (!rotated) return { type: 'noop' };\n return { type: 'ok', state: { ...state, current: rotated } };\n}\n\nexport function actionRotateCCW(state: GameState): ActionResult {\n const rotated = tryRotate(state, -1);\n if (!rotated) return { type: 'noop' };\n return { type: 'ok', state: { ...state, current: rotated } };\n}\n\nexport function actionRotate180(state: GameState): ActionResult {\n // Try both CW twice\n const r1 = tryRotate(state, 1);\n if (!r1) return { type: 'noop' };\n const r2 = tryRotate({ ...state, current: r1 }, 1);\n if (!r2) return { type: 'noop' };\n return { type: 'ok', state: { ...state, current: r2 } };\n}\n\nexport function actionGravity(state: GameState): ActionResult {\n const moved = tryMove(state, 0, 1);\n if (!moved) return { type: 'noop' }; // signal: lock\n return { type: 'ok', state: { ...state, current: moved } };\n}\n\nexport function actionLock(state: GameState): ActionResult {\n return lockAndSpawn(state);\n}\n\nexport function actionHold(state: GameState): ActionResult {\n if (state.holdUsed) return { type: 'noop' };\n\n const incoming = state.held ?? state.next[0];\n let { bag, next } = state;\n\n if (state.held === null) {\n // Take from next queue\n next = next.slice(1);\n [bag, next] = refillQueue(bag, next);\n }\n\n const newCurrent = spawnPiece(incoming);\n if (!isValid(state.board, newCurrent)) {\n return { type: 'gameover', state: { ...state, status: 'gameover' } };\n }\n\n return {\n type: 'ok',\n state: {\n ...state,\n current: newCurrent,\n held: state.current.type,\n holdUsed: true,\n bag,\n next,\n },\n };\n}\n\nexport function getGhost(state: GameState): ActivePiece {\n return getGhostPiece(state.board, state.current);\n}\nEOF","description":"Create core game logic module"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":905,"cache_read_input_tokens":11250,"cache_creation":{"ephemeral_5m_input_tokens":905,"ephemeral_1h_input_tokens":0},"output_tokens":67,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"9eaff762-3299-4c4d-960c-043e20329f60"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01A6k8uSUUsn2t4pVETU5pSW","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"051972ef-5567-4974-a210-edaeffd9fb26","timestamp":"2026-04-03T20:58:29.597Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01NyC5qh3Uuk2bbdSmGwuMFD","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01PH8AAmvfkYyzjLSCpGGktV","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/renderer.ts << 'EOF'\nimport {\n BOARD_COLS, BOARD_ROWS, CELL_SIZE, BORDER_RADIUS,\n BOARD_BG, GRID_COLOR, GHOST_ALPHA,\n} from './constants.js';\nimport type { GameState, ActivePiece, PieceType } from './types.js';\nimport { getDef, getShape } from './pieces.js';\nimport { getPieceCells } from './board.js';\nimport { getGhost } from './game.js';\n\n// Canvas / context references (set once in init)\nlet boardCtx: CanvasRenderingContext2D;\nlet uiCtx: CanvasRenderingContext2D;\n\nconst PANEL_CELL = 24; // cell size for side panels\n\n// ─── Init ─────────────────────────────────────────────────────────────────────\n\nexport function initRenderer(\n boardCanvas: HTMLCanvasElement,\n uiCanvas: HTMLCanvasElement,\n): void {\n boardCanvas.width = BOARD_COLS * CELL_SIZE;\n boardCanvas.height = BOARD_ROWS * CELL_SIZE;\n uiCanvas.width = boardCanvas.width;\n uiCanvas.height = boardCanvas.height;\n\n boardCtx = boardCanvas.getContext('2d')!;\n uiCtx = uiCanvas.getContext('2d')!;\n}\n\n// ─── Draw helpers ─────────────────────────────────────────────────────────────\n\nfunction drawCell(\n ctx: CanvasRenderingContext2D,\n col: number,\n row: number,\n color: string,\n highlight: string,\n shadow: string,\n size: number = CELL_SIZE,\n alpha: number = 1,\n ox: number = 0,\n oy: number = 0,\n): void {\n const x = ox + col * size;\n const y = oy + row * size;\n const pad = 1;\n const r = BORDER_RADIUS;\n\n ctx.save();\n ctx.globalAlpha = alpha;\n\n // Main fill\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r);\n ctx.fill();\n\n // Top-left highlight\n ctx.fillStyle = highlight;\n ctx.beginPath();\n ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r);\n ctx.fill();\n\n // Draw the main face over it (inner rect)\n const bevel = 4;\n ctx.fillStyle = color;\n ctx.beginPath();\n ctx.roundRect(x + pad + bevel, y + pad + bevel,\n size - pad * 2 - bevel * 2, size - pad * 2 - bevel * 2, Math.max(0, r - 1));\n ctx.fill();\n\n // Bottom-right shadow strip\n ctx.fillStyle = shadow;\n ctx.beginPath();\n ctx.roundRect(x + pad, y + pad, size - pad * 2, size - pad * 2, r);\n ctx.clip();\n ctx.fillRect(x + pad, y + size - pad - bevel, size - pad * 2, bevel);\n ctx.fillRect(x + size - pad - bevel, y + pad, bevel, size - pad * 2);\n\n ctx.restore();\n}\n\nfunction drawGrid(ctx: CanvasRenderingContext2D): void {\n ctx.strokeStyle = GRID_COLOR;\n ctx.lineWidth = 0.5;\n for (let c = 0; c <= BOARD_COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * CELL_SIZE, 0);\n ctx.lineTo(c * CELL_SIZE, BOARD_ROWS * CELL_SIZE);\n ctx.stroke();\n }\n for (let r = 0; r <= BOARD_ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * CELL_SIZE);\n ctx.lineTo(BOARD_COLS * CELL_SIZE, r * CELL_SIZE);\n ctx.stroke();\n }\n}\n\n// ─── Main render ─────────────────────────────────────────────────────────────\n\nexport function render(state: GameState): void {\n renderBoard(state);\n renderUI(state);\n}\n\nfunction renderBoard(state: GameState): void {\n const ctx = boardCtx;\n const W = BOARD_COLS * CELL_SIZE;\n const H = BOARD_ROWS * CELL_SIZE;\n\n // Background\n ctx.fillStyle = BOARD_BG;\n ctx.fillRect(0, 0, W, H);\n drawGrid(ctx);\n\n // Locked cells\n for (let r = 0; r < BOARD_ROWS; r++) {\n for (let c = 0; c < BOARD_COLS; c++) {\n const color = state.board[r][c];\n if (color) {\n // Derive highlight/shadow from color (use getDef if we could, but\n // the board only stores color strings; approximate shades)\n drawCell(ctx, c, r, color,\n lighten(color, 60), darken(color, 60));\n }\n }\n }\n\n if (state.status === 'playing' || state.status === 'paused') {\n // Ghost piece\n const ghost = getGhost(state);\n const def = getDef(ghost.type);\n for (const { x, y } of getPieceCells(ghost)) {\n if (y >= 0) {\n ctx.save();\n ctx.globalAlpha = GHOST_ALPHA;\n ctx.fillStyle = def.color;\n ctx.beginPath();\n ctx.roundRect(x * CELL_SIZE + 1, y * CELL_SIZE + 1,\n CELL_SIZE - 2, CELL_SIZE - 2, BORDER_RADIUS);\n ctx.fill();\n ctx.globalAlpha = GHOST_ALPHA * 2;\n ctx.strokeStyle = def.color;\n ctx.lineWidth = 1.5;\n ctx.stroke();\n ctx.restore();\n }\n }\n\n // Active piece\n const pdef = getDef(state.current.type);\n for (const { x, y } of getPieceCells(state.current)) {\n if (y >= 0) {\n drawCell(ctx, x, y, pdef.color, pdef.highlight, pdef.shadow);\n }\n }\n }\n\n // Pause overlay\n if (state.status === 'paused') {\n ctx.save();\n ctx.fillStyle = 'rgba(0,0,0,0.55)';\n ctx.fillRect(0, 0, W, H);\n ctx.fillStyle = '#fff';\n ctx.font = 'bold 32px \"Segoe UI\", sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('PAUSA', W / 2, H / 2);\n ctx.restore();\n }\n\n // Game-over overlay\n if (state.status === 'gameover') {\n ctx.save();\n ctx.fillStyle = 'rgba(0,0,0,0.7)';\n ctx.fillRect(0, 0, W, H);\n ctx.fillStyle = '#ff4444';\n ctx.font = 'bold 34px \"Segoe UI\", sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('GAME OVER', W / 2, H / 2 - 22);\n ctx.fillStyle = '#ccc';\n ctx.font = '18px \"Segoe UI\", sans-serif';\n ctx.fillText('Presiona Enter para reiniciar', W / 2, H / 2 + 22);\n ctx.restore();\n }\n\n // Idle overlay\n if (state.status === 'idle') {\n ctx.save();\n ctx.fillStyle = 'rgba(0,0,0,0.65)';\n ctx.fillRect(0, 0, W, H);\n ctx.fillStyle = '#00e5ff';\n ctx.font = 'bold 38px \"Segoe UI\", sans-serif';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText('TETRIS', W / 2, H / 2 - 28);\n ctx.fillStyle = '#aaa';\n ctx.font = '17px \"Segoe UI\", sans-serif';\n ctx.fillText('Presiona Enter para jugar', W / 2, H / 2 + 18);\n ctx.restore();\n }\n}\n\n// ─── UI canvas (side panels drawn into absolutely-positioned div) ─────────────\n\nexport function renderSidePanels(\n state: GameState,\n holdEl: HTMLElement,\n nextEl: HTMLElement,\n scoreEl: HTMLElement,\n linesEl: HTMLElement,\n levelEl: HTMLElement,\n comboEl: HTMLElement,\n): void {\n // Score numbers\n scoreEl.textContent = state.score.toLocaleString();\n linesEl.textContent = state.lines.toString();\n levelEl.textContent = state.level.toString();\n comboEl.textContent = state.combo > 0 ? `${state.combo}x COMBO` : '';\n\n // Hold canvas\n drawMiniPiece(holdEl as HTMLCanvasElement, state.held, state.holdUsed);\n\n // Next canvases\n const nextCanvases = nextEl.querySelectorAll<HTMLCanvasElement>('canvas');\n state.next.slice(0, 5).forEach((type, i) => {\n if (nextCanvases[i]) drawMiniPiece(nextCanvases[i], type, false);\n });\n}\n\nfunction drawMiniPiece(canvas: HTMLCanvasElement, type: PieceType | null, dim: boolean): void {\n const ctx = canvas.getContext('2d')!;\n const W = canvas.width;\n const H = canvas.height;\n ctx.clearRect(0, 0, W, H);\n\n if (!type) return;\n\n const def = getDef(type);\n const shape = getShape(type, 0);\n const size = PANEL_CELL;\n\n // Find bounding box\n let minR = shape.length, maxR = 0, minC = shape[0].length, maxC = 0;\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n minR = Math.min(minR, r); maxR = Math.max(maxR, r);\n minC = Math.min(minC, c); maxC = Math.max(maxC, c);\n }\n }\n }\n const bW = (maxC - minC + 1) * size;\n const bH = (maxR - minR + 1) * size;\n const ox = Math.floor((W - bW) / 2) - minC * size;\n const oy = Math.floor((H - bH) / 2) - minR * size;\n\n for (let r = 0; r < shape.length; r++) {\n for (let c = 0; c < shape[r].length; c++) {\n if (shape[r][c]) {\n drawCell(ctx, c, r, def.color, def.highlight, def.shadow, size,\n dim ? 0.35 : 1, ox, oy);\n }\n }\n }\n}\n\n// ─── Colour utilities ─────────────────────────────────────────────────────────\n\nfunction parseHex(hex: string): [number,number,number] {\n const n = parseInt(hex.replace('#', ''), 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction lighten(hex: string, amt: number): string {\n const [r,g,b] = parseHex(hex);\n return `rgb(${Math.min(255,r+amt)},${Math.min(255,g+amt)},${Math.min(255,b+amt)})`;\n}\n\nfunction darken(hex: string, amt: number): string {\n const [r,g,b] = parseHex(hex);\n return `rgb(${Math.max(0,r-amt)},${Math.max(0,g-amt)},${Math.max(0,b-amt)})`;\n}\n\n// Unused – kept for reference\nexport function renderUI(_state: GameState): void { /* side-panels handled separately */ }\nEOF","description":"Create rendering module"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2827,"cache_read_input_tokens":12155,"cache_creation":{"ephemeral_5m_input_tokens":2827,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"3482c02d-a734-4ac9-8f85-5dff8fe19415"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01PH8AAmvfkYyzjLSCpGGktV","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"c4f4e242-9ff3-480f-bf49-f157bc6ad09e","timestamp":"2026-04-03T20:59:08.784Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014vc812vqD8f59hYJJRWRxA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01W2FNs22xaNUyC7U1hLg2Ss","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/src/main.ts << 'EOF'\nimport {\n DAS_DELAY, ARR_INTERVAL, LOCK_DELAY, MAX_LOCK_RESETS,\n} from './constants.js';\nimport type { GameState } from './types.js';\nimport {\n createInitialState, levelSpeed,\n actionMoveLeft, actionMoveRight, actionSoftDrop, actionHardDrop,\n actionRotateCW, actionRotateCCW, actionRotate180,\n actionGravity, actionLock, actionHold,\n type ActionResult,\n} from './game.js';\nimport { initRenderer, render, renderSidePanels } from './renderer.js';\n\n// ─── DOM references ───────────────────────────────────────────────────────────\n\nconst boardCanvas = document.getElementById('board') as HTMLCanvasElement;\nconst uiCanvas = document.getElementById('ui') as HTMLCanvasElement;\nconst holdCanvas = document.getElementById('hold-canvas') as HTMLCanvasElement;\nconst nextEl = document.getElementById('next-list') as HTMLElement;\nconst scoreEl = document.getElementById('score-val') as HTMLElement;\nconst linesEl = document.getElementById('lines-val') as HTMLElement;\nconst levelEl = document.getElementById('level-val') as HTMLElement;\nconst comboEl = document.getElementById('combo-val') as HTMLElement;\n\n// ─── Game state ───────────────────────────────────────────────────────────────\n\nlet state: GameState = createInitialState();\n\n// Gravity / lock timers\nlet gravityTimer: ReturnType<typeof setTimeout> | null = null;\nlet lockTimer: ReturnType<typeof setTimeout> | null = null;\nlet lockResets = 0;\n\n// DAS / ARR\nlet dasTimer: ReturnType<typeof setTimeout> | null = null;\nlet arrTimer: ReturnType<typeof setInterval> | null = null;\nlet dasAction: (() => void) | null = null;\n\n// ─── Init ─────────────────────────────────────────────────────────────────────\n\ninitRenderer(boardCanvas, uiCanvas);\nrenderFrame();\n\n// ─── Render loop ──────────────────────────────────────────────────────────────\n\nfunction renderFrame(): void {\n render(state);\n renderSidePanels(state, holdCanvas, nextEl, scoreEl, linesEl, levelEl, comboEl);\n requestAnimationFrame(renderFrame);\n}\n\n// ─── Game loop ────────────────────────────────────────────────────────────────\n\nfunction scheduleGravity(): void {\n clearTimeout(gravityTimer ?? undefined);\n gravityTimer = setTimeout(gravityTick, levelSpeed(state.level));\n}\n\nfunction cancelGravity(): void {\n clearTimeout(gravityTimer ?? undefined);\n gravityTimer = null;\n}\n\nfunction gravityTick(): void {\n if (state.status !== 'playing') return;\n const result = actionGravity(state);\n if (result.type === 'ok') {\n state = result.state;\n cancelLock();\n scheduleGravity();\n } else {\n // Piece can't move down → start lock delay\n scheduleLock();\n }\n}\n\nfunction scheduleLock(): void {\n if (lockTimer !== null) return; // already counting\n lockTimer = setTimeout(forceLock, LOCK_DELAY);\n}\n\nfunction cancelLock(): void {\n clearTimeout(lockTimer ?? undefined);\n lockTimer = null;\n lockResets = 0;\n}\n\nfunction resetLock(): void {\n if (lockResets >= MAX_LOCK_RESETS) return;\n clearTimeout(lockTimer ?? undefined);\n lockTimer = setTimeout(forceLock, LOCK_DELAY);\n lockResets++;\n}\n\nfunction forceLock(): void {\n lockTimer = null;\n if (state.status !== 'playing') return;\n applyResult(actionLock(state));\n}\n\n// ─── Apply action results ─────────────────────────────────────────────────────\n\nfunction applyResult(result: ActionResult): void {\n if (result.type === 'noop') return;\n\n if (result.type === 'gameover') {\n state = result.state;\n cancelGravity();\n cancelLock();\n return;\n }\n\n if (result.type === 'locked') {\n state = result.state;\n cancelLock();\n scheduleGravity();\n if (result.linesCleared > 0) flashLines();\n return;\n }\n\n // 'ok'\n state = result.state;\n}\n\n// ─── Keyboard handling ────────────────────────────────────────────────────────\n\nfunction startDAS(action: () => void): void {\n stopDAS();\n action();\n dasAction = action;\n dasTimer = setTimeout(() => {\n arrTimer = setInterval(() => { if (dasAction) dasAction(); }, ARR_INTERVAL);\n }, DAS_DELAY);\n}\n\nfunction stopDAS(): void {\n clearTimeout(dasTimer ?? undefined);\n clearInterval(arrTimer ?? undefined);\n dasTimer = null;\n arrTimer = null;\n dasAction = null;\n}\n\nconst heldKeys = new Set<string>();\n\nwindow.addEventListener('keydown', (e: KeyboardEvent) => {\n if (heldKeys.has(e.code)) return; // prevent re-fire on key-hold\n heldKeys.add(e.code);\n\n // Start / restart\n if (e.code === 'Enter') {\n if (state.status === 'idle' || state.status === 'gameover') {\n startGame();\n }\n return;\n }\n\n // Pause\n if (e.code === 'Escape' || e.code === 'KeyP') {\n if (state.status === 'playing') {\n state = { ...state, status: 'paused' };\n cancelGravity();\n } else if (state.status === 'paused') {\n state = { ...state, status: 'playing' };\n scheduleGravity();\n }\n return;\n }\n\n if (state.status !== 'playing') return;\n\n switch (e.code) {\n case 'ArrowLeft':\n case 'KeyA':\n e.preventDefault();\n startDAS(() => {\n const r = actionMoveLeft(state);\n if (r.type === 'ok') { state = r.state; afterMove(); }\n });\n break;\n\n case 'ArrowRight':\n case 'KeyD':\n e.preventDefault();\n startDAS(() => {\n const r = actionMoveRight(state);\n if (r.type === 'ok') { state = r.state; afterMove(); }\n });\n break;\n\n case 'ArrowDown':\n case 'KeyS':\n e.preventDefault();\n startDAS(() => {\n const r = actionSoftDrop(state);\n if (r.type === 'ok') {\n state = r.state;\n cancelGravity();\n scheduleGravity();\n resetLockOnMove();\n }\n // if noop → piece landed, lock timer already running\n });\n break;\n\n case 'ArrowUp':\n case 'KeyW':\n case 'KeyX':\n e.preventDefault();\n applyRotate(actionRotateCW(state));\n break;\n\n case 'KeyZ':\n case 'ControlLeft':\n case 'ControlRight':\n e.preventDefault();\n applyRotate(actionRotateCCW(state));\n break;\n\n case 'KeyA': break; // already handled above\n\n case 'Space':\n e.preventDefault();\n cancelGravity();\n cancelLock();\n applyResult(actionHardDrop(state));\n if (state.status === 'playing') scheduleGravity();\n break;\n\n case 'ShiftLeft':\n case 'ShiftRight':\n case 'KeyC': {\n e.preventDefault();\n const r = actionHold(state);\n applyResult(r);\n if (state.status === 'playing') {\n cancelLock();\n cancelGravity();\n scheduleGravity();\n }\n break;\n }\n\n case 'KeyR':\n e.preventDefault();\n applyRotate(actionRotate180(state));\n break;\n }\n});\n\nwindow.addEventListener('keyup', (e: KeyboardEvent) => {\n heldKeys.delete(e.code);\n if (\n e.code === 'ArrowLeft' || e.code === 'ArrowRight' ||\n e.code === 'ArrowDown' || e.code === 'KeyA' ||\n e.code === 'KeyD' || e.code === 'KeyS'\n ) {\n stopDAS();\n }\n});\n\nfunction afterMove(): void {\n // If piece is on ground, reset lock timer so player can slide\n resetLockOnMove();\n}\n\nfunction resetLockOnMove(): void {\n if (lockTimer !== null) resetLock();\n}\n\nfunction applyRotate(result: ActionResult): void {\n if (result.type === 'ok') {\n state = result.state;\n if (lockTimer !== null) resetLock();\n }\n}\n\n// ─── Start / restart ──────────────────────────────────────────────────────────\n\nfunction startGame(): void {\n cancelGravity();\n cancelLock();\n stopDAS();\n state = { ...createInitialState(), status: 'playing' };\n scheduleGravity();\n}\n\n// ─── Flash effect for line clears (visual feedback) ───────────────────────────\n\nfunction flashLines(): void {\n boardCanvas.classList.add('flash');\n setTimeout(() => boardCanvas.classList.remove('flash'), 180);\n}\nEOF","description":"Create main game controller / entry point"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":3432,"cache_read_input_tokens":14982,"cache_creation":{"ephemeral_5m_input_tokens":3432,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"c2d45111-e361-4149-be95-b50ca608f392"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01W2FNs22xaNUyC7U1hLg2Ss","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"bc9991ab-8120-44f2-93a7-4fa2eea7fb81","timestamp":"2026-04-03T20:59:41.774Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SLNJs8XNVwTDHmWDobVw3M","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Psr3cjWKiihPzVtTfzjSxE","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/styles/main.css << 'EOF'\n/* ─── Reset & base ─────────────────────────────────────────────────────────── */\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\nbody {\n background: #07071a;\n color: #e0e0e0;\n font-family: 'Segoe UI', 'Helvetica Neue', Arial, sans-serif;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n padding: 20px 12px 32px;\n user-select: none;\n}\n\nh1 {\n font-size: 2.4rem;\n font-weight: 900;\n letter-spacing: 0.18em;\n color: #00e5ff;\n text-shadow: 0 0 18px #00e5ff88, 0 2px 4px #000;\n margin-bottom: 18px;\n}\n\n/* ─── Layout ─────────────────────────────────────────────────────────────── */\n.game-wrapper {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n}\n\n/* ─── Board ──────────────────────────────────────────────────────────────── */\n.board-container {\n position: relative;\n border: 2px solid #1a2a3a;\n border-radius: 4px;\n overflow: hidden;\n box-shadow: 0 0 32px #000a, 0 0 12px #00e5ff22;\n}\n\n#board, #ui {\n display: block;\n}\n\n#ui {\n position: absolute;\n top: 0; left: 0;\n pointer-events: none;\n}\n\n/* flash animation on line clear */\n@keyframes flash-anim {\n 0% { filter: brightness(1); }\n 40% { filter: brightness(2.2) saturate(1.8); }\n 100% { filter: brightness(1); }\n}\n#board.flash { animation: flash-anim 0.18s ease-out; }\n\n/* ─── Side panels ────────────────────────────────────────────────────────── */\n.side-panel {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 110px;\n}\n\n.side-panel.right {\n min-width: 120px;\n}\n\n.panel-box {\n background: #0d1225;\n border: 1px solid #1a2a45;\n border-radius: 6px;\n padding: 10px 10px 10px;\n}\n\n.panel-label {\n font-size: 0.65rem;\n font-weight: 700;\n letter-spacing: 0.14em;\n color: #5a7fa0;\n text-transform: uppercase;\n margin-bottom: 6px;\n}\n\n.panel-value {\n font-size: 1.5rem;\n font-weight: 800;\n color: #fff;\n letter-spacing: 0.04em;\n}\n\n.panel-value.large {\n font-size: 1.9rem;\n}\n\n/* Hold / Next canvases */\n#hold-canvas {\n display: block;\n}\n\n.next-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n#combo-val {\n min-height: 1.2em;\n font-size: 0.85rem;\n font-weight: 800;\n color: #ffe000;\n letter-spacing: 0.05em;\n text-shadow: 0 0 8px #ffe00077;\n}\n\n/* ─── Controls legend ─────────────────────────────────────────────────────── */\n.controls {\n margin-top: 18px;\n display: flex;\n flex-wrap: wrap;\n gap: 6px 18px;\n justify-content: center;\n max-width: 640px;\n}\n\n.ctrl-item {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 0.78rem;\n color: #8aaabb;\n}\n\nkbd {\n background: #1a2a3a;\n border: 1px solid #334;\n border-bottom: 2px solid #556;\n border-radius: 4px;\n padding: 1px 6px;\n font-family: inherit;\n font-size: 0.75rem;\n color: #cde;\n white-space: nowrap;\n}\n\n/* ─── Responsive ─────────────────────────────────────────────────────────── */\n@media (max-width: 520px) {\n h1 { font-size: 1.7rem; }\n .game-wrapper { gap: 8px; }\n .side-panel { min-width: 80px; }\n .panel-value { font-size: 1.1rem; }\n .panel-value.large { font-size: 1.4rem; }\n}\nEOF","description":"Create CSS styles"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2632,"cache_read_input_tokens":18414,"cache_creation":{"ephemeral_5m_input_tokens":2632,"ephemeral_1h_input_tokens":0},"output_tokens":37,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"3f69e603-5d7d-4497-ac88-c914f02d9079"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Psr3cjWKiihPzVtTfzjSxE","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"44288281-723f-4951-b62e-20ee63387f0f","timestamp":"2026-04-03T21:00:00.754Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HHE22mU2hg1ftCuA7e33mt","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017qc1qxGyqEV7VzdoUpVHzh","name":"Bash","input":{"command":"cat > /tmp/loop-bench-f6z2ybi3/index.html << 'EOF'\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <link rel=\"stylesheet\" href=\"styles/main.css\" />\n</head>\n<body>\n <h1>TETRIS</h1>\n\n <div class=\"game-wrapper\">\n\n <!-- ── Left panel: HOLD + controls info ─────────────────────────── -->\n <div class=\"side-panel\">\n <div class=\"panel-box\">\n <div class=\"panel-label\">Hold</div>\n <canvas id=\"hold-canvas\" width=\"96\" height=\"72\"></canvas>\n </div>\n\n <div class=\"panel-box\">\n <div class=\"panel-label\">Líneas</div>\n <div class=\"panel-value\" id=\"lines-val\">0</div>\n </div>\n\n <div class=\"panel-box\">\n <div class=\"panel-label\">Nivel</div>\n <div class=\"panel-value\" id=\"level-val\">1</div>\n </div>\n\n <div class=\"panel-box\" style=\"min-height:36px;\">\n <div id=\"combo-val\"></div>\n </div>\n </div>\n\n <!-- ── Board ──────────────────────────────────────────────────────── -->\n <div class=\"board-container\">\n <canvas id=\"board\"></canvas>\n <canvas id=\"ui\"></canvas>\n </div>\n\n <!-- ── Right panel: SCORE + NEXT ─────────────────────────────────── -->\n <div class=\"side-panel right\">\n <div class=\"panel-box\">\n <div class=\"panel-label\">Puntaje</div>\n <div class=\"panel-value large\" id=\"score-val\">0</div>\n </div>\n\n <div class=\"panel-box\">\n <div class=\"panel-label\">Siguiente</div>\n <div class=\"next-list\" id=\"next-list\">\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n <canvas width=\"96\" height=\"72\"></canvas>\n </div>\n </div>\n </div>\n\n </div><!-- .game-wrapper -->\n\n <!-- ── Controls legend ──────────────────────────────────────────────── -->\n <div class=\"controls\">\n <div class=\"ctrl-item\"><kbd>←</kbd><kbd>→</kbd> Mover</div>\n <div class=\"ctrl-item\"><kbd>↑</kbd> / <kbd>X</kbd> Rotar CW</div>\n <div class=\"ctrl-item\"><kbd>Z</kbd> / <kbd>Ctrl</kbd> Rotar CCW</div>\n <div class=\"ctrl-item\"><kbd>R</kbd> Rotar 180°</div>\n <div class=\"ctrl-item\"><kbd>↓</kbd> Bajar suave</div>\n <div class=\"ctrl-item\"><kbd>Space</kbd> Hard drop</div>\n <div class=\"ctrl-item\"><kbd>C</kbd> / <kbd>Shift</kbd> Hold</div>\n <div class=\"ctrl-item\"><kbd>P</kbd> / <kbd>Esc</kbd> Pausa</div>\n <div class=\"ctrl-item\"><kbd>Enter</kbd> Iniciar / Reiniciar</div>\n </div>\n\n <script src=\"dist/bundle.js\" type=\"module\"></script>\n</body>\n</html>\nEOF","description":"Create HTML entry point"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1448,"cache_read_input_tokens":21046,"cache_creation":{"ephemeral_5m_input_tokens":1448,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","uuid":"f696a553-a6b8-439b-ad3f-beabda08b2c1"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":332803,"duration_api_ms":318878,"is_error":true,"num_turns":14,"stop_reason":"tool_use","session_id":"a19eeea7-bd17-438e-84c9-2e731ea04fb0","total_cost_usd":0.50546745,"usage":{"input_tokens":18,"cache_creation_input_tokens":16805,"cache_read_input_tokens":124393,"output_tokens":25191,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":16805},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":19,"outputTokens":26222,"cacheReadInputTokens":145439,"cacheCreationInputTokens":18253,"webSearchRequests":0,"costUSD":0.50546745,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9d75aaa1-03a7-499c-9344-f0d43a123f0c","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"success","is_error":false,"duration_ms":274235,"duration_api_ms":272436,"num_turns":17,"result":"El juego está completo y listo. Aquí un resumen de todo lo que se construyó:\n\n---\n\n## 🎮 Tetris — Resumen del proyecto\n\n### Archivos creados\n\n| Archivo | Descripción |\n|---|---|\n| `src/tetris.ts` | Código fuente TypeScript (~675 líneas) |\n| `dist/tetris.js` | Bundle compilado listo para el navegador (18 KB) |\n| `index.html` | Página completa con layout y estilos CSS |\n| `tsconfig.json` | Configuración de TypeScript |\n\n### Mecánicas implementadas\n\n**Gameplay estándar**\n- ✅ Las 7 piezas tetrominó (I, O, T, S, Z, J, L) con sus colores clásicos\n- ✅ Rotación con sistema **SRS** (*Super Rotation System*) + wall-kicks correctos para cada pieza\n- ✅ **Pieza fantasma** (ghost piece) que muestra dónde caerá\n- ✅ Eliminación de líneas (1–4 a la vez)\n- ✅ **Hold** — guardar una pieza para usarla después\n\n**Puntuación**\n- ✅ 100 / 300 / 500 / 800 pts según líneas limpias × nivel\n- ✅ +1 pt por cada celda de *soft drop*, +2 pts/celda de *hard drop*\n- ✅ Nivel sube cada 10 líneas\n\n**Velocidad creciente**\n- ✅ Nivel 1: 800 ms por bajada automática → Nivel 20+: mínimo 50 ms\n\n### Controles de teclado\n\n| Tecla | Acción |\n|---|---|\n| `◄ ►` | Mover izquierda / derecha |\n| `▲` | Rotar horario (CW) |\n| `Z` | Rotar antihorario (CCW) |\n| `▼` | Bajar suave (+1 pt) |\n| `Espacio` | Caída dura (+2 pts/celda) |\n| `C` / `Shift` | Guardar / intercambiar pieza (hold) |\n| `P` | Pausar / reanudar |\n| `Enter` | Iniciar / reiniciar |\n\n### Cómo ejecutar\n\n```bash\n# Abrir directamente en el navegador:\nopen index.html\n\n# O recompilar TypeScript con:\nnpm run build\n\n# Verificar tipos sin compilar:\nnpm run typecheck\n```","stop_reason":"end_turn","session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","total_cost_usd":0.4678491000000001,"usage":{"input_tokens":21,"cache_creation_input_tokens":23116,"cache_read_input_tokens":211487,"output_tokens":21177,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23116},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":21,"outputTokens":21177,"cacheReadInputTokens":211487,"cacheCreationInputTokens":23116,"webSearchRequests":0,"costUSD":0.4678491000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"95a7a642-b298-4ed4-b833-0e0ec8c8d43e"} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,262 +0,0 @@ -{ - "structural": { - "pass": true, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "npm run build completed successfully" - }, - { - "name": "typescript_compiles", - "pass": true, - "detail": "tsc --noEmit passed" - } - ], - "score": 1.0 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": true - }, - "performance": { - "bundle_size_bytes": 18123, - "size_under_512kb": true - }, - "score": 0.67 - }, - "code_analysis": { - "files": { - "total": 6, - "code": 3, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1453, - "dependencies": { - "production": 0, - "dev": 6, - "total": 6 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 18, - "excessive": false - }, - "function_length": { - "count": 78, - "average": 7.2, - "max": 32, - "long_functions": 0 - }, - "max_nesting_depth": 9, - "global_declarations": 9, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 99.6, - "camel_case": 443, - "snake_case": 2 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 61, - "source_lines": 1066, - "ratio_pct": 5.7 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 4 - }, - "duplication_percentage": 0.0, - "score": 0.9 - }, - "transcript_analysis": { - "total_events": 52, - "tool_calls": { - "total": 16, - "bash": 12, - "write": 0, - "edit": 1, - "read": 3 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 7, - "text_blocks": 9, - "productivity_ratio": 1.0, - "self_tested": true, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.63, - "total": 16, - "passed": 10, - "failed": 6, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 40, - "height": 80 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "click_canvas", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via click_canvas" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "visual change detected after hard drop" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "visual change suggests new piece spawned" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "game still responding after 10 piece drops" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": true, - "detail": "score changed from 196 to 264" - }, - { - "name": "game_over", - "pass": false, - "detail": "could not trigger or detect game over" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 78 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 10, - "failed": 6, - "score": 0.63 - }, - "gameplay": { - "pieces_placed": 188, - "lines_cleared": 1, - "max_score_observed": 36, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 29 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 3, - "pass": false - } - } - }, - "score": 0.722 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,128 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 40, - "height": 80 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "click_canvas", - "score_element_found": true - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via click_canvas" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "visual change detected after hard drop" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "visual change suggests new piece spawned" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "game still responding after 10 piece drops" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": true, - "detail": "score changed from 196 to 264" - }, - { - "name": "game_over", - "pass": false, - "detail": "could not trigger or detect game over" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 78 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 10, - "failed": 6, - "score": 0.63 - }, - "gameplay": { - "pieces_placed": 188, - "lines_cleared": 1, - "max_score_observed": 36, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 29 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 3, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "es", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:56:36.343507+00:00", - "wall_time_seconds": 274, - "exit_code": 0, - "completed_at": "2026-04-03T21:01:15.715313+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,52 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Construye un juego de Tetris jugable que funcione en un navegador web. Debe tener todas las mecanicas estandar: rotacion de piezas, eliminacion de lineas, puntuacion y velocidad creciente. Usa controles de teclado para el movimiento y la rotacion.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-sdedmh6w","session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"c23bef8c-f5e2-43c1-af02-9ebdfc2c5bbb","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_016uHKahv65vpZc922nKxDvy","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a web browser. It should have all standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation. Use TypeScript.\n\nLet me create a complete Tetris game. I'll structure it as:\n1. `index.html` - The main HTML file\n2. `src/tetris.ts` - The TypeScript source\n3. `style.css` - Styling\n4. `tsconfig.json` - TypeScript configuration\n\nOr alternatively, I can create a single-file solution with inline TypeScript compiled, or use a build setup.\n\n\nI'll go with a multi-file setup using TypeScript. I need to set up the project structure with an HTML canvas for rendering, configure TypeScript compilation, and implement the core game logic including piece definitions, board state management, collision detection, and scoring.\n\nWriting the game logic... Defining the remaining Tetris pieces...\n\nNow I'm planning the full implementation with a canvas renderer, tracking the board state as a 2D array, managing the current piece with position and rotation, and handling game mechanics like scoring, level progression, and game states. I'll implement the Super Rotation System for proper wall kick behavior and write out the complete game logic.\n\nSetting up the project structure with HTML, CSS, and TypeScript files... Building the game interface...\n\nNow I'm moving into the TypeScript implementation and need to think through the rotation system carefully. The standard SRS wall kick offsets are crucial for getting the piece rotations to feel right, especially for the J, L, S, T, and Z pieces. I'm mapping out the specific offset values for each rotation state transition to ensure pieces can rotate smoothly even when they're near walls or the floor. Finishing up the I piece rotation offsets, and I'm realizing the SRS system uses column and row coordinates rather than the typical x-y format I was working with.\n\nI need to be careful about the coordinate system mismatch—the SRS defines offsets with positive y pointing upward, but my canvas has positive y pointing downward, so I'll need to flip those values when implementing.\n\nNow I'm planning out the full project structure with separate files for HTML, styles, TypeScript game logic, and configuration files, then I'll write the complete implementation.\n\nFor rendering, I'm setting up two canvases—one for the main 10×20 playfield and separate preview areas for the next piece and hold piece. I'll draw the background grid, placed pieces from the board state, a ghost piece showing the landing position, the active piece, and line clear animations.\n\nWriting the TypeScript implementation... Defining game constants and piece configurations... Defining the remaining Tetris piece rotations... Now I'm defining the wall kick offsets for each rotation transition, mapping the sequence of adjustment attempts that let pieces slide into position when they'd normally collide with walls or other blocks. Defining wall kick offsets...\n\nI need to reconsider how the SRS kick data translates to my coordinate system. The standard SRS uses y-up coordinates, but my game uses y-down, so I'll need to negate the y values when applying these kicks. Let me trace through the conversion carefully to make sure I'm getting the offsets right. I'm looking at the wall kick data from the Tetris Wiki for the standard rotation system—specifically the offsets for J, L, S, T, and Z pieces when rotating from one state to another, with the test cases numbered 1-5 representing successive kick attempts. I'm converting these rotation kick offsets from standard math coordinates to game coordinates by flipping the y-axis, then continuing to map out the remaining rotation states and their corresponding offset patterns. I'm getting tangled up in the coordinate transformations for wall kicks across different rotation states. Rather than trying to map out every offset manually, I'll implement a simpler approach that just tests whether the rotated piece fits at each potential kick position and uses the first valid one. Defining wall kick offsets... Defining wall kick offsets for the I-piece... I'm converting the remaining wall kick data to the y-down coordinate system by negating all the y-values, then organizing the rotation transitions systematically. I'm working through the coordinate transformations for the rotation states, converting between y-up and y-down coordinate systems. For the 2→3 transition, I've confirmed the wall kick offsets in y-down coordinates, and now I'm converting the 3→2 transition by flipping the y-values accordingly. So the rotation mappings for JLSTZ pieces in y-down coordinates are: 0→1 uses the offset (-1,0) (-1,-1) (0,+2) (-1,+2), and 1→0 mirrors that with (+1,0) (+1,+1) (0,-2) (+1,-2).","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":519,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":519,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"2adfaf6b-4dbd-4126-aafb-56c88eae6908"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012Lr75GtpSSHEQBNYKq7uxA","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a web browser using TypeScript. Let me create a complete Tetris implementation with:\n\n1. All standard pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys + space)\n\nI'll create a project with:\n- `index.html` - The main HTML file\n- `src/tetris.ts` - The TypeScript source\n- A build setup (maybe using esbuild or just inline TypeScript with a tsconfig)\n\n\n- `package.json`, `tsconfig.json`, and a build script\n\nNow I'm planning out the core game structure with board dimensions, block sizing, piece definitions, and color mappings for each tetromino type.\n\nI'll define the game state to track the board grid, current and next pieces, score, level, lines cleared, and game status flags.\n\nFor controls, I'm mapping keyboard inputs to standard Tetris actions like movement, rotation, dropping, and game management.\n\nI think the cleanest approach is to compile everything into a single self-contained JavaScript file that runs in the browser.\n\nDefining the Tetromino pieces... I'm noting the scoring system—single through tetris lines multiply by level, and the drop speed accelerates as you progress, starting at one second and getting faster with each level. Now I'm setting up the project structure with TypeScript configuration and the necessary files to build out the full game implementation.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4760,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"be096dff-c5d3-4af5-a97f-9883c4cf61ad"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_012Lr75GtpSSHEQBNYKq7uxA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Wp1NjVYDGCZseECEvJb2vK","name":"Bash","input":{"command":"ls /tmp/loop-bench-sdedmh6w","description":"List files in working directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4760,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"331ddd5e-848a-40ee-a89b-00cfa06984e4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Wp1NjVYDGCZseECEvJb2vK","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"4bfb4ca4-b670-477d-8a27-c9c79e696fd3","timestamp":"2026-04-03T20:58:36.419Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01StqN99eMkYyv843NxGBJTd","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01NcJpw8Y882Z8F2FbKiUzrg","name":"Read","input":{"file_path":"/tmp/loop-bench-sdedmh6w/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1310,"cache_read_input_tokens":4760,"cache_creation":{"ephemeral_5m_input_tokens":1310,"ephemeral_1h_input_tokens":0},"output_tokens":44,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"3547afea-e4b1-4e2d-a6a3-7c455693f6c5"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01NcJpw8Y882Z8F2FbKiUzrg","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-sdedmh6w\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"1c6a79ce-2c25-426a-a144-40dd625ae3aa","timestamp":"2026-04-03T20:58:38.347Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-sdedmh6w/package.json","content":"{\n \"name\": \"loop-bench-sdedmh6w\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GU6tVNotDmiBeABA5Kv1ve","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"I can use TypeScript and esbuild (or just tsc) to compile. Let me check what's available in node_modules.\n\nI have TypeScript available. Let me set up the project properly:\n1. Add esbuild as a dev dependency, or use tsc with a proper configuration\n2. Create the TypeScript source\n3. Create the HTML file\n\nActually, since TypeScript is already installed, let me just use `tsc` to compile and create the HTML file.\n\nLet me create:\n1. `tsconfig.json` - TypeScript config\n2. `src/tetris.ts` - Main game code\n\n\n3. `index.html` - HTML file that loads the compiled JS\n\nThen I'll compile everything with tsc and write out the complete Tetris game.","signature":"Eq8GClsIDBgCKkDGSC42Kb/eKV7KTvKB761RDycM03ps9Fs5aI6Mr0tc2gV3PFL3SMMD/WHTRlTF/4RK0eagj5tQ/eoMe0dQxKjmMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgwD+gRA4JCbWsiHyGMaDBnQRI5ijLNnPTt6eyIw2bc/KMkfZq90MB5DOGngfgs0ypngK8V1w1/tuEYRS+dX6zH2JZkDB7+1G4Bghi3oKoEFhkkgN3V/QIEr8a7xW0RWoALb7npAp0RBHmMI495OR7loupnAbefp2WQ+GNceZ+2YoryCi7WJpAis/U1WDsnr3Af8/UPmGB3McoFcg6daC7QVjwMYgf6TpxjdOMwah9ddw1KXNhEzuY7gPBmvTJK/ofnaB07jMqtym1IQ/YP9buxRVi5YYjVNVXiRicqkuQO+2xqTMm3aZgo5UErXLk8KxUaS8UvqF2Ru496rIEapxNy/SARgLClPlKzAihqnyh6ay27O0qpFJDgmBXlHgxx6cpC31cb0XUwtWqn/P7Yt7xiiHKcpXIHhcJmRhMQDIFHdPxo8va1qOKtEacDgtAkToIdNs079edaMoVjAb1oEm9AdP0Wif/PpmKvU04WAu/JItgh7QmaVoVEqZ8rtUS1dajhgCkmDg8YXacPQAAaWLKzu6cXGLyYBaB6ChAQrr7H4KKVLaeAd7vebfxb15mEJVQQQbDEiuGmHolO6OQL4QooYQDKKyam+NpQfX5k/wmJXsmwcWj1tCfdFesOZfOraVGe8qB7cG2x/DJIPJyx3Opz8mT2/VGGG2+sIuExIcUrLge9DAG1rJGzu8KR2RoxkrnaenIySKZPj7gMvl+tuK9MPfqAlotGyvLUlllV/vHrDN4yAgyLLcRa5vvAPKMNBQHQR8w7uhvUPaugv4zzmiOkLcObHGXqOkMz8z1bQEI/iL1s6C3sR4VQ5liViW+xuCO+d0UNAmsPYmE1FVC3IJZBY8WfRNs/tG4oz9R9y2lsNtDCM+AY5eLjtrNOp4cM9oXePbhy79JVWLZiCBvnAqh6IMw2JhsgwTbi3VNsBsR+EkNXdRnDkdaam1dOba6tv2uYYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":6070,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"cb229d7f-5e0f-4ee9-b69f-2c6f49d49352"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GU6tVNotDmiBeABA5Kv1ve","type":"message","role":"assistant","content":[{"type":"text","text":"Bien, hay TypeScript disponible. Voy a crear el juego completo."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":6070,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"9a415707-b600-4e26-9132-55c5c8451356"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GU6tVNotDmiBeABA5Kv1ve","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01MUnxiibRvVoMeR1L6Z24uu","name":"Bash","input":{"command":"ls /tmp/loop-bench-sdedmh6w/node_modules | grep -E \"^(esbuild|typescript)\" ","description":"Check available build tools"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":6070,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"30e175ba-0689-4528-a6a1-782435208fe9"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01MUnxiibRvVoMeR1L6Z24uu","type":"tool_result","content":"typescript","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"190b26bb-547b-4fbd-9609-f605187f02c5","timestamp":"2026-04-03T20:58:44.567Z","tool_use_result":{"stdout":"typescript","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GU6tVNotDmiBeABA5Kv1ve","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01G6V1Ds8c3agHAHMRrze6EP","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-sdedmh6w/src","description":"Create src directory"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":395,"cache_read_input_tokens":6070,"cache_creation":{"ephemeral_5m_input_tokens":395,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"be14435c-a20c-45dc-bce0-215a061d4b8e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01G6V1Ds8c3agHAHMRrze6EP","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"a324cd6c-8bc5-4583-aacb-db934ec64ad1","timestamp":"2026-04-03T20:58:44.825Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_016vEznfyRNCVmBBxWhiSce4","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01QKVMtuEhNGr24HLiFGq4DU","name":"Bash","input":{"command":"npm install --save-dev esbuild 2>&1 | tail -5","description":"Install esbuild for bundling"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":450,"cache_read_input_tokens":6465,"cache_creation":{"ephemeral_5m_input_tokens":450,"ephemeral_1h_input_tokens":0},"output_tokens":62,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"1d28c83c-d52c-4814-bae4-09a522b7cb15"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01QKVMtuEhNGr24HLiFGq4DU","type":"tool_result","content":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"c88ccc6f-11dc-4ab9-9660-220d72186e7b","timestamp":"2026-04-03T20:58:47.528Z","tool_use_result":{"stdout":"17 packages are looking for funding\n run `npm fund` for details\n\nfound 0 vulnerabilities","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_013u9L4RGAg4fzNWH7zJYL5Z","type":"message","role":"assistant","content":[{"type":"text","text":"Ahora escribo el código TypeScript completo del juego:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":577,"cache_read_input_tokens":6465,"cache_creation":{"ephemeral_5m_input_tokens":577,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"e9fed068-6204-4fe0-8417-34b4469b0559"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_013u9L4RGAg4fzNWH7zJYL5Z","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01WVczit1b6PnuuLn7fXhxA5","name":"Bash","input":{"command":"cat > /tmp/loop-bench-sdedmh6w/src/tetris.ts << 'TYPESCRIPT_EOF'\n// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 32;\nconst PREVIEW_BLOCK = 24;\n\n// Points per line clear (multiplied by level)\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n\n// Drop interval in ms per level (level 1 = 800ms, decreases until level 20 = 50ms)\nfunction dropInterval(level: number): number {\n return Math.max(50, 800 - (level - 1) * 40);\n}\n\n// ─── Tetromino Definitions ────────────────────────────────────────────────────\n\ntype Color = string;\ntype Matrix = number[][];\n\ninterface TetrominoDef {\n shape: Matrix;\n color: Color;\n}\n\nconst PIECES: Record<string, TetrominoDef> = {\n I: {\n color: \"#00cfcf\",\n shape: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n },\n O: {\n color: \"#cfcf00\",\n shape: [\n [1, 1],\n [1, 1],\n ],\n },\n T: {\n color: \"#9f00cf\",\n shape: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n S: {\n color: \"#00cf00\",\n shape: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n },\n Z: {\n color: \"#cf0000\",\n shape: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n },\n J: {\n color: \"#0000cf\",\n shape: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n L: {\n color: \"#cf7f00\",\n shape: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n};\n\nconst PIECE_KEYS = Object.keys(PIECES);\n\n// Wall-kick offsets for J/L/T/S/Z (SRS)\nconst KICKS_JLTSZ: [number, number][][] = [\n [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], // 0→1\n [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], // 1→2\n [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], // 2→3\n [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], // 3→0\n];\n\n// Wall-kick offsets for I\nconst KICKS_I: [number, number][][] = [\n [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], // 0→1\n [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], // 1→2\n [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], // 2→3\n [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], // 3→0\n];\n\n// ─── Piece Class ──────────────────────────────────────────────────────────────\n\nclass Piece {\n key: string;\n color: Color;\n matrix: Matrix;\n x: number;\n y: number;\n rotation: number; // 0..3\n\n constructor(key: string) {\n this.key = key;\n this.color = PIECES[key].color;\n this.matrix = PIECES[key].shape.map((r) => [...r]);\n this.rotation = 0;\n this.x = Math.floor(COLS / 2) - Math.floor(this.matrix[0].length / 2);\n this.y = key === \"I\" ? -1 : 0;\n }\n\n clone(): Piece {\n const p = new Piece(this.key);\n p.matrix = this.matrix.map((r) => [...r]);\n p.x = this.x;\n p.y = this.y;\n p.rotation = this.rotation;\n return p;\n }\n}\n\n// ─── Rotation helpers ─────────────────────────────────────────────────────────\n\nfunction rotateMatrix(matrix: Matrix, dir: 1 | -1): Matrix {\n const N = matrix.length;\n const rotated: Matrix = Array.from({ length: N }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < matrix[r].length; c++) {\n if (dir === 1) {\n rotated[c][N - 1 - r] = matrix[r][c];\n } else {\n rotated[N - 1 - c][r] = matrix[r][c];\n }\n }\n }\n return rotated;\n}\n\n// ─── Board ────────────────────────────────────────────────────────────────────\n\ntype Cell = { color: Color } | null;\ntype Board = Cell[][];\n\nfunction createBoard(): Board {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n}\n\n// ─── Game ─────────────────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private board: Board;\n private current: Piece;\n private next: Piece;\n private held: Piece | null = null;\n private canHold = true;\n\n private score = 0;\n private level = 1;\n private lines = 0;\n\n private gameOver = false;\n private paused = false;\n private started = false;\n\n private dropTimer = 0;\n private lastTime = 0;\n private rafId = 0;\n\n // Canvas elements\n private boardCanvas: HTMLCanvasElement;\n private boardCtx: CanvasRenderingContext2D;\n private nextCanvas: HTMLCanvasElement;\n private nextCtx: CanvasRenderingContext2D;\n private holdCanvas: HTMLCanvasElement;\n private holdCtx: CanvasRenderingContext2D;\n\n // UI elements\n private scoreEl: HTMLElement;\n private levelEl: HTMLElement;\n private linesEl: HTMLElement;\n private messageEl: HTMLElement;\n\n constructor() {\n this.boardCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n this.boardCtx = this.boardCanvas.getContext(\"2d\")!;\n this.nextCanvas = document.getElementById(\"next\") as HTMLCanvasElement;\n this.nextCtx = this.nextCanvas.getContext(\"2d\")!;\n this.holdCanvas = document.getElementById(\"hold\") as HTMLCanvasElement;\n this.holdCtx = this.holdCanvas.getContext(\"2d\")!;\n\n this.scoreEl = document.getElementById(\"score\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.messageEl = document.getElementById(\"message\")!;\n\n this.board = createBoard();\n this.current = this.randomPiece();\n this.next = this.randomPiece();\n\n this.bindKeys();\n this.showMessage(\"TETRIS\", \"Pulsa Enter o Espacio para comenzar\");\n this.drawAll();\n }\n\n // ── Piece Factory ──\n\n private randomPiece(): Piece {\n const key = PIECE_KEYS[Math.floor(Math.random() * PIECE_KEYS.length)];\n return new Piece(key);\n }\n\n // ── Collision ──\n\n private collides(piece: Piece, board: Board): boolean {\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const nx = piece.x + c;\n const ny = piece.y + r;\n if (nx < 0 || nx >= COLS || ny >= ROWS) return true;\n if (ny >= 0 && board[ny][nx]) return true;\n }\n }\n return false;\n }\n\n // ── Ghost piece ──\n\n private ghostPiece(): Piece {\n const ghost = this.current.clone();\n while (!this.collides(ghost, this.board)) {\n ghost.y++;\n }\n ghost.y--;\n return ghost;\n }\n\n // ── Movement ──\n\n private moveLeft() {\n const p = this.current.clone();\n p.x--;\n if (!this.collides(p, this.board)) this.current.x--;\n }\n\n private moveRight() {\n const p = this.current.clone();\n p.x++;\n if (!this.collides(p, this.board)) this.current.x++;\n }\n\n private softDrop() {\n const p = this.current.clone();\n p.y++;\n if (!this.collides(p, this.board)) {\n this.current.y++;\n this.score += 1;\n this.updateScore();\n this.dropTimer = 0;\n } else {\n this.lock();\n }\n }\n\n private hardDrop() {\n const ghost = this.ghostPiece();\n const dropped = ghost.y - this.current.y;\n this.score += dropped * 2;\n this.current.y = ghost.y;\n this.updateScore();\n this.lock();\n }\n\n // ── Rotation (SRS) ──\n\n private rotate(dir: 1 | -1) {\n const original = this.current.clone();\n const newMatrix = rotateMatrix(this.current.matrix, dir);\n const newRot = ((this.current.rotation + dir) + 4) % 4;\n\n // Select kick table\n const kicks = this.current.key === \"I\" ? KICKS_I : KICKS_JLTSZ;\n // Index into kick table: clockwise uses newRot-1 direction\n const kickIdx = dir === 1 ? this.current.rotation : newRot;\n const offsets = kicks[kickIdx];\n\n for (const [ox, oy] of offsets) {\n const testX = original.x + (dir === 1 ? ox : -ox);\n const testY = original.y + (dir === 1 ? -oy : oy);\n\n const test = original.clone();\n test.matrix = newMatrix;\n test.x = testX;\n test.y = testY;\n test.rotation = newRot;\n\n if (!this.collides(test, this.board)) {\n this.current.matrix = newMatrix;\n this.current.x = testX;\n this.current.y = testY;\n this.current.rotation = newRot;\n return;\n }\n }\n }\n\n // ── Hold ──\n\n private holdPiece() {\n if (!this.canHold) return;\n this.canHold = false;\n if (this.held) {\n const tmp = this.held;\n this.held = new Piece(this.current.key);\n this.current = new Piece(tmp.key);\n } else {\n this.held = new Piece(this.current.key);\n this.spawn();\n }\n this.drawHold();\n }\n\n // ── Lock and clear lines ──\n\n private lock() {\n // Place piece onto board\n for (let r = 0; r < this.current.matrix.length; r++) {\n for (let c = 0; c < this.current.matrix[r].length; c++) {\n if (!this.current.matrix[r][c]) continue;\n const ny = this.current.y + r;\n const nx = this.current.x + c;\n if (ny < 0) {\n this.triggerGameOver();\n return;\n }\n this.board[ny][nx] = { color: this.current.color };\n }\n }\n\n // Clear full lines\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every((cell) => cell !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(Array(COLS).fill(null));\n cleared++;\n r++; // Re-check same row index\n }\n }\n\n if (cleared > 0) {\n this.lines += cleared;\n this.score += LINE_POINTS[cleared] * this.level;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateScore();\n }\n\n this.canHold = true;\n this.spawn();\n }\n\n private spawn() {\n this.current = this.next;\n this.next = this.randomPiece();\n if (this.collides(this.current, this.board)) {\n this.triggerGameOver();\n }\n this.drawNext();\n }\n\n // ── Game State ──\n\n start() {\n if (this.gameOver) {\n this.reset();\n }\n this.started = true;\n this.paused = false;\n this.hideMessage();\n this.lastTime = performance.now();\n this.dropTimer = 0;\n cancelAnimationFrame(this.rafId);\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n\n private reset() {\n this.board = createBoard();\n this.held = null;\n this.canHold = true;\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.gameOver = false;\n this.current = this.randomPiece();\n this.next = this.randomPiece();\n this.updateScore();\n this.drawHold();\n this.drawNext();\n }\n\n togglePause() {\n if (!this.started || this.gameOver) return;\n this.paused = !this.paused;\n if (this.paused) {\n cancelAnimationFrame(this.rafId);\n this.showMessage(\"PAUSA\", \"Pulsa P para continuar\");\n } else {\n this.hideMessage();\n this.lastTime = performance.now();\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n }\n\n private triggerGameOver() {\n this.gameOver = true;\n this.started = false;\n cancelAnimationFrame(this.rafId);\n this.showMessage(\"GAME OVER\", `Puntuación: ${this.score}<br>Pulsa Enter para reiniciar`);\n }\n\n // ── Game Loop ──\n\n private loop(timestamp: number) {\n const delta = timestamp - this.lastTime;\n this.lastTime = timestamp;\n this.dropTimer += delta;\n\n if (this.dropTimer >= dropInterval(this.level)) {\n this.dropTimer = 0;\n const p = this.current.clone();\n p.y++;\n if (!this.collides(p, this.board)) {\n this.current.y++;\n } else {\n this.lock();\n }\n }\n\n this.drawAll();\n if (!this.gameOver && !this.paused) {\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n }\n\n // ── Drawing ──\n\n private drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n color: Color,\n size = BLOCK,\n alpha = 1\n ) {\n ctx.globalAlpha = alpha;\n // Fill\n ctx.fillStyle = color;\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n // Highlight (top-left)\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, 4);\n ctx.fillRect(x * size + 1, y * size + 1, 4, size - 2);\n // Shadow (bottom-right)\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size + 1, y * size + size - 5, size - 2, 4);\n ctx.fillRect(x * size + size - 5, y * size + 1, 4, size - 2);\n ctx.globalAlpha = 1;\n }\n\n private drawBoard() {\n const ctx = this.boardCtx;\n ctx.clearRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n\n // Grid background\n ctx.fillStyle = \"#0a0a1a\";\n ctx.fillRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n ctx.lineWidth = 1;\n for (let r = 0; r < ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * BLOCK);\n ctx.lineTo(COLS * BLOCK, r * BLOCK);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * BLOCK, 0);\n ctx.lineTo(c * BLOCK, ROWS * BLOCK);\n ctx.stroke();\n }\n\n // Locked cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.board[r][c]) {\n this.drawBlock(ctx, c, r, this.board[r][c]!.color);\n }\n }\n }\n\n // Ghost piece\n const ghost = this.ghostPiece();\n for (let r = 0; r < ghost.matrix.length; r++) {\n for (let c = 0; c < ghost.matrix[r].length; c++) {\n if (ghost.matrix[r][c]) {\n const nx = ghost.x + c;\n const ny = ghost.y + r;\n if (ny >= 0) {\n ctx.globalAlpha = 0.25;\n ctx.fillStyle = this.current.color;\n ctx.fillRect(nx * BLOCK + 1, ny * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n ctx.strokeStyle = this.current.color;\n ctx.lineWidth = 2;\n ctx.strokeRect(nx * BLOCK + 2, ny * BLOCK + 2, BLOCK - 4, BLOCK - 4);\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n\n // Current piece\n for (let r = 0; r < this.current.matrix.length; r++) {\n for (let c = 0; c < this.current.matrix[r].length; c++) {\n if (this.current.matrix[r][c]) {\n const nx = this.current.x + c;\n const ny = this.current.y + r;\n if (ny >= 0) {\n this.drawBlock(ctx, nx, ny, this.current.color);\n }\n }\n }\n }\n }\n\n private drawPieceInCanvas(\n ctx: CanvasRenderingContext2D,\n canvas: HTMLCanvasElement,\n piece: Piece | null\n ) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#0a0a1a\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n if (!piece) return;\n\n const m = piece.matrix;\n const cols = m[0].length;\n const rows = m.length;\n\n // Count actual bounding box\n let minC = cols, maxC = 0, minR = rows, maxR = 0;\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (m[r][c]) {\n minC = Math.min(minC, c);\n maxC = Math.max(maxC, c);\n minR = Math.min(minR, r);\n maxR = Math.max(maxR, r);\n }\n }\n }\n const pw = (maxC - minC + 1) * PREVIEW_BLOCK;\n const ph = (maxR - minR + 1) * PREVIEW_BLOCK;\n const ox = Math.floor((canvas.width - pw) / 2) / PREVIEW_BLOCK - minC;\n const oy = Math.floor((canvas.height - ph) / 2) / PREVIEW_BLOCK - minR;\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (m[r][c]) {\n this.drawBlock(ctx, c + ox, r + oy, piece.color, PREVIEW_BLOCK);\n }\n }\n }\n }\n\n private drawNext() {\n this.drawPieceInCanvas(this.nextCtx, this.nextCanvas, this.next);\n }\n\n private drawHold() {\n this.drawPieceInCanvas(this.holdCtx, this.holdCanvas, this.held);\n }\n\n private drawAll() {\n this.drawBoard();\n }\n\n // ── UI helpers ──\n\n private updateScore() {\n this.scoreEl.textContent = String(this.score);\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n private showMessage(title: string, sub: string) {\n this.messageEl.innerHTML = `<div class=\"msg-title\">${title}</div><div class=\"msg-sub\">${sub}</div>`;\n this.messageEl.style.display = \"flex\";\n }\n\n private hideMessage() {\n this.messageEl.style.display = \"none\";\n }\n\n // ── Keyboard ──\n\n private bindKeys() {\n document.addEventListener(\"keydown\", (e) => {\n // Always allow start/restart\n if (e.code === \"Enter\" || (e.code === \"Space\" && !this.started)) {\n e.preventDefault();\n this.start();\n return;\n }\n if (!this.started || this.gameOver) return;\n if (e.code === \"KeyP\") {\n this.togglePause();\n return;\n }\n if (this.paused) return;\n\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n this.moveLeft();\n break;\n case \"ArrowRight\":\n e.preventDefault();\n this.moveRight();\n break;\n case \"ArrowDown\":\n e.preventDefault();\n this.softDrop();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.rotate(1);\n break;\n case \"KeyZ\":\n e.preventDefault();\n this.rotate(-1);\n break;\n case \"Space\":\n e.preventDefault();\n this.hardDrop();\n break;\n case \"KeyC\":\n case \"ShiftLeft\":\n case \"ShiftRight\":\n e.preventDefault();\n this.holdPiece();\n break;\n }\n });\n }\n}\n\n// ─── Entry Point ──────────────────────────────────────────────────────────────\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\nTYPESCRIPT_EOF","description":"Write the main TypeScript Tetris game source"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":577,"cache_read_input_tokens":6465,"cache_creation":{"ephemeral_5m_input_tokens":577,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"aa497119-6647-41a0-8f9a-1ddc08a3764a"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01WVczit1b6PnuuLn7fXhxA5","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"3533391e-e80c-473e-8bee-97d15fc05581","timestamp":"2026-04-03T20:59:55.412Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Up6NUrZZ1XKfjydioggBbG","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01UHbXzCwBe1wF6V8PQaGhKX","name":"Bash","input":{"command":"cat > /tmp/loop-bench-sdedmh6w/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"module\": \"ESNext\",\n \"strict\": true,\n \"outDir\": \"dist\",\n \"rootDir\": \"src\",\n \"lib\": [\"ES2017\", \"DOM\"]\n },\n \"include\": [\"src\"]\n}\nEOF","description":"Write tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":6522,"cache_read_input_tokens":7042,"cache_creation":{"ephemeral_5m_input_tokens":6522,"ephemeral_1h_input_tokens":0},"output_tokens":38,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"5961b0d7-0883-40c0-8b69-a646f1aed60b"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01UHbXzCwBe1wF6V8PQaGhKX","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"df93e51b-4e6b-4851-bc91-51d6fa5e7ed3","timestamp":"2026-04-03T20:59:58.915Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015gZDyntFczG2KV7igHP3be","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_015tqXCti7kJxsdhb3aZpbrq","name":"Bash","input":{"command":"npx esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 2>&1","description":"Bundle TypeScript with esbuild"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":197,"cache_read_input_tokens":13564,"cache_creation":{"ephemeral_5m_input_tokens":197,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"4b70435a-2008-4c2e-b8cb-4311bba52a32"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_015tqXCti7kJxsdhb3aZpbrq","type":"tool_result","content":" dist/tetris.js 17.7kb\n\n⚡ Done in 2ms","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"82f6bc95-7b9c-4b20-86b9-1267b6aaa3b2","timestamp":"2026-04-03T21:00:01.474Z","tool_use_result":{"stdout":" dist/tetris.js 17.7kb\n\n⚡ Done in 2ms","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Kt1ScgtoJiCHLKgphoAeJL","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The build was successful. Now let me create the HTML file with proper styling.","signature":"EosCClsIDBgCKkANS8WONGEPg4YYclODIjnaCGsCOgxDrp7v9AkC2ygtAa66A8pHPF647V8amPxE6ro7/8Ld13mtbYIAbk/EqVd1MhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxuG1TUGyzGfoJ0qP0aDMgfX5rKsQopSW9VkSIwTs39NJI38qFCHQy2xUX/ZL7FVKu9dK+RmqtpBgO6gZ6KFAnhcvvGq/BGjfKYZg/CKl69ng6efbiJKHmsnLus7OvAWMctJRcsjuBLVB0gjLWI9f07yaCMVY7xK6kLqY31LEQduatGpyNXKXq+phtwdTfy/+DXU7sRpRUKzClasx0BASo2ydGOqEuAcPodl0eTGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":141,"cache_read_input_tokens":13761,"cache_creation":{"ephemeral_5m_input_tokens":141,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"f73bff75-2a2c-4840-8630-b299f434df23"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Kt1ScgtoJiCHLKgphoAeJL","type":"message","role":"assistant","content":[{"type":"text","text":"El bundle se generó correctamente. Ahora creo el HTML con el diseño completo:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":141,"cache_read_input_tokens":13761,"cache_creation":{"ephemeral_5m_input_tokens":141,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"459c08bc-f971-4531-b26b-895621fd204d"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01Kt1ScgtoJiCHLKgphoAeJL","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01VPHfJtYjvoe8iuNBZMunSe","name":"Bash","input":{"command":"cat > /tmp/loop-bench-sdedmh6w/index.html << 'HTMLEOF'\n<!DOCTYPE html>\n<html lang=\"es\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n /* ── Reset & Base ──────────────────────────────────────────────────────── */\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0d0d1f;\n color: #e0e0f0;\n font-family: 'Segoe UI', system-ui, sans-serif;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n min-height: 100vh;\n padding: 20px 10px;\n user-select: none;\n }\n\n /* ── Title ─────────────────────────────────────────────────────────────── */\n h1 {\n font-size: 2.8rem;\n font-weight: 900;\n letter-spacing: 0.18em;\n margin-bottom: 18px;\n background: linear-gradient(135deg, #00cfcf, #9f00cf, #cf7f00);\n -webkit-background-clip: text;\n -webkit-text-fill-color: transparent;\n background-clip: text;\n text-shadow: none;\n filter: drop-shadow(0 0 12px rgba(0,207,207,0.4));\n }\n\n /* ── Layout ────────────────────────────────────────────────────────────── */\n #game-wrapper {\n display: flex;\n gap: 16px;\n align-items: flex-start;\n }\n\n /* ── Sidebar panels ────────────────────────────────────────────────────── */\n .side-panel {\n display: flex;\n flex-direction: column;\n gap: 14px;\n width: 130px;\n }\n\n .panel-box {\n background: #12122a;\n border: 1px solid rgba(255,255,255,0.08);\n border-radius: 10px;\n padding: 12px;\n box-shadow: 0 4px 20px rgba(0,0,0,0.5);\n }\n\n .panel-label {\n font-size: 0.65rem;\n font-weight: 700;\n letter-spacing: 0.15em;\n text-transform: uppercase;\n color: #888;\n margin-bottom: 8px;\n }\n\n .panel-value {\n font-size: 1.6rem;\n font-weight: 800;\n color: #e8e8ff;\n font-variant-numeric: tabular-nums;\n }\n\n canvas.preview {\n width: 106px;\n height: 80px;\n display: block;\n border-radius: 6px;\n }\n\n /* ── Board area ────────────────────────────────────────────────────────── */\n #board-container {\n position: relative;\n border: 2px solid rgba(255,255,255,0.1);\n border-radius: 8px;\n overflow: hidden;\n box-shadow:\n 0 0 40px rgba(0,207,207,0.15),\n 0 0 80px rgba(0,0,0,0.6),\n inset 0 0 30px rgba(0,0,0,0.4);\n }\n\n #board {\n display: block;\n }\n\n /* ── Overlay message ───────────────────────────────────────────────────── */\n #message {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background: rgba(5, 5, 20, 0.82);\n backdrop-filter: blur(3px);\n }\n\n .msg-title {\n font-size: 2.2rem;\n font-weight: 900;\n letter-spacing: 0.2em;\n color: #fff;\n text-shadow: 0 0 20px rgba(0,207,207,0.8);\n }\n\n .msg-sub {\n font-size: 0.85rem;\n color: #aaa;\n text-align: center;\n line-height: 1.6;\n max-width: 240px;\n }\n\n /* ── Controls guide ────────────────────────────────────────────────────── */\n #controls {\n margin-top: 18px;\n background: #12122a;\n border: 1px solid rgba(255,255,255,0.06);\n border-radius: 10px;\n padding: 14px 20px;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 6px 24px;\n max-width: 520px;\n width: 100%;\n }\n\n .ctrl-row {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n kbd {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n background: #1e1e3a;\n border: 1px solid rgba(255,255,255,0.2);\n border-bottom: 3px solid rgba(255,255,255,0.12);\n border-radius: 5px;\n padding: 2px 7px;\n font-size: 0.72rem;\n font-family: inherit;\n font-weight: 600;\n color: #ccc;\n white-space: nowrap;\n min-width: 28px;\n }\n\n .ctrl-label {\n font-size: 0.72rem;\n color: #777;\n }\n </style>\n</head>\n<body>\n\n <h1>TETRIS</h1>\n\n <div id=\"game-wrapper\">\n\n <!-- Left panel: Hold + Score + Level + Lines -->\n <div class=\"side-panel\">\n <div class=\"panel-box\">\n <div class=\"panel-label\">Guardar (C)</div>\n <canvas class=\"preview\" id=\"hold\" width=\"106\" height=\"80\"></canvas>\n </div>\n <div class=\"panel-box\">\n <div class=\"panel-label\">Puntuación</div>\n <div class=\"panel-value\" id=\"score\">0</div>\n </div>\n <div class=\"panel-box\">\n <div class=\"panel-label\">Nivel</div>\n <div class=\"panel-value\" id=\"level\">1</div>\n </div>\n <div class=\"panel-box\">\n <div class=\"panel-label\">Líneas</div>\n <div class=\"panel-value\" id=\"lines\">0</div>\n </div>\n </div>\n\n <!-- Board -->\n <div id=\"board-container\">\n <canvas id=\"board\" width=\"320\" height=\"640\"></canvas>\n <div id=\"message\"></div>\n </div>\n\n <!-- Right panel: Next -->\n <div class=\"side-panel\">\n <div class=\"panel-box\">\n <div class=\"panel-label\">Siguiente</div>\n <canvas class=\"preview\" id=\"next\" width=\"106\" height=\"80\"></canvas>\n </div>\n <div class=\"panel-box\" style=\"font-size:0.7rem; color:#666; line-height:1.8;\">\n <div class=\"panel-label\">Puntuaciones</div>\n <div>1 línea ×100</div>\n <div>2 líneas ×300</div>\n <div>3 líneas ×500</div>\n <div>Tetris ×800</div>\n <div style=\"margin-top:6px; color:#555;\">× nivel</div>\n </div>\n </div>\n\n </div>\n\n <!-- Controls reference -->\n <div id=\"controls\">\n <div class=\"ctrl-row\"><kbd>◄ ►</kbd> <span class=\"ctrl-label\">Mover</span></div>\n <div class=\"ctrl-row\"><kbd>▲</kbd> <span class=\"ctrl-label\">Rotar CW</span></div>\n <div class=\"ctrl-row\"><kbd>Z</kbd> <span class=\"ctrl-label\">Rotar CCW</span></div>\n <div class=\"ctrl-row\"><kbd>▼</kbd> <span class=\"ctrl-label\">Bajar suave</span></div>\n <div class=\"ctrl-row\"><kbd>Espacio</kbd> <span class=\"ctrl-label\">Caída dura</span></div>\n <div class=\"ctrl-row\"><kbd>C</kbd> / <kbd>⇧</kbd> <span class=\"ctrl-label\">Guardar pieza</span></div>\n <div class=\"ctrl-row\"><kbd>P</kbd> <span class=\"ctrl-label\">Pausar</span></div>\n <div class=\"ctrl-row\"><kbd>Enter</kbd> <span class=\"ctrl-label\">Iniciar / Reiniciar</span></div>\n </div>\n\n <script src=\"dist/tetris.js\"></script>\n</body>\n</html>\nHTMLEOF","description":"Write the complete HTML file with styles and layout"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":141,"cache_read_input_tokens":13761,"cache_creation":{"ephemeral_5m_input_tokens":141,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"205351f9-925c-489f-a79a-96f7f41cda11"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01VPHfJtYjvoe8iuNBZMunSe","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"363fd155-aa9a-4abc-9ef8-403fe65fbec9","timestamp":"2026-04-03T21:00:31.937Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_019DKZrh5uQx95uGePxKgfxY","type":"message","role":"assistant","content":[{"type":"text","text":"Ahora actualizo el `package.json` con los scripts de build:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2595,"cache_read_input_tokens":13902,"cache_creation":{"ephemeral_5m_input_tokens":2595,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"05519e42-fbe0-458b-922c-68a20b4add01"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_019DKZrh5uQx95uGePxKgfxY","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017dUNPMEQGBuAmDChtJPYUj","name":"Read","input":{"file_path":"/tmp/loop-bench-sdedmh6w/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":2595,"cache_read_input_tokens":13902,"cache_creation":{"ephemeral_5m_input_tokens":2595,"ephemeral_1h_input_tokens":0},"output_tokens":2,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"f51c2873-56f7-41e5-a6f5-9d9788578b35"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017dUNPMEQGBuAmDChtJPYUj","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-sdedmh6w\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"esbuild\": \"^0.28.0\",\n18\t \"eslint\": \"^10.2.0\",\n19\t \"typescript\": \"^6.0.2\"\n20\t }\n21\t}\n22\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"3dac66ce-ae6b-4dce-b261-983f55d1f117","timestamp":"2026-04-03T21:00:34.963Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-sdedmh6w/package.json","content":"{\n \"name\": \"loop-bench-sdedmh6w\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"esbuild\": \"^0.28.0\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":22,"startLine":1,"totalLines":22}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_018eG4D76wHf8mpsKfgcP5ot","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_017EcPfr9g4iUc5GFYEApgPB","name":"Edit","input":{"replace_all":false,"file_path":"/tmp/loop-bench-sdedmh6w/package.json","old_string":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","new_string":" \"scripts\": {\n \"build\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017\",\n \"watch\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":430,"cache_read_input_tokens":16497,"cache_creation":{"ephemeral_5m_input_tokens":430,"ephemeral_1h_input_tokens":0},"output_tokens":64,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"99cf4533-636f-497a-b0c7-eb071a26a133"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_017EcPfr9g4iUc5GFYEApgPB","type":"tool_result","content":"The file /tmp/loop-bench-sdedmh6w/package.json has been updated successfully."}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"56bd6a0d-0675-44d8-a9fd-f9da0e8ee167","timestamp":"2026-04-03T21:00:38.296Z","tool_use_result":{"filePath":"/tmp/loop-bench-sdedmh6w/package.json","oldString":" \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","newString":" \"scripts\": {\n \"build\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017\",\n \"watch\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },","originalFile":"{\n \"name\": \"loop-bench-sdedmh6w\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"esbuild\": \"^0.28.0\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","structuredPatch":[{"oldStart":4,"oldLines":6,"newStart":4,"newLines":9,"lines":[" \"description\": \"\","," \"main\": \"index.js\","," \"scripts\": {","+ \"build\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017\",","+ \"watch\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch\",","+ \"typecheck\": \"tsc --noEmit\","," \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\""," },"," \"keywords\": [],"]}],"userModified":false,"replaceAll":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_016FUdfQSTcJqHUJhnhm6Uky","type":"message","role":"assistant","content":[{"type":"text","text":"Ahora verifico que todo el código TypeScript sea válido con el type-checker:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":298,"cache_read_input_tokens":16927,"cache_creation":{"ephemeral_5m_input_tokens":298,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"8a0aaad9-afbd-4c07-96d3-6095474a8abe"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_016FUdfQSTcJqHUJhnhm6Uky","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01RCaQL9rAc3qAsyUKEQWf6U","name":"Bash","input":{"command":"npx tsc --noEmit 2>&1","description":"Type-check the TypeScript source"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":298,"cache_read_input_tokens":16927,"cache_creation":{"ephemeral_5m_input_tokens":298,"ephemeral_1h_input_tokens":0},"output_tokens":4,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"4d6b1db0-670a-4666-8f43-cd044e628be9"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01RCaQL9rAc3qAsyUKEQWf6U","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"fed5bb06-d78d-488d-8b32-863ea2880bf2","timestamp":"2026-04-03T21:00:41.869Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FLb58aawwczaNPvfmkCPg8","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"No type errors. Let me also verify the output JS file looks correct and validate the whole project structure.","signature":"EqoCClsIDBgCKkDObzHIMrz4ft5rsUFNSYj9kWXS+AKOvt0uUk8S/hCx9kypd26cWW8Oxz1Y6ogJFXl52jdziG+2MGjbAQViqTJnMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgxVzZoqIh+dula6fooaDFABEKcDjQ+Ls4TloiIwZC3Y59CKJOPEMszD0sT1xTfN080uE5//XODww34RE/wEikxoPv06LPB+7786RHgdKn0nOIJNnYAvl8ZNBapnT/S+X2WCGn6T62Uo1zE8G4eg8+IvNeVT0xrLGJwogbNykttJtAcwIeau/+7P93L14cTs6ftNBK8gPqDzeX/GsyZUrN2lexFXT7ehpRfrMvIHWcEbahZYyLmZROfvOZ81syajZtJUt4Or0lHyK9S2cBgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":125,"cache_read_input_tokens":17225,"cache_creation":{"ephemeral_5m_input_tokens":125,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"8b144b1c-c5e6-40e3-b5a0-164e39aad771"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FLb58aawwczaNPvfmkCPg8","type":"message","role":"assistant","content":[{"type":"text","text":"Sin errores. Verifiquemos la estructura final del proyecto:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":125,"cache_read_input_tokens":17225,"cache_creation":{"ephemeral_5m_input_tokens":125,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"0ed0e10f-9955-4406-94b2-e70dbee01e3b"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FLb58aawwczaNPvfmkCPg8","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01KzERveos5zjNJV1ZWJ9gH2","name":"Bash","input":{"command":"ls -lh /tmp/loop-bench-sdedmh6w && echo \"---\" && ls -lh /tmp/loop-bench-sdedmh6w/dist/ && echo \"---\" && ls -lh /tmp/loop-bench-sdedmh6w/src/","description":"Show project structure and file sizes"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":125,"cache_read_input_tokens":17225,"cache_creation":{"ephemeral_5m_input_tokens":125,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"7d36e0f1-e53a-41db-8dc8-ab75489f7084"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01KzERveos5zjNJV1ZWJ9gH2","type":"tool_result","content":"total 76K\ndrwxr-xr-x 2 root root 4.0K Apr 3 23:00 dist\n-rw-r--r-- 1 root root 7.3K Apr 3 23:00 index.html\ndrwxr-xr-x 68 root root 4.0K Apr 3 22:58 node_modules\n-rw-r--r-- 1 root root 672 Apr 3 23:00 package.json\n-rw-r--r-- 1 root root 48K Apr 3 22:58 package-lock.json\ndrwxr-xr-x 2 root root 4.0K Apr 3 22:59 src\n-rw-r--r-- 1 root root 194 Apr 3 22:59 tsconfig.json\n---\ntotal 20K\n-rw-r--r-- 1 root root 18K Apr 3 23:00 tetris.js\n---\ntotal 20K\n-rw-r--r-- 1 root root 18K Apr 3 22:59 tetris.ts","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"7db0c36c-8f14-4df5-840b-388deef5a3a6","timestamp":"2026-04-03T21:00:45.965Z","tool_use_result":{"stdout":"total 76K\ndrwxr-xr-x 2 root root 4.0K Apr 3 23:00 dist\n-rw-r--r-- 1 root root 7.3K Apr 3 23:00 index.html\ndrwxr-xr-x 68 root root 4.0K Apr 3 22:58 node_modules\n-rw-r--r-- 1 root root 672 Apr 3 23:00 package.json\n-rw-r--r-- 1 root root 48K Apr 3 22:58 package-lock.json\ndrwxr-xr-x 2 root root 4.0K Apr 3 22:59 src\n-rw-r--r-- 1 root root 194 Apr 3 22:59 tsconfig.json\n---\ntotal 20K\n-rw-r--r-- 1 root root 18K Apr 3 23:00 tetris.js\n---\ntotal 20K\n-rw-r--r-- 1 root root 18K Apr 3 22:59 tetris.ts","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014c5v7a4NXphjWhnq455VxE","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Kr761PPHx3WuQU1poiz5QL","name":"Bash","input":{"command":"# Quick sanity-check: verify the bundle contains key identifiers and no syntax errors\nnode -e \"require('fs').readFileSync('./dist/tetris.js','utf8')\" 2>&1 | head -5\nnode --input-type=module < dist/tetris.js 2>&1 | head -10 || true\n# Check key tokens are present\ngrep -c \"TetrisGame\\|rotateMatrix\\|ghostPiece\\|hardDrop\\|holdPiece\" dist/tetris.js","description":"Sanity-check the bundled JS for key identifiers"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":488,"cache_read_input_tokens":17350,"cache_creation":{"ephemeral_5m_input_tokens":488,"ephemeral_1h_input_tokens":0},"output_tokens":37,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"7dd11188-023c-44db-b4bb-c116e5e74845"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Kr761PPHx3WuQU1poiz5QL","type":"tool_result","content":"file:///tmp/loop-bench-sdedmh6w/[eval1]:537\n window.addEventListener(\"DOMContentLoaded\", () => {\n ^\n\nReferenceError: window is not defined\n at src/tetris.ts (file:///tmp/loop-bench-sdedmh6w/[eval1]:537:7)\n at __require (file:///tmp/loop-bench-sdedmh6w/[eval1]:5:52)\n at file:///tmp/loop-bench-sdedmh6w/[eval1]:542:3\n at file:///tmp/loop-bench-sdedmh6w/[eval1]:543:3\n at ModuleJob.run (node:internal/modules/esm/module_job:343:25)\n11","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"9b83a581-0075-472c-9981-986038fb6d9a","timestamp":"2026-04-03T21:00:50.332Z","tool_use_result":{"stdout":"file:///tmp/loop-bench-sdedmh6w/[eval1]:537\n window.addEventListener(\"DOMContentLoaded\", () => {\n ^\n\nReferenceError: window is not defined\n at src/tetris.ts (file:///tmp/loop-bench-sdedmh6w/[eval1]:537:7)\n at __require (file:///tmp/loop-bench-sdedmh6w/[eval1]:5:52)\n at file:///tmp/loop-bench-sdedmh6w/[eval1]:542:3\n at file:///tmp/loop-bench-sdedmh6w/[eval1]:543:3\n at ModuleJob.run (node:internal/modules/esm/module_job:343:25)\n11","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CyzW9KyhTkXgFSwjeqtJT8","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The `window is not defined` error is expected because we're running in Node.js which doesn't have `window`. This is a browser-based game and that's correct. The `11` at the end shows that 11 key identifiers were found in the bundle.\n\nEverything looks good! Let me do one final review of the source code to make sure everything is correct.","signature":"EpAEClsIDBgCKkAlO1f0+3toyi5oG6V5LPa//dre1CU5jzD0MsSLbhjCXG52iFn+kLea04Cn3TMd4MKh0NVN8rZSd1u346v9DK5BMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgy3LFY+aUEaFtTBXb8aDFh0V2ORmbyXA9sG4CIwq/mUd32aYXnic8K7jur8ExEn58csCEKJFAhiduzdgZ+MWUIsifOSJgW1cCPluGybKuICFsJAzwRRtp52/HVePSqj51E3lSSFon37u1WTd4loLf1meWUdw4ZjkgC7cwVzDEeGx4npnROZUxHnPv3mHPLMYT81YjVklQpMH9lm7JccEISj3heGRYiSaK+xjb6L6fjjs9PplwIqwpmAYqFMzKdkgd0sSNs5ux303zCtiHFD3OnABORuxjwnw9vcAG2MQSWX2x3txJjBWR6mYilYLE7aI6uc1FG4o5EdsaZUH6s5G5U4saDQUofmo6VMyoTx74Fu4IKzl9nt4VNcK5McCj4GOjokS/y6cQgJYhy1GSjvDU4MZuHQV4wIOS5f6Vi31ipgUPcXfpKw0PmBSEPAec11iaRf45CUWDCeZOSiRs2wWBFdfS/AioFDSoh2TF+gyYfDYcXaWhMvFKRCRN9yp0jQgDlSK74Hv98URX3d1k07h1efJtvX71NuuMn7eDVHCeaF8A/0UhF06tqPfILsPKh7052QGAE="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":408,"cache_read_input_tokens":17838,"cache_creation":{"ephemeral_5m_input_tokens":408,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"114952b8-cba5-4061-acc8-a539e202c7f5"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CyzW9KyhTkXgFSwjeqtJT8","type":"message","role":"assistant","content":[{"type":"text","text":"El error de `window` es esperado en Node.js (es un juego de navegador). Los 11 identificadores clave están presentes en el bundle. Todo correcto. Revisemos el fuente completo una última vez:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":408,"cache_read_input_tokens":17838,"cache_creation":{"ephemeral_5m_input_tokens":408,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"f0ba1c78-1e50-4e0b-a6c3-ebce1928bf8d"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01CyzW9KyhTkXgFSwjeqtJT8","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01125aaQ5EC5cJA5PaXT9wEs","name":"Read","input":{"file_path":"/tmp/loop-bench-sdedmh6w/src/tetris.ts"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":408,"cache_read_input_tokens":17838,"cache_creation":{"ephemeral_5m_input_tokens":408,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"a696f80d-ca63-4bcf-8eb9-1d6fa8e665b8"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01125aaQ5EC5cJA5PaXT9wEs","type":"tool_result","content":"1\t// ─── Constants ────────────────────────────────────────────────────────────────\n2\t\n3\tconst COLS = 10;\n4\tconst ROWS = 20;\n5\tconst BLOCK = 32;\n6\tconst PREVIEW_BLOCK = 24;\n7\t\n8\t// Points per line clear (multiplied by level)\n9\tconst LINE_POINTS = [0, 100, 300, 500, 800];\n10\t\n11\t// Drop interval in ms per level (level 1 = 800ms, decreases until level 20 = 50ms)\n12\tfunction dropInterval(level: number): number {\n13\t return Math.max(50, 800 - (level - 1) * 40);\n14\t}\n15\t\n16\t// ─── Tetromino Definitions ────────────────────────────────────────────────────\n17\t\n18\ttype Color = string;\n19\ttype Matrix = number[][];\n20\t\n21\tinterface TetrominoDef {\n22\t shape: Matrix;\n23\t color: Color;\n24\t}\n25\t\n26\tconst PIECES: Record<string, TetrominoDef> = {\n27\t I: {\n28\t color: \"#00cfcf\",\n29\t shape: [\n30\t [0, 0, 0, 0],\n31\t [1, 1, 1, 1],\n32\t [0, 0, 0, 0],\n33\t [0, 0, 0, 0],\n34\t ],\n35\t },\n36\t O: {\n37\t color: \"#cfcf00\",\n38\t shape: [\n39\t [1, 1],\n40\t [1, 1],\n41\t ],\n42\t },\n43\t T: {\n44\t color: \"#9f00cf\",\n45\t shape: [\n46\t [0, 1, 0],\n47\t [1, 1, 1],\n48\t [0, 0, 0],\n49\t ],\n50\t },\n51\t S: {\n52\t color: \"#00cf00\",\n53\t shape: [\n54\t [0, 1, 1],\n55\t [1, 1, 0],\n56\t [0, 0, 0],\n57\t ],\n58\t },\n59\t Z: {\n60\t color: \"#cf0000\",\n61\t shape: [\n62\t [1, 1, 0],\n63\t [0, 1, 1],\n64\t [0, 0, 0],\n65\t ],\n66\t },\n67\t J: {\n68\t color: \"#0000cf\",\n69\t shape: [\n70\t [1, 0, 0],\n71\t [1, 1, 1],\n72\t [0, 0, 0],\n73\t ],\n74\t },\n75\t L: {\n76\t color: \"#cf7f00\",\n77\t shape: [\n78\t [0, 0, 1],\n79\t [1, 1, 1],\n80\t [0, 0, 0],\n81\t ],\n82\t },\n83\t};\n84\t\n85\tconst PIECE_KEYS = Object.keys(PIECES);\n86\t\n87\t// Wall-kick offsets for J/L/T/S/Z (SRS)\n88\tconst KICKS_JLTSZ: [number, number][][] = [\n89\t [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], // 0→1\n90\t [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], // 1→2\n91\t [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], // 2→3\n92\t [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], // 3→0\n93\t];\n94\t\n95\t// Wall-kick offsets for I\n96\tconst KICKS_I: [number, number][][] = [\n97\t [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], // 0→1\n98\t [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], // 1→2\n99\t [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], // 2→3\n100\t [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], // 3→0\n101\t];\n102\t\n103\t// ─── Piece Class ──────────────────────────────────────────────────────────────\n104\t\n105\tclass Piece {\n106\t key: string;\n107\t color: Color;\n108\t matrix: Matrix;\n109\t x: number;\n110\t y: number;\n111\t rotation: number; // 0..3\n112\t\n113\t constructor(key: string) {\n114\t this.key = key;\n115\t this.color = PIECES[key].color;\n116\t this.matrix = PIECES[key].shape.map((r) => [...r]);\n117\t this.rotation = 0;\n118\t this.x = Math.floor(COLS / 2) - Math.floor(this.matrix[0].length / 2);\n119\t this.y = key === \"I\" ? -1 : 0;\n120\t }\n121\t\n122\t clone(): Piece {\n123\t const p = new Piece(this.key);\n124\t p.matrix = this.matrix.map((r) => [...r]);\n125\t p.x = this.x;\n126\t p.y = this.y;\n127\t p.rotation = this.rotation;\n128\t return p;\n129\t }\n130\t}\n131\t\n132\t// ─── Rotation helpers ─────────────────────────────────────────────────────────\n133\t\n134\tfunction rotateMatrix(matrix: Matrix, dir: 1 | -1): Matrix {\n135\t const N = matrix.length;\n136\t const rotated: Matrix = Array.from({ length: N }, () => Array(N).fill(0));\n137\t for (let r = 0; r < N; r++) {\n138\t for (let c = 0; c < matrix[r].length; c++) {\n139\t if (dir === 1) {\n140\t rotated[c][N - 1 - r] = matrix[r][c];\n141\t } else {\n142\t rotated[N - 1 - c][r] = matrix[r][c];\n143\t }\n144\t }\n145\t }\n146\t return rotated;\n147\t}\n148\t\n149\t// ─── Board ────────────────────────────────────────────────────────────────────\n150\t\n151\ttype Cell = { color: Color } | null;\n152\ttype Board = Cell[][];\n153\t\n154\tfunction createBoard(): Board {\n155\t return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n156\t}\n157\t\n158\t// ─── Game ─────────────────────────────────────────────────────────────────────\n159\t\n160\tclass TetrisGame {\n161\t private board: Board;\n162\t private current: Piece;\n163\t private next: Piece;\n164\t private held: Piece | null = null;\n165\t private canHold = true;\n166\t\n167\t private score = 0;\n168\t private level = 1;\n169\t private lines = 0;\n170\t\n171\t private gameOver = false;\n172\t private paused = false;\n173\t private started = false;\n174\t\n175\t private dropTimer = 0;\n176\t private lastTime = 0;\n177\t private rafId = 0;\n178\t\n179\t // Canvas elements\n180\t private boardCanvas: HTMLCanvasElement;\n181\t private boardCtx: CanvasRenderingContext2D;\n182\t private nextCanvas: HTMLCanvasElement;\n183\t private nextCtx: CanvasRenderingContext2D;\n184\t private holdCanvas: HTMLCanvasElement;\n185\t private holdCtx: CanvasRenderingContext2D;\n186\t\n187\t // UI elements\n188\t private scoreEl: HTMLElement;\n189\t private levelEl: HTMLElement;\n190\t private linesEl: HTMLElement;\n191\t private messageEl: HTMLElement;\n192\t\n193\t constructor() {\n194\t this.boardCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n195\t this.boardCtx = this.boardCanvas.getContext(\"2d\")!;\n196\t this.nextCanvas = document.getElementById(\"next\") as HTMLCanvasElement;\n197\t this.nextCtx = this.nextCanvas.getContext(\"2d\")!;\n198\t this.holdCanvas = document.getElementById(\"hold\") as HTMLCanvasElement;\n199\t this.holdCtx = this.holdCanvas.getContext(\"2d\")!;\n200\t\n201\t this.scoreEl = document.getElementById(\"score\")!;\n202\t this.levelEl = document.getElementById(\"level\")!;\n203\t this.linesEl = document.getElementById(\"lines\")!;\n204\t this.messageEl = document.getElementById(\"message\")!;\n205\t\n206\t this.board = createBoard();\n207\t this.current = this.randomPiece();\n208\t this.next = this.randomPiece();\n209\t\n210\t this.bindKeys();\n211\t this.showMessage(\"TETRIS\", \"Pulsa Enter o Espacio para comenzar\");\n212\t this.drawAll();\n213\t }\n214\t\n215\t // ── Piece Factory ──\n216\t\n217\t private randomPiece(): Piece {\n218\t const key = PIECE_KEYS[Math.floor(Math.random() * PIECE_KEYS.length)];\n219\t return new Piece(key);\n220\t }\n221\t\n222\t // ── Collision ──\n223\t\n224\t private collides(piece: Piece, board: Board): boolean {\n225\t for (let r = 0; r < piece.matrix.length; r++) {\n226\t for (let c = 0; c < piece.matrix[r].length; c++) {\n227\t if (!piece.matrix[r][c]) continue;\n228\t const nx = piece.x + c;\n229\t const ny = piece.y + r;\n230\t if (nx < 0 || nx >= COLS || ny >= ROWS) return true;\n231\t if (ny >= 0 && board[ny][nx]) return true;\n232\t }\n233\t }\n234\t return false;\n235\t }\n236\t\n237\t // ── Ghost piece ──\n238\t\n239\t private ghostPiece(): Piece {\n240\t const ghost = this.current.clone();\n241\t while (!this.collides(ghost, this.board)) {\n242\t ghost.y++;\n243\t }\n244\t ghost.y--;\n245\t return ghost;\n246\t }\n247\t\n248\t // ── Movement ──\n249\t\n250\t private moveLeft() {\n251\t const p = this.current.clone();\n252\t p.x--;\n253\t if (!this.collides(p, this.board)) this.current.x--;\n254\t }\n255\t\n256\t private moveRight() {\n257\t const p = this.current.clone();\n258\t p.x++;\n259\t if (!this.collides(p, this.board)) this.current.x++;\n260\t }\n261\t\n262\t private softDrop() {\n263\t const p = this.current.clone();\n264\t p.y++;\n265\t if (!this.collides(p, this.board)) {\n266\t this.current.y++;\n267\t this.score += 1;\n268\t this.updateScore();\n269\t this.dropTimer = 0;\n270\t } else {\n271\t this.lock();\n272\t }\n273\t }\n274\t\n275\t private hardDrop() {\n276\t const ghost = this.ghostPiece();\n277\t const dropped = ghost.y - this.current.y;\n278\t this.score += dropped * 2;\n279\t this.current.y = ghost.y;\n280\t this.updateScore();\n281\t this.lock();\n282\t }\n283\t\n284\t // ── Rotation (SRS) ──\n285\t\n286\t private rotate(dir: 1 | -1) {\n287\t const original = this.current.clone();\n288\t const newMatrix = rotateMatrix(this.current.matrix, dir);\n289\t const newRot = ((this.current.rotation + dir) + 4) % 4;\n290\t\n291\t // Select kick table\n292\t const kicks = this.current.key === \"I\" ? KICKS_I : KICKS_JLTSZ;\n293\t // Index into kick table: clockwise uses newRot-1 direction\n294\t const kickIdx = dir === 1 ? this.current.rotation : newRot;\n295\t const offsets = kicks[kickIdx];\n296\t\n297\t for (const [ox, oy] of offsets) {\n298\t const testX = original.x + (dir === 1 ? ox : -ox);\n299\t const testY = original.y + (dir === 1 ? -oy : oy);\n300\t\n301\t const test = original.clone();\n302\t test.matrix = newMatrix;\n303\t test.x = testX;\n304\t test.y = testY;\n305\t test.rotation = newRot;\n306\t\n307\t if (!this.collides(test, this.board)) {\n308\t this.current.matrix = newMatrix;\n309\t this.current.x = testX;\n310\t this.current.y = testY;\n311\t this.current.rotation = newRot;\n312\t return;\n313\t }\n314\t }\n315\t }\n316\t\n317\t // ── Hold ──\n318\t\n319\t private holdPiece() {\n320\t if (!this.canHold) return;\n321\t this.canHold = false;\n322\t if (this.held) {\n323\t const tmp = this.held;\n324\t this.held = new Piece(this.current.key);\n325\t this.current = new Piece(tmp.key);\n326\t } else {\n327\t this.held = new Piece(this.current.key);\n328\t this.spawn();\n329\t }\n330\t this.drawHold();\n331\t }\n332\t\n333\t // ── Lock and clear lines ──\n334\t\n335\t private lock() {\n336\t // Place piece onto board\n337\t for (let r = 0; r < this.current.matrix.length; r++) {\n338\t for (let c = 0; c < this.current.matrix[r].length; c++) {\n339\t if (!this.current.matrix[r][c]) continue;\n340\t const ny = this.current.y + r;\n341\t const nx = this.current.x + c;\n342\t if (ny < 0) {\n343\t this.triggerGameOver();\n344\t return;\n345\t }\n346\t this.board[ny][nx] = { color: this.current.color };\n347\t }\n348\t }\n349\t\n350\t // Clear full lines\n351\t let cleared = 0;\n352\t for (let r = ROWS - 1; r >= 0; r--) {\n353\t if (this.board[r].every((cell) => cell !== null)) {\n354\t this.board.splice(r, 1);\n355\t this.board.unshift(Array(COLS).fill(null));\n356\t cleared++;\n357\t r++; // Re-check same row index\n358\t }\n359\t }\n360\t\n361\t if (cleared > 0) {\n362\t this.lines += cleared;\n363\t this.score += LINE_POINTS[cleared] * this.level;\n364\t this.level = Math.floor(this.lines / 10) + 1;\n365\t this.updateScore();\n366\t }\n367\t\n368\t this.canHold = true;\n369\t this.spawn();\n370\t }\n371\t\n372\t private spawn() {\n373\t this.current = this.next;\n374\t this.next = this.randomPiece();\n375\t if (this.collides(this.current, this.board)) {\n376\t this.triggerGameOver();\n377\t }\n378\t this.drawNext();\n379\t }\n380\t\n381\t // ── Game State ──\n382\t\n383\t start() {\n384\t if (this.gameOver) {\n385\t this.reset();\n386\t }\n387\t this.started = true;\n388\t this.paused = false;\n389\t this.hideMessage();\n390\t this.lastTime = performance.now();\n391\t this.dropTimer = 0;\n392\t cancelAnimationFrame(this.rafId);\n393\t this.rafId = requestAnimationFrame((t) => this.loop(t));\n394\t }\n395\t\n396\t private reset() {\n397\t this.board = createBoard();\n398\t this.held = null;\n399\t this.canHold = true;\n400\t this.score = 0;\n401\t this.level = 1;\n402\t this.lines = 0;\n403\t this.gameOver = false;\n404\t this.current = this.randomPiece();\n405\t this.next = this.randomPiece();\n406\t this.updateScore();\n407\t this.drawHold();\n408\t this.drawNext();\n409\t }\n410\t\n411\t togglePause() {\n412\t if (!this.started || this.gameOver) return;\n413\t this.paused = !this.paused;\n414\t if (this.paused) {\n415\t cancelAnimationFrame(this.rafId);\n416\t this.showMessage(\"PAUSA\", \"Pulsa P para continuar\");\n417\t } else {\n418\t this.hideMessage();\n419\t this.lastTime = performance.now();\n420\t this.rafId = requestAnimationFrame((t) => this.loop(t));\n421\t }\n422\t }\n423\t\n424\t private triggerGameOver() {\n425\t this.gameOver = true;\n426\t this.started = false;\n427\t cancelAnimationFrame(this.rafId);\n428\t this.showMessage(\"GAME OVER\", `Puntuación: ${this.score}<br>Pulsa Enter para reiniciar`);\n429\t }\n430\t\n431\t // ── Game Loop ──\n432\t\n433\t private loop(timestamp: number) {\n434\t const delta = timestamp - this.lastTime;\n435\t this.lastTime = timestamp;\n436\t this.dropTimer += delta;\n437\t\n438\t if (this.dropTimer >= dropInterval(this.level)) {\n439\t this.dropTimer = 0;\n440\t const p = this.current.clone();\n441\t p.y++;\n442\t if (!this.collides(p, this.board)) {\n443\t this.current.y++;\n444\t } else {\n445\t this.lock();\n446\t }\n447\t }\n448\t\n449\t this.drawAll();\n450\t if (!this.gameOver && !this.paused) {\n451\t this.rafId = requestAnimationFrame((t) => this.loop(t));\n452\t }\n453\t }\n454\t\n455\t // ── Drawing ──\n456\t\n457\t private drawBlock(\n458\t ctx: CanvasRenderingContext2D,\n459\t x: number,\n460\t y: number,\n461\t color: Color,\n462\t size = BLOCK,\n463\t alpha = 1\n464\t ) {\n465\t ctx.globalAlpha = alpha;\n466\t // Fill\n467\t ctx.fillStyle = color;\n468\t ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n469\t // Highlight (top-left)\n470\t ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n471\t ctx.fillRect(x * size + 1, y * size + 1, size - 2, 4);\n472\t ctx.fillRect(x * size + 1, y * size + 1, 4, size - 2);\n473\t // Shadow (bottom-right)\n474\t ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n475\t ctx.fillRect(x * size + 1, y * size + size - 5, size - 2, 4);\n476\t ctx.fillRect(x * size + size - 5, y * size + 1, 4, size - 2);\n477\t ctx.globalAlpha = 1;\n478\t }\n479\t\n480\t private drawBoard() {\n481\t const ctx = this.boardCtx;\n482\t ctx.clearRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n483\t\n484\t // Grid background\n485\t ctx.fillStyle = \"#0a0a1a\";\n486\t ctx.fillRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n487\t\n488\t // Grid lines\n489\t ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n490\t ctx.lineWidth = 1;\n491\t for (let r = 0; r < ROWS; r++) {\n492\t ctx.beginPath();\n493\t ctx.moveTo(0, r * BLOCK);\n494\t ctx.lineTo(COLS * BLOCK, r * BLOCK);\n495\t ctx.stroke();\n496\t }\n497\t for (let c = 0; c <= COLS; c++) {\n498\t ctx.beginPath();\n499\t ctx.moveTo(c * BLOCK, 0);\n500\t ctx.lineTo(c * BLOCK, ROWS * BLOCK);\n501\t ctx.stroke();\n502\t }\n503\t\n504\t // Locked cells\n505\t for (let r = 0; r < ROWS; r++) {\n506\t for (let c = 0; c < COLS; c++) {\n507\t if (this.board[r][c]) {\n508\t this.drawBlock(ctx, c, r, this.board[r][c]!.color);\n509\t }\n510\t }\n511\t }\n512\t\n513\t // Ghost piece\n514\t const ghost = this.ghostPiece();\n515\t for (let r = 0; r < ghost.matrix.length; r++) {\n516\t for (let c = 0; c < ghost.matrix[r].length; c++) {\n517\t if (ghost.matrix[r][c]) {\n518\t const nx = ghost.x + c;\n519\t const ny = ghost.y + r;\n520\t if (ny >= 0) {\n521\t ctx.globalAlpha = 0.25;\n522\t ctx.fillStyle = this.current.color;\n523\t ctx.fillRect(nx * BLOCK + 1, ny * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n524\t ctx.strokeStyle = this.current.color;\n525\t ctx.lineWidth = 2;\n526\t ctx.strokeRect(nx * BLOCK + 2, ny * BLOCK + 2, BLOCK - 4, BLOCK - 4);\n527\t ctx.globalAlpha = 1;\n528\t }\n529\t }\n530\t }\n531\t }\n532\t\n533\t // Current piece\n534\t for (let r = 0; r < this.current.matrix.length; r++) {\n535\t for (let c = 0; c < this.current.matrix[r].length; c++) {\n536\t if (this.current.matrix[r][c]) {\n537\t const nx = this.current.x + c;\n538\t const ny = this.current.y + r;\n539\t if (ny >= 0) {\n540\t this.drawBlock(ctx, nx, ny, this.current.color);\n541\t }\n542\t }\n543\t }\n544\t }\n545\t }\n546\t\n547\t private drawPieceInCanvas(\n548\t ctx: CanvasRenderingContext2D,\n549\t canvas: HTMLCanvasElement,\n550\t piece: Piece | null\n551\t ) {\n552\t ctx.clearRect(0, 0, canvas.width, canvas.height);\n553\t ctx.fillStyle = \"#0a0a1a\";\n554\t ctx.fillRect(0, 0, canvas.width, canvas.height);\n555\t\n556\t if (!piece) return;\n557\t\n558\t const m = piece.matrix;\n559\t const cols = m[0].length;\n560\t const rows = m.length;\n561\t\n562\t // Count actual bounding box\n563\t let minC = cols, maxC = 0, minR = rows, maxR = 0;\n564\t for (let r = 0; r < rows; r++) {\n565\t for (let c = 0; c < cols; c++) {\n566\t if (m[r][c]) {\n567\t minC = Math.min(minC, c);\n568\t maxC = Math.max(maxC, c);\n569\t minR = Math.min(minR, r);\n570\t maxR = Math.max(maxR, r);\n571\t }\n572\t }\n573\t }\n574\t const pw = (maxC - minC + 1) * PREVIEW_BLOCK;\n575\t const ph = (maxR - minR + 1) * PREVIEW_BLOCK;\n576\t const ox = Math.floor((canvas.width - pw) / 2) / PREVIEW_BLOCK - minC;\n577\t const oy = Math.floor((canvas.height - ph) / 2) / PREVIEW_BLOCK - minR;\n578\t\n579\t for (let r = 0; r < rows; r++) {\n580\t for (let c = 0; c < cols; c++) {\n581\t if (m[r][c]) {\n582\t this.drawBlock(ctx, c + ox, r + oy, piece.color, PREVIEW_BLOCK);\n583\t }\n584\t }\n585\t }\n586\t }\n587\t\n588\t private drawNext() {\n589\t this.drawPieceInCanvas(this.nextCtx, this.nextCanvas, this.next);\n590\t }\n591\t\n592\t private drawHold() {\n593\t this.drawPieceInCanvas(this.holdCtx, this.holdCanvas, this.held);\n594\t }\n595\t\n596\t private drawAll() {\n597\t this.drawBoard();\n598\t }\n599\t\n600\t // ── UI helpers ──\n601\t\n602\t private updateScore() {\n603\t this.scoreEl.textContent = String(this.score);\n604\t this.levelEl.textContent = String(this.level);\n605\t this.linesEl.textContent = String(this.lines);\n606\t }\n607\t\n608\t private showMessage(title: string, sub: string) {\n609\t this.messageEl.innerHTML = `<div class=\"msg-title\">${title}</div><div class=\"msg-sub\">${sub}</div>`;\n610\t this.messageEl.style.display = \"flex\";\n611\t }\n612\t\n613\t private hideMessage() {\n614\t this.messageEl.style.display = \"none\";\n615\t }\n616\t\n617\t // ── Keyboard ──\n618\t\n619\t private bindKeys() {\n620\t document.addEventListener(\"keydown\", (e) => {\n621\t // Always allow start/restart\n622\t if (e.code === \"Enter\" || (e.code === \"Space\" && !this.started)) {\n623\t e.preventDefault();\n624\t this.start();\n625\t return;\n626\t }\n627\t if (!this.started || this.gameOver) return;\n628\t if (e.code === \"KeyP\") {\n629\t this.togglePause();\n630\t return;\n631\t }\n632\t if (this.paused) return;\n633\t\n634\t switch (e.code) {\n635\t case \"ArrowLeft\":\n636\t e.preventDefault();\n637\t this.moveLeft();\n638\t break;\n639\t case \"ArrowRight\":\n640\t e.preventDefault();\n641\t this.moveRight();\n642\t break;\n643\t case \"ArrowDown\":\n644\t e.preventDefault();\n645\t this.softDrop();\n646\t break;\n647\t case \"ArrowUp\":\n648\t e.preventDefault();\n649\t this.rotate(1);\n650\t break;\n651\t case \"KeyZ\":\n652\t e.preventDefault();\n653\t this.rotate(-1);\n654\t break;\n655\t case \"Space\":\n656\t e.preventDefault();\n657\t this.hardDrop();\n658\t break;\n659\t case \"KeyC\":\n660\t case \"ShiftLeft\":\n661\t case \"ShiftRight\":\n662\t e.preventDefault();\n663\t this.holdPiece();\n664\t break;\n665\t }\n666\t });\n667\t }\n668\t}\n669\t\n670\t// ─── Entry Point ──────────────────────────────────────────────────────────────\n671\t\n672\twindow.addEventListener(\"DOMContentLoaded\", () => {\n673\t new TetrisGame();\n674\t});\n675\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"88caebb5-6132-49e7-9aae-39521591d1f5","timestamp":"2026-04-03T21:00:55.258Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-sdedmh6w/src/tetris.ts","content":"// ─── Constants ────────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 32;\nconst PREVIEW_BLOCK = 24;\n\n// Points per line clear (multiplied by level)\nconst LINE_POINTS = [0, 100, 300, 500, 800];\n\n// Drop interval in ms per level (level 1 = 800ms, decreases until level 20 = 50ms)\nfunction dropInterval(level: number): number {\n return Math.max(50, 800 - (level - 1) * 40);\n}\n\n// ─── Tetromino Definitions ────────────────────────────────────────────────────\n\ntype Color = string;\ntype Matrix = number[][];\n\ninterface TetrominoDef {\n shape: Matrix;\n color: Color;\n}\n\nconst PIECES: Record<string, TetrominoDef> = {\n I: {\n color: \"#00cfcf\",\n shape: [\n [0, 0, 0, 0],\n [1, 1, 1, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n ],\n },\n O: {\n color: \"#cfcf00\",\n shape: [\n [1, 1],\n [1, 1],\n ],\n },\n T: {\n color: \"#9f00cf\",\n shape: [\n [0, 1, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n S: {\n color: \"#00cf00\",\n shape: [\n [0, 1, 1],\n [1, 1, 0],\n [0, 0, 0],\n ],\n },\n Z: {\n color: \"#cf0000\",\n shape: [\n [1, 1, 0],\n [0, 1, 1],\n [0, 0, 0],\n ],\n },\n J: {\n color: \"#0000cf\",\n shape: [\n [1, 0, 0],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n L: {\n color: \"#cf7f00\",\n shape: [\n [0, 0, 1],\n [1, 1, 1],\n [0, 0, 0],\n ],\n },\n};\n\nconst PIECE_KEYS = Object.keys(PIECES);\n\n// Wall-kick offsets for J/L/T/S/Z (SRS)\nconst KICKS_JLTSZ: [number, number][][] = [\n [[0, 0], [-1, 0], [-1, 1], [0, -2], [-1, -2]], // 0→1\n [[0, 0], [1, 0], [1, -1], [0, 2], [1, 2]], // 1→2\n [[0, 0], [1, 0], [1, 1], [0, -2], [1, -2]], // 2→3\n [[0, 0], [-1, 0], [-1, -1], [0, 2], [-1, 2]], // 3→0\n];\n\n// Wall-kick offsets for I\nconst KICKS_I: [number, number][][] = [\n [[0, 0], [-2, 0], [1, 0], [-2, -1], [1, 2]], // 0→1\n [[0, 0], [-1, 0], [2, 0], [-1, 2], [2, -1]], // 1→2\n [[0, 0], [2, 0], [-1, 0], [2, 1], [-1, -2]], // 2→3\n [[0, 0], [1, 0], [-2, 0], [1, -2], [-2, 1]], // 3→0\n];\n\n// ─── Piece Class ──────────────────────────────────────────────────────────────\n\nclass Piece {\n key: string;\n color: Color;\n matrix: Matrix;\n x: number;\n y: number;\n rotation: number; // 0..3\n\n constructor(key: string) {\n this.key = key;\n this.color = PIECES[key].color;\n this.matrix = PIECES[key].shape.map((r) => [...r]);\n this.rotation = 0;\n this.x = Math.floor(COLS / 2) - Math.floor(this.matrix[0].length / 2);\n this.y = key === \"I\" ? -1 : 0;\n }\n\n clone(): Piece {\n const p = new Piece(this.key);\n p.matrix = this.matrix.map((r) => [...r]);\n p.x = this.x;\n p.y = this.y;\n p.rotation = this.rotation;\n return p;\n }\n}\n\n// ─── Rotation helpers ─────────────────────────────────────────────────────────\n\nfunction rotateMatrix(matrix: Matrix, dir: 1 | -1): Matrix {\n const N = matrix.length;\n const rotated: Matrix = Array.from({ length: N }, () => Array(N).fill(0));\n for (let r = 0; r < N; r++) {\n for (let c = 0; c < matrix[r].length; c++) {\n if (dir === 1) {\n rotated[c][N - 1 - r] = matrix[r][c];\n } else {\n rotated[N - 1 - c][r] = matrix[r][c];\n }\n }\n }\n return rotated;\n}\n\n// ─── Board ────────────────────────────────────────────────────────────────────\n\ntype Cell = { color: Color } | null;\ntype Board = Cell[][];\n\nfunction createBoard(): Board {\n return Array.from({ length: ROWS }, () => Array(COLS).fill(null));\n}\n\n// ─── Game ─────────────────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private board: Board;\n private current: Piece;\n private next: Piece;\n private held: Piece | null = null;\n private canHold = true;\n\n private score = 0;\n private level = 1;\n private lines = 0;\n\n private gameOver = false;\n private paused = false;\n private started = false;\n\n private dropTimer = 0;\n private lastTime = 0;\n private rafId = 0;\n\n // Canvas elements\n private boardCanvas: HTMLCanvasElement;\n private boardCtx: CanvasRenderingContext2D;\n private nextCanvas: HTMLCanvasElement;\n private nextCtx: CanvasRenderingContext2D;\n private holdCanvas: HTMLCanvasElement;\n private holdCtx: CanvasRenderingContext2D;\n\n // UI elements\n private scoreEl: HTMLElement;\n private levelEl: HTMLElement;\n private linesEl: HTMLElement;\n private messageEl: HTMLElement;\n\n constructor() {\n this.boardCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n this.boardCtx = this.boardCanvas.getContext(\"2d\")!;\n this.nextCanvas = document.getElementById(\"next\") as HTMLCanvasElement;\n this.nextCtx = this.nextCanvas.getContext(\"2d\")!;\n this.holdCanvas = document.getElementById(\"hold\") as HTMLCanvasElement;\n this.holdCtx = this.holdCanvas.getContext(\"2d\")!;\n\n this.scoreEl = document.getElementById(\"score\")!;\n this.levelEl = document.getElementById(\"level\")!;\n this.linesEl = document.getElementById(\"lines\")!;\n this.messageEl = document.getElementById(\"message\")!;\n\n this.board = createBoard();\n this.current = this.randomPiece();\n this.next = this.randomPiece();\n\n this.bindKeys();\n this.showMessage(\"TETRIS\", \"Pulsa Enter o Espacio para comenzar\");\n this.drawAll();\n }\n\n // ── Piece Factory ──\n\n private randomPiece(): Piece {\n const key = PIECE_KEYS[Math.floor(Math.random() * PIECE_KEYS.length)];\n return new Piece(key);\n }\n\n // ── Collision ──\n\n private collides(piece: Piece, board: Board): boolean {\n for (let r = 0; r < piece.matrix.length; r++) {\n for (let c = 0; c < piece.matrix[r].length; c++) {\n if (!piece.matrix[r][c]) continue;\n const nx = piece.x + c;\n const ny = piece.y + r;\n if (nx < 0 || nx >= COLS || ny >= ROWS) return true;\n if (ny >= 0 && board[ny][nx]) return true;\n }\n }\n return false;\n }\n\n // ── Ghost piece ──\n\n private ghostPiece(): Piece {\n const ghost = this.current.clone();\n while (!this.collides(ghost, this.board)) {\n ghost.y++;\n }\n ghost.y--;\n return ghost;\n }\n\n // ── Movement ──\n\n private moveLeft() {\n const p = this.current.clone();\n p.x--;\n if (!this.collides(p, this.board)) this.current.x--;\n }\n\n private moveRight() {\n const p = this.current.clone();\n p.x++;\n if (!this.collides(p, this.board)) this.current.x++;\n }\n\n private softDrop() {\n const p = this.current.clone();\n p.y++;\n if (!this.collides(p, this.board)) {\n this.current.y++;\n this.score += 1;\n this.updateScore();\n this.dropTimer = 0;\n } else {\n this.lock();\n }\n }\n\n private hardDrop() {\n const ghost = this.ghostPiece();\n const dropped = ghost.y - this.current.y;\n this.score += dropped * 2;\n this.current.y = ghost.y;\n this.updateScore();\n this.lock();\n }\n\n // ── Rotation (SRS) ──\n\n private rotate(dir: 1 | -1) {\n const original = this.current.clone();\n const newMatrix = rotateMatrix(this.current.matrix, dir);\n const newRot = ((this.current.rotation + dir) + 4) % 4;\n\n // Select kick table\n const kicks = this.current.key === \"I\" ? KICKS_I : KICKS_JLTSZ;\n // Index into kick table: clockwise uses newRot-1 direction\n const kickIdx = dir === 1 ? this.current.rotation : newRot;\n const offsets = kicks[kickIdx];\n\n for (const [ox, oy] of offsets) {\n const testX = original.x + (dir === 1 ? ox : -ox);\n const testY = original.y + (dir === 1 ? -oy : oy);\n\n const test = original.clone();\n test.matrix = newMatrix;\n test.x = testX;\n test.y = testY;\n test.rotation = newRot;\n\n if (!this.collides(test, this.board)) {\n this.current.matrix = newMatrix;\n this.current.x = testX;\n this.current.y = testY;\n this.current.rotation = newRot;\n return;\n }\n }\n }\n\n // ── Hold ──\n\n private holdPiece() {\n if (!this.canHold) return;\n this.canHold = false;\n if (this.held) {\n const tmp = this.held;\n this.held = new Piece(this.current.key);\n this.current = new Piece(tmp.key);\n } else {\n this.held = new Piece(this.current.key);\n this.spawn();\n }\n this.drawHold();\n }\n\n // ── Lock and clear lines ──\n\n private lock() {\n // Place piece onto board\n for (let r = 0; r < this.current.matrix.length; r++) {\n for (let c = 0; c < this.current.matrix[r].length; c++) {\n if (!this.current.matrix[r][c]) continue;\n const ny = this.current.y + r;\n const nx = this.current.x + c;\n if (ny < 0) {\n this.triggerGameOver();\n return;\n }\n this.board[ny][nx] = { color: this.current.color };\n }\n }\n\n // Clear full lines\n let cleared = 0;\n for (let r = ROWS - 1; r >= 0; r--) {\n if (this.board[r].every((cell) => cell !== null)) {\n this.board.splice(r, 1);\n this.board.unshift(Array(COLS).fill(null));\n cleared++;\n r++; // Re-check same row index\n }\n }\n\n if (cleared > 0) {\n this.lines += cleared;\n this.score += LINE_POINTS[cleared] * this.level;\n this.level = Math.floor(this.lines / 10) + 1;\n this.updateScore();\n }\n\n this.canHold = true;\n this.spawn();\n }\n\n private spawn() {\n this.current = this.next;\n this.next = this.randomPiece();\n if (this.collides(this.current, this.board)) {\n this.triggerGameOver();\n }\n this.drawNext();\n }\n\n // ── Game State ──\n\n start() {\n if (this.gameOver) {\n this.reset();\n }\n this.started = true;\n this.paused = false;\n this.hideMessage();\n this.lastTime = performance.now();\n this.dropTimer = 0;\n cancelAnimationFrame(this.rafId);\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n\n private reset() {\n this.board = createBoard();\n this.held = null;\n this.canHold = true;\n this.score = 0;\n this.level = 1;\n this.lines = 0;\n this.gameOver = false;\n this.current = this.randomPiece();\n this.next = this.randomPiece();\n this.updateScore();\n this.drawHold();\n this.drawNext();\n }\n\n togglePause() {\n if (!this.started || this.gameOver) return;\n this.paused = !this.paused;\n if (this.paused) {\n cancelAnimationFrame(this.rafId);\n this.showMessage(\"PAUSA\", \"Pulsa P para continuar\");\n } else {\n this.hideMessage();\n this.lastTime = performance.now();\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n }\n\n private triggerGameOver() {\n this.gameOver = true;\n this.started = false;\n cancelAnimationFrame(this.rafId);\n this.showMessage(\"GAME OVER\", `Puntuación: ${this.score}<br>Pulsa Enter para reiniciar`);\n }\n\n // ── Game Loop ──\n\n private loop(timestamp: number) {\n const delta = timestamp - this.lastTime;\n this.lastTime = timestamp;\n this.dropTimer += delta;\n\n if (this.dropTimer >= dropInterval(this.level)) {\n this.dropTimer = 0;\n const p = this.current.clone();\n p.y++;\n if (!this.collides(p, this.board)) {\n this.current.y++;\n } else {\n this.lock();\n }\n }\n\n this.drawAll();\n if (!this.gameOver && !this.paused) {\n this.rafId = requestAnimationFrame((t) => this.loop(t));\n }\n }\n\n // ── Drawing ──\n\n private drawBlock(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n color: Color,\n size = BLOCK,\n alpha = 1\n ) {\n ctx.globalAlpha = alpha;\n // Fill\n ctx.fillStyle = color;\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, size - 2);\n // Highlight (top-left)\n ctx.fillStyle = \"rgba(255,255,255,0.3)\";\n ctx.fillRect(x * size + 1, y * size + 1, size - 2, 4);\n ctx.fillRect(x * size + 1, y * size + 1, 4, size - 2);\n // Shadow (bottom-right)\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x * size + 1, y * size + size - 5, size - 2, 4);\n ctx.fillRect(x * size + size - 5, y * size + 1, 4, size - 2);\n ctx.globalAlpha = 1;\n }\n\n private drawBoard() {\n const ctx = this.boardCtx;\n ctx.clearRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n\n // Grid background\n ctx.fillStyle = \"#0a0a1a\";\n ctx.fillRect(0, 0, this.boardCanvas.width, this.boardCanvas.height);\n\n // Grid lines\n ctx.strokeStyle = \"rgba(255,255,255,0.04)\";\n ctx.lineWidth = 1;\n for (let r = 0; r < ROWS; r++) {\n ctx.beginPath();\n ctx.moveTo(0, r * BLOCK);\n ctx.lineTo(COLS * BLOCK, r * BLOCK);\n ctx.stroke();\n }\n for (let c = 0; c <= COLS; c++) {\n ctx.beginPath();\n ctx.moveTo(c * BLOCK, 0);\n ctx.lineTo(c * BLOCK, ROWS * BLOCK);\n ctx.stroke();\n }\n\n // Locked cells\n for (let r = 0; r < ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n if (this.board[r][c]) {\n this.drawBlock(ctx, c, r, this.board[r][c]!.color);\n }\n }\n }\n\n // Ghost piece\n const ghost = this.ghostPiece();\n for (let r = 0; r < ghost.matrix.length; r++) {\n for (let c = 0; c < ghost.matrix[r].length; c++) {\n if (ghost.matrix[r][c]) {\n const nx = ghost.x + c;\n const ny = ghost.y + r;\n if (ny >= 0) {\n ctx.globalAlpha = 0.25;\n ctx.fillStyle = this.current.color;\n ctx.fillRect(nx * BLOCK + 1, ny * BLOCK + 1, BLOCK - 2, BLOCK - 2);\n ctx.strokeStyle = this.current.color;\n ctx.lineWidth = 2;\n ctx.strokeRect(nx * BLOCK + 2, ny * BLOCK + 2, BLOCK - 4, BLOCK - 4);\n ctx.globalAlpha = 1;\n }\n }\n }\n }\n\n // Current piece\n for (let r = 0; r < this.current.matrix.length; r++) {\n for (let c = 0; c < this.current.matrix[r].length; c++) {\n if (this.current.matrix[r][c]) {\n const nx = this.current.x + c;\n const ny = this.current.y + r;\n if (ny >= 0) {\n this.drawBlock(ctx, nx, ny, this.current.color);\n }\n }\n }\n }\n }\n\n private drawPieceInCanvas(\n ctx: CanvasRenderingContext2D,\n canvas: HTMLCanvasElement,\n piece: Piece | null\n ) {\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.fillStyle = \"#0a0a1a\";\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n if (!piece) return;\n\n const m = piece.matrix;\n const cols = m[0].length;\n const rows = m.length;\n\n // Count actual bounding box\n let minC = cols, maxC = 0, minR = rows, maxR = 0;\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (m[r][c]) {\n minC = Math.min(minC, c);\n maxC = Math.max(maxC, c);\n minR = Math.min(minR, r);\n maxR = Math.max(maxR, r);\n }\n }\n }\n const pw = (maxC - minC + 1) * PREVIEW_BLOCK;\n const ph = (maxR - minR + 1) * PREVIEW_BLOCK;\n const ox = Math.floor((canvas.width - pw) / 2) / PREVIEW_BLOCK - minC;\n const oy = Math.floor((canvas.height - ph) / 2) / PREVIEW_BLOCK - minR;\n\n for (let r = 0; r < rows; r++) {\n for (let c = 0; c < cols; c++) {\n if (m[r][c]) {\n this.drawBlock(ctx, c + ox, r + oy, piece.color, PREVIEW_BLOCK);\n }\n }\n }\n }\n\n private drawNext() {\n this.drawPieceInCanvas(this.nextCtx, this.nextCanvas, this.next);\n }\n\n private drawHold() {\n this.drawPieceInCanvas(this.holdCtx, this.holdCanvas, this.held);\n }\n\n private drawAll() {\n this.drawBoard();\n }\n\n // ── UI helpers ──\n\n private updateScore() {\n this.scoreEl.textContent = String(this.score);\n this.levelEl.textContent = String(this.level);\n this.linesEl.textContent = String(this.lines);\n }\n\n private showMessage(title: string, sub: string) {\n this.messageEl.innerHTML = `<div class=\"msg-title\">${title}</div><div class=\"msg-sub\">${sub}</div>`;\n this.messageEl.style.display = \"flex\";\n }\n\n private hideMessage() {\n this.messageEl.style.display = \"none\";\n }\n\n // ── Keyboard ──\n\n private bindKeys() {\n document.addEventListener(\"keydown\", (e) => {\n // Always allow start/restart\n if (e.code === \"Enter\" || (e.code === \"Space\" && !this.started)) {\n e.preventDefault();\n this.start();\n return;\n }\n if (!this.started || this.gameOver) return;\n if (e.code === \"KeyP\") {\n this.togglePause();\n return;\n }\n if (this.paused) return;\n\n switch (e.code) {\n case \"ArrowLeft\":\n e.preventDefault();\n this.moveLeft();\n break;\n case \"ArrowRight\":\n e.preventDefault();\n this.moveRight();\n break;\n case \"ArrowDown\":\n e.preventDefault();\n this.softDrop();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n this.rotate(1);\n break;\n case \"KeyZ\":\n e.preventDefault();\n this.rotate(-1);\n break;\n case \"Space\":\n e.preventDefault();\n this.hardDrop();\n break;\n case \"KeyC\":\n case \"ShiftLeft\":\n case \"ShiftRight\":\n e.preventDefault();\n this.holdPiece();\n break;\n }\n });\n }\n}\n\n// ─── Entry Point ──────────────────────────────────────────────────────────────\n\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\n","numLines":675,"startLine":1,"totalLines":675}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DXb11STGjkdp5zZPWSY31e","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The code looks good. Let me also verify the final file structure is correct and complete.","signature":"EpYCClsIDBgCKkA4BlpSXlc7MttPDfMH+qDgA1RzISv22HiPwidVgtmCFyHYpoOvJUTRZdMfYDCvC1cw2Td7hnpPGpBfZGmmAGyoMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgyTpNAxbvzfrvX4CucaDC1JGE9nSwckzups5SIw5wyv+0iSBpphCRTrwbxmugmrM5GIgm7jNfO2q5Sz60/waWsmBr5X100MnzLEyvO6Kmk/lm7VnZ8evgfpODJMif6ODq7KlxlE5Q0wKXvmIkFGeVW0ET3UKWwvxnxAXvV8ZapkRcKV2YhER0mYD1fO8rvQJoYLyhR9ZuBlgLOWFF2BI5bT3fLoJ+EBmOCnBYIq7hOkUPNu62FUDywYAQ=="}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8128,"cache_read_input_tokens":18246,"cache_creation":{"ephemeral_5m_input_tokens":8128,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"2648a470-455e-4d9b-bb24-57e6ba85014b"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DXb11STGjkdp5zZPWSY31e","type":"message","role":"assistant","content":[{"type":"text","text":"Todo está correcto. Verifiquemos la estructura final del proyecto completo:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8128,"cache_read_input_tokens":18246,"cache_creation":{"ephemeral_5m_input_tokens":8128,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"9dc5e7ac-2e5d-4218-9518-03c995e36aed"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01DXb11STGjkdp5zZPWSY31e","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01CkigsRjNkq9KnepqUARFw4","name":"Bash","input":{"command":"echo \"=== Estructura del proyecto ===\" && find /tmp/loop-bench-sdedmh6w -not -path \"*/node_modules/*\" -not -path \"*/.git/*\" | sort && echo \"\" && echo \"=== package.json scripts ===\" && node -e \"const p=require('./package.json'); console.log(JSON.stringify(p.scripts,null,2))\"","description":"Show final project structure and scripts"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":8128,"cache_read_input_tokens":18246,"cache_creation":{"ephemeral_5m_input_tokens":8128,"ephemeral_1h_input_tokens":0},"output_tokens":8,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"128a553b-5cee-47fa-9f6e-da175e129433"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01CkigsRjNkq9KnepqUARFw4","type":"tool_result","content":"=== Estructura del proyecto ===\n/tmp/loop-bench-sdedmh6w\n/tmp/loop-bench-sdedmh6w/dist\n/tmp/loop-bench-sdedmh6w/dist/tetris.js\n/tmp/loop-bench-sdedmh6w/index.html\n/tmp/loop-bench-sdedmh6w/node_modules\n/tmp/loop-bench-sdedmh6w/package.json\n/tmp/loop-bench-sdedmh6w/package-lock.json\n/tmp/loop-bench-sdedmh6w/src\n/tmp/loop-bench-sdedmh6w/src/tetris.ts\n/tmp/loop-bench-sdedmh6w/tsconfig.json\n\n=== package.json scripts ===\n{\n \"build\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017\",\n \"watch\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n}","is_error":false}]},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"9746a3eb-fd9c-4cbd-b74a-598fa626a68e","timestamp":"2026-04-03T21:01:00.886Z","tool_use_result":{"stdout":"=== Estructura del proyecto ===\n/tmp/loop-bench-sdedmh6w\n/tmp/loop-bench-sdedmh6w/dist\n/tmp/loop-bench-sdedmh6w/dist/tetris.js\n/tmp/loop-bench-sdedmh6w/index.html\n/tmp/loop-bench-sdedmh6w/node_modules\n/tmp/loop-bench-sdedmh6w/package.json\n/tmp/loop-bench-sdedmh6w/package-lock.json\n/tmp/loop-bench-sdedmh6w/src\n/tmp/loop-bench-sdedmh6w/src/tetris.ts\n/tmp/loop-bench-sdedmh6w/tsconfig.json\n\n=== package.json scripts ===\n{\n \"build\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017\",\n \"watch\": \"esbuild src/tetris.ts --bundle --outfile=dist/tetris.js --target=es2017 --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n}","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01BfUQsNPyemi7KbzBPqvFMt","type":"message","role":"assistant","content":[{"type":"text","text":"El juego está completo y listo. Aquí un resumen de todo lo que se construyó:\n\n---\n\n## 🎮 Tetris — Resumen del proyecto\n\n### Archivos creados\n\n| Archivo | Descripción |\n|---|---|\n| `src/tetris.ts` | Código fuente TypeScript (~675 líneas) |\n| `dist/tetris.js` | Bundle compilado listo para el navegador (18 KB) |\n| `index.html` | Página completa con layout y estilos CSS |\n| `tsconfig.json` | Configuración de TypeScript |\n\n### Mecánicas implementadas\n\n**Gameplay estándar**\n- ✅ Las 7 piezas tetrominó (I, O, T, S, Z, J, L) con sus colores clásicos\n- ✅ Rotación con sistema **SRS** (*Super Rotation System*) + wall-kicks correctos para cada pieza\n- ✅ **Pieza fantasma** (ghost piece) que muestra dónde caerá\n- ✅ Eliminación de líneas (1–4 a la vez)\n- ✅ **Hold** — guardar una pieza para usarla después\n\n**Puntuación**\n- ✅ 100 / 300 / 500 / 800 pts según líneas limpias × nivel\n- ✅ +1 pt por cada celda de *soft drop*, +2 pts/celda de *hard drop*\n- ✅ Nivel sube cada 10 líneas\n\n**Velocidad creciente**\n- ✅ Nivel 1: 800 ms por bajada automática → Nivel 20+: mínimo 50 ms\n\n### Controles de teclado\n\n| Tecla | Acción |\n|---|---|\n| `◄ ►` | Mover izquierda / derecha |\n| `▲` | Rotar horario (CW) |\n| `Z` | Rotar antihorario (CCW) |\n| `▼` | Bajar suave (+1 pt) |\n| `Espacio` | Caída dura (+2 pts/celda) |\n| `C` / `Shift` | Guardar / intercambiar pieza (hold) |\n| `P` | Pausar / reanudar |\n| `Enter` | Iniciar / reiniciar |\n\n### Cómo ejecutar\n\n```bash\n# Abrir directamente en el navegador:\nopen index.html\n\n# O recompilar TypeScript con:\nnpm run build\n\n# Verificar tipos sin compilar:\nnpm run typecheck\n```"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":533,"cache_read_input_tokens":26374,"cache_creation":{"ephemeral_5m_input_tokens":533,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","uuid":"3ccdedbb-a5a3-4266-b35b-a177f35e557c"} -{"type":"result","subtype":"success","is_error":false,"duration_ms":274235,"duration_api_ms":272436,"num_turns":17,"result":"El juego está completo y listo. Aquí un resumen de todo lo que se construyó:\n\n---\n\n## 🎮 Tetris — Resumen del proyecto\n\n### Archivos creados\n\n| Archivo | Descripción |\n|---|---|\n| `src/tetris.ts` | Código fuente TypeScript (~675 líneas) |\n| `dist/tetris.js` | Bundle compilado listo para el navegador (18 KB) |\n| `index.html` | Página completa con layout y estilos CSS |\n| `tsconfig.json` | Configuración de TypeScript |\n\n### Mecánicas implementadas\n\n**Gameplay estándar**\n- ✅ Las 7 piezas tetrominó (I, O, T, S, Z, J, L) con sus colores clásicos\n- ✅ Rotación con sistema **SRS** (*Super Rotation System*) + wall-kicks correctos para cada pieza\n- ✅ **Pieza fantasma** (ghost piece) que muestra dónde caerá\n- ✅ Eliminación de líneas (1–4 a la vez)\n- ✅ **Hold** — guardar una pieza para usarla después\n\n**Puntuación**\n- ✅ 100 / 300 / 500 / 800 pts según líneas limpias × nivel\n- ✅ +1 pt por cada celda de *soft drop*, +2 pts/celda de *hard drop*\n- ✅ Nivel sube cada 10 líneas\n\n**Velocidad creciente**\n- ✅ Nivel 1: 800 ms por bajada automática → Nivel 20+: mínimo 50 ms\n\n### Controles de teclado\n\n| Tecla | Acción |\n|---|---|\n| `◄ ►` | Mover izquierda / derecha |\n| `▲` | Rotar horario (CW) |\n| `Z` | Rotar antihorario (CCW) |\n| `▼` | Bajar suave (+1 pt) |\n| `Espacio` | Caída dura (+2 pts/celda) |\n| `C` / `Shift` | Guardar / intercambiar pieza (hold) |\n| `P` | Pausar / reanudar |\n| `Enter` | Iniciar / reiniciar |\n\n### Cómo ejecutar\n\n```bash\n# Abrir directamente en el navegador:\nopen index.html\n\n# O recompilar TypeScript con:\nnpm run build\n\n# Verificar tipos sin compilar:\nnpm run typecheck\n```","stop_reason":"end_turn","session_id":"2973def3-8c7c-4937-bba7-f012e3048c1f","total_cost_usd":0.4678491000000001,"usage":{"input_tokens":21,"cache_creation_input_tokens":23116,"cache_read_input_tokens":211487,"output_tokens":21177,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":23116},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":21,"outputTokens":21177,"cacheReadInputTokens":211487,"cacheCreationInputTokens":23116,"webSearchRequests":0,"costUSD":0.4678491000000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"terminal_reason":"completed","fast_mode_state":"off","uuid":"95a7a642-b298-4ed4-b833-0e0ec8c8d43e"} diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":520636,"duration_api_ms":79951,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","total_cost_usd":0.6800476500000001,"usage":{"input_tokens":3,"cache_creation_input_tokens":521,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":521},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":45025,"cacheReadInputTokens":9003,"cacheCreationInputTokens":521,"webSearchRequests":0,"costUSD":0.6800476500000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"2d940faf-0bf5-4148-a19b-cd7a697c12bf","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 8, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 19 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "high", - "prompt_style": "simple", - "language": "typescript", - "human_language": "es", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:25:20.983132+00:00", - "wall_time_seconds": 521, - "exit_code": 1, - "completed_at": "2026-04-04T09:34:06.164569+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=high_human_language=es_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,8 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "high", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Construye un juego de Tetris jugable que funcione en un navegador web. Debe tener todas las mecanicas estandar: rotacion de piezas, eliminacion de lineas, puntuacion y velocidad creciente. Usa controles de teclado para el movimiento y la rotacion.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-8xq7n6a5","session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"c39036e2-6e98-4d17-a3ee-d3419c8bcc75","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01SHSxEa8UXZUYmwthhodgtA","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a web browser using TypeScript. Let me create a complete Tetris implementation with:\n\n1. All standard mechanics:\n - Piece rotation\n - Line clearing\n - Scoring\n - Increasing speed\n2. Keyboard controls for movement and rotation\n\nI'll create the project structure with:\n- `index.html` - The HTML file\n- `src/tetris.ts` - The TypeScript source\n- `package.json` - For TypeScript compilation\n- `tsconfig.json` - TypeScript configuration\n\nLet me plan the Tetris game:\n\n**Pieces (Tetrominoes):**\n\n\nI, O, T, S, Z, J, L pieces\n\n**Controls:**\n- Arrow Left/Right: Move piece\n- Arrow Down: Soft drop\n- Arrow Up or X: Rotate clockwise\n- Z: Rotate counter-clockwise\n- Space: Hard drop\n- P: Pause\n\n**Scoring:**\n- 1 line: 100 * level\n- 2 lines: 300 * level\n- 3 lines: 500 * level\n- 4 lines (Tetris): 800 * level\n\n**Level/Speed:**\n- Level increases every 10 lines\n- Speed increases with level\n\nNow I'm writing the TypeScript code...\n\nDefining the game constants and piece definitions...\n\nActually, I should step back and think about the overall structure more carefully. Rather than just defining constants and arrays, I need to plan out a complete TypeScript implementation with proper project setup. Let me create a well-organized project with a package.json, TypeScript configuration, and separate source files that can be compiled and run properly. I'm mapping out the complete Tetris implementation with all the core mechanics—piece movement, rotation with wall kicks, line clearing with proper scoring, level progression, and the hold/preview system. I'll structure this across a few files: the main game logic handling the board state and physics, an HTML file with the canvas and UI elements, and the necessary config files.\n\nWriting the game logic... Defining the tetromino shapes and wall kick offsets... Finishing up the wall kick data for the I piece, then moving into the scoring system with point values for different line clears and drop types, followed by the level progression speeds that determine how quickly pieces fall.\n\nNow I'm setting up the core data structures and utility functions for the game—defining the piece interface with its matrix, position, type, and rotation state, creating a helper to initialize the play field, and writing the rotation logic that handles both clockwise and counterclockwise turns.\n\nBuilding the TetrisGame class... Setting up the canvas contexts...\n\nNow I'm loading the saved high score from storage and initializing the overlay to show the start screen, then setting up the keyboard controls to detect when the player presses Enter or Space to begin the game.\n\nSetting up game controls... Setting up the game state by resetting the board, score, and level, then initializing the piece queue and starting the main game loop.\n\nNow I'm handling the pause toggle—when paused, I show an overlay prompting the player to resume, and when unpaused, I hide it and restart the game loop from the current time.\n\nContinuing with game mechanics... Writing collision detection and movement logic... Writing rotation logic...\n\nNow I'm implementing the soft drop and hard drop mechanics—soft drop moves the piece down one cell and awards points if successful, while hard drop continuously moves it down until it hits something, then locks it in place and awards points based on distance fallen. I'm also starting the hold piece functionality to let players swap their current piece with a stored one.\n\nSwapping pieces and resetting positions... Writing game logic... Writing game logic... Writing the block rendering... Writing the render loop... Writing the rendering logic...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":521,"cache_read_input_tokens":4241,"cache_creation":{"ephemeral_5m_input_tokens":521,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","uuid":"8b48b990-6a55-492d-bc3e-3b156c467926"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015hB2qcUUGwXPb1GCbVga9a","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that works in a browser using TypeScript. Let me create a complete Tetris game with all the standard mechanics:\n\n1. All 7 Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or space for rotation)\n\nI'll create a TypeScript-based Tetris game. Let me think about the structure:\n\n- `index.html` - Main HTML file\n\n\n- `src/game.ts` - The main game logic in TypeScript\n- `tsconfig.json` - TypeScript configuration\n- `package.json` - For build tools\n\nI'll use a simple TypeScript setup with `tsc` to compile to JavaScript. Now I'm designing the core game mechanics, starting with the board structure and piece definitions.\n\nI'm planning out all seven tetrominoes with their colors, then implementing the core gameplay features like gravity, movement controls, rotation with wall kicks, line clearing with scoring, and visual elements like the ghost piece and next piece preview. The scoring system will reward clearing multiple lines at once, and I'll add a hold piece mechanic and progressive difficulty as the level increases.\n\nWriting TypeScript code... Defining the piece shapes and colors... Writing the TypeScript implementation... I'm switching to a simpler approach using 4x4 bit matrices to represent each tetromino's rotation states, storing them as flattened arrays for easier manipulation. Writing the complete Tetris implementation... Setting up piece definitions... Defining the piece rotations... Defining piece rotations... I'm getting confused with the coordinate systems here. Let me step back and think about the standard Tetris piece definitions more carefully, starting with how the pieces are actually oriented in the official guidelines. I'm defining all seven Tetris pieces and their cell positions, then realizing I need to handle rotations systematically—rather than trying to calculate them with a formula, I'll just hardcode each rotation state for accuracy. I'm working through the J piece rotations in a 3x3 bounding box, trying to figure out the correct coordinates for each state as it rotates clockwise. I'm working through the remaining rotations to verify the pattern. After the third 90° rotation, I get the configuration at (1,0), (1,1), (1,2), and (2,2), which forms an inverted J shape. One more rotation should cycle back to the original state.\n\nNow I'm mapping out the L piece's rotation states in the same way, starting with its initial configuration and calculating each 90° clockwise rotation to establish all four possible orientations. Completing the rotation for the third state, I get (0,0)(0,1)(1,1)(2,1). Now I'm mapping out all four rotation states for the L-piece and moving on to the O-piece, which is simpler since it's a 2x2 square that looks the same in every rotation—just (0,0)(0,1)(1,0)(1,1) in a 3x3 grid.\n\nI'm realizing the grid sizing is getting messy with different pieces needing different dimensions, so I'm going to standardize everything to 4x4 bounding boxes. The I-piece will use all four rows, while J, L, S, T, and Z will use mostly the top three rows, and O will sit in the center. This way I can handle spawning and rotation consistently without special cases for each piece type.\n\nDefining piece rotations as matrix operations...\n\nI'm implementing a rotation function that transforms shapes 90 degrees clockwise by transposing and reversing, then applying it dynamically when the player rotates. Now I'm realizing there might be edge cases with certain pieces like the S-piece that need special handling.\n\nFor proper rotation mechanics, I need to implement the Super Rotation System with wall kick offsets—these are the fallback positions the piece tries when a direct rotation would collide with walls or other blocks. I'm working through the standard SRS wall kick tables for non-I pieces, which define a sequence of (column, row) offset positions to test in order during rotation attempts.\n\nNow I'm laying out the wall kick sequences for the I piece, which has different offset patterns since it's longer and rotates around a different pivot point.\n\nFor the rotation logic, I need to handle both clockwise and counterclockwise rotations—the CCW kicks will mirror the CW ones but with reversed state transitions and negated offsets.\n\nRather than getting bogged down in the wall kick complexity, I'll implement a complete Tetris game with all the core features: the seven pieces with proper rotation matrices, a simplified wall kick system, ghost and hold pieces, a next queue, line clearing with scoring, level progression, and game over detection.\n\nWriting the complete implementation... I'm going to write out the complete implementation now across multiple files. For the HTML, I'm setting up a clean layout with the game canvas in the center, flanked by panels for the held piece on the left and score, level, lines, and next pieces preview on the right.\n\nWriting the TypeScript code... Defining the piece data...\n\nNow I'm thinking through the wall kick system for rotations. I need to implement the standard SRS offsets that determine where pieces can shift when they rotate near walls or obstacles. For regular pieces, there are five possible offset positions to try in sequence when rotating clockwise, and the I piece has its own separate offset table since it rotates differently.\n\nFor counterclockwise rotations, I need to figure out the correct offset logic—it's not simply the reverse of the clockwise table, so I'm reconsidering how to properly handle CCW rotations. The tests check out—negating the CW wall kicks gives me the correct CCW offsets. Rather than deriving them each time, I'll just define the standard SRS wall kick tables directly in code, with separate entries for CW and CCW rotations across all state transitions.\n\nDefining wall kick tables... Defining wall kick offset tables for the I piece...\n\nActually, I need to reconsider the coordinate system here. In the SRS standard, offsets are given as (x, y) where x represents horizontal movement (positive rightward) and y represents vertical movement. I should make sure I'm using the correct convention for how y-axis direction works in my implementation. I need to convert the Tetris wiki wall kick data to my screen coordinate system where row increases downward instead of upward, so I'll negate all the y offsets from the wiki values. Defining wall kick offsets... Defining wall kick offsets for the I piece... Converting the coordinate system from the wiki format... I'm working through the rotation transformations for each state transition, mapping out how the column and row offsets change as the piece rotates between different orientations. Defining rotation kick offsets for the I piece... Writing the complete game... Defining the Tetris piece data... Defining wall kick tables... Defining the Piece class with spawn logic... pieces spawn in the top 2 rows (rows 0 and 1 in a 0-indexed 20-row board), but these rows are usually hidden. The visible board starts at row 2. \n\nActually, for simplicity, let me not have hidden rows. I'll spawn pieces at row 0 (top of visible board). For the I piece with the 4x4 grid where the piece occupies row 1, I'll offset the spawn row by -1 so the piece visually appears at the top.\n\nSo the I piece spawns at row -1, placing its actual blocks at row 0 where they're visible. For the 3x3 pieces like T, J, L, S, Z, spawning at row 0 puts the top row of the shape at the board's top edge, which works well since their blocks are mostly in rows 1 and 2 of the shape grid. I'm working out the spawn positions for each piece type—the I piece needs to start one row above the visible board so its occupied row aligns properly at the top, while the other standard pieces can spawn at row 0. I'll handle negative row indices by just clamping or offsetting them during rendering.\n\nNow I'm mapping out the scoring system with multipliers based on lines cleared and level, plus bonuses for soft and hard drops, with level progression every 10 lines. For the canvas layout, I'm planning a single render surface with the main 10x20 board in the center, a hold piece display on the left, and score/level/lines info plus a preview of the next three pieces on the right—I'll calculate the exact pixel dimensions based on a 30-pixel cell size. Writing the HTML and CSS...\n\nNow I'm thinking through the architecture more carefully—I need a proper game loop with `requestAnimationFrame`, separate update and draw functions, and a state machine to handle different phases like the menu, active gameplay, pausing, game over, and the line clear animation where I flash the rows before removing them.\n\nWriting the complete TypeScript implementation... Defining the spawn shapes for each tetromino piece at their initial rotation state, with each shape represented as a grid pattern showing where the blocks are positioned. Defining wall kick data... Writing rotation helper functions... Defining the piece interface and game state...\n\nNow I'm setting up the core game structure with the board, current piece, held piece, queue system, and tracking score, lines, level, and game state. I'll also need to manage the drop accumulator, lock delay mechanics, line clearing animations, and combo tracking. Then I'm initializing the canvas and getting the 2D rendering context ready to start building out the game loop.\n\nI'm planning the layout with a dark background, the hold piece display on the left, the main game board in the center with grid lines, and the stats panel on the right showing score, level, lines cleared, and the next three pieces. For the lock delay, I'll use a 0.5 second delay that resets whenever the piece moves or rotates. Game over triggers when a new piece spawns and immediately collides with existing blocks. I'm also implementing the standard 7-bag randomization system so each piece type appears exactly once before the bag resets.\n\nWriting the complete game code... Writing the Tetris implementation... Defining the game constants and piece data... Defining the wall-kick offset tables... Defining the wall kick offsets... Still writing helper functions... Setting up game state variables...\n\nNow I'm defining helper functions to validate piece positions and check collisions against the board boundaries and existing blocks.\n\nSetting up the piece queue system with a bag-based randomizer that refills when empty, then implementing the spawn logic that pulls from the queue, initializes game state flags, and checks for immediate game-over conditions.\n\nNow I'm implementing the rotation system using Super Rotation System (SRS) kicks, cloning the piece and trying different wall-kick offsets to find a valid rotated position.\n\nContinuing with movement logic...\n\nNow I'm handling the horizontal movement case—when the piece shifts left or right while on the ground, I reset the lock accumulator and increment the move counter to give the player more time before the piece locks. Then I move into the hard drop function, which instantly drops the piece to the bottom and awards points based on how far it fell. After that, I'm calculating the ghost piece position by simulating a drop to find where the piece would land, and finally implementing the lock function that places the piece permanently on the board.\n\nWriting lock logic... Writing game initialization... Setting up pause toggle and movement controls...\n\nNow I'm handling the game update loop, tracking elapsed time and processing line clears with their animation duration, then continuing with the active piece logic.\n\nImplementing delayed auto shift... Finishing the ground detection logic, then handling the lock delay timer that triggers when the piece sits on the ground. I'm reconsidering the overall structure though—this functional approach is getting unwieldy with all the state tracking for DAS and soft drop mechanics. A cleaner implementation would simplify the delayed auto-shift logic by tracking how long each direction has been held and moving once per frame when the timing thresholds are met.\n\nFor soft drop, I'll just scale the fall speed down when the down arrow is pressed. Now I'm planning the visual layout: a dark background with the main 300x600 game board in the center, flanked by sidebars showing the held piece on the left and score on the right, with grid lines and a ghost piece preview on the board itself.\n\nI'm also thinking through the line clear animation—flashing completed lines before they disappear—and sketching out the overall code structure with constants, game state, logic functions, input handling, and rendering. Now I'm ready to implement the full TypeScript solution, starting with the background and board rendering, then the ghost piece and locked pieces.\n\nFor spawning, I need to account for the buffer zone above the visible board where pieces initially appear, though I'll keep it simple by spawning at row 0 or -1 depending on the piece shape to avoid empty rows at the top.\n\nWhen checking for game over, I'll verify if any filled cells of the spawning piece collide with existing board cells, focusing on the visible rows where the piece actually appears.\n\nNow I'll start writing the implementation and handle edge cases as they come up.\n\nSetting up a clean TypeScript structure...\n\nActually, I'm going to skip the class approach and keep it simpler with module-level variables and functional code instead. I've been overthinking this—let me just write the actual implementation now. I'll use a straightforward setup: game state stored at the module level, pure functions for logic, canvas rendering, requestAnimationFrame for the loop, and event listeners for input. For the DAS system, I'm going to track when keys are pressed and trigger auto-repeat after a delay threshold rather than accumulating time per direction.\n\nImplementing DAS tracking... I'm settling on this approach with separate tracking for held keys and timers. Now I need to implement the full code with proper grid rendering—dark cells with subtle highlights for filled blocks, and a semi-transparent ghost piece to show where the piece will land. For soft drop, I'll use the keys Set to detect continuous down presses and apply the same timer-based logic I'm using for left and right movement.\n\nWriting the complete implementation... Defining the piece shapes and gravity speeds... Defining the wall-kick offset tables... Defining rotation helper functions... Continuing with the piece initialization and game state setup...\n\nI'm defining how pieces spawn on the board—the I-piece starts one row higher since its shape has a blank row at the top. Then I'm setting up the core game state variables: the board grid, the current falling piece, the held piece for swapping, the randomized bag of piece types, the preview queue, and score tracking.\n\nI'm also initializing timers for gravity-based dropping, lock delay (how long a piece can sit before locking), soft-drop speed, and line-clear animations. There's a game state machine to track whether we're in the menu, actively playing, paused, clearing lines, or game over. Finally, I'm establishing the timing constants—lock delay of 500ms with a max of 15 resets before the piece locks, line clear animation lasting 350ms, and soft-drop moving at 50ms per row.\n\nNow I'm setting up input handling with key tracking and auto-repeat timers for left and right movement, using DAS (delayed auto-shift) and ARR (auto-repeat rate) constants to control how quickly pieces move across the board. I'm registering keyboard listeners and preventing default browser behavior for game-relevant keys.\n\nHandling key presses by checking if we're in menu, paused, or playing states, then routing movement commands to the appropriate handlers while resetting movement timers when arrow keys are pressed. Writing game logic... Writing game mechanics... Finishing the hard drop and now implementing the ghost piece preview and piece locking logic. I'm calculating where the piece would land if dropped, then placing the piece on the board and checking for completed rows to clear. Still writing game logic... Handling input for left and right movement with delayed auto-repeat, then checking for soft drop input...\n\nStill writing game logic... Writing cell rendering logic... Writing the cell rendering function... Writing the color utility functions... Writing the ghost piece rendering...\n\nNow I'm putting together the complete rendering pipeline and main game loop, starting with the layout structure where the left sidebar holds the next piece preview and stats.\n\nSetting up the preview drawing function... Writing the complete implementation... Setting up the project configuration files...\n\nI need to fix the TypeScript configuration since `\"module\": \"None\"` doesn't work properly with `outFile`. For a straightforward single-file game, I'll configure it to bundle everything into one output file with ES2020 as the target, and let TypeScript handle the module system appropriately. Configuring TypeScript with `\"module\": \"None\"` and `\"outDir\": \"dist\"` will compile the single source file to `dist/tetris.js`.\n\nI need to verify the correct casing—it should be lowercase `\"none\"` according to the TypeScript handbook. With this setting, I won't be able to use import statements, but that's acceptable for a single-file game. I should also consider whether the strict compiler options might cause any issues with the implementation.\n\nNow I'm thinking through the type safety concerns—things like `ctx.getContext('2d')` returning a nullable type means I'll need to handle that properly, either with a type assertion or null checking. Let me start writing out the complete game structure, organizing it into sections for type definitions, constants, wall kick tables, helper functions, the piece factory, game state management, core logic, input handling, rendering, and the game loop. I'll make sure to handle all the edge cases as I go.\n\nWriting the Tetris game code...\n\nFor the scoring system, I want to keep it straightforward: base points for cleared lines scaled by level, plus bonuses for soft and hard drops. I'll add a simple combo multiplier that rewards consecutive line clears without overcomplicating things like T-spin detection.\n\nWriting the scoring implementation... I'm settling on the visual design now—dark blue-gray background for the main canvas, a slightly lighter board with a subtle grid, and bright cell colors with a 3D effect. I'll use a monospace font like Courier New for that retro feel, and keep the text white with colored accents. For responsiveness, I'll stick with a fixed canvas size to keep things simple. Let me write out the complete implementation with clear setup instructions.\n\nWriting the Tetris implementation...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4762,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","uuid":"25342f6f-8e7a-4af3-b31c-693d828707fb"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015hB2qcUUGwXPb1GCbVga9a","type":"message","role":"assistant","content":[{"type":"text","text":"Voy a construir un Tetris completo en TypeScript con todas las mecánicas estándar. Primero verifico el directorio de trabajo:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4762,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","uuid":"0ab3618b-3c0f-4f4d-b27e-7104e46c7f44"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015hB2qcUUGwXPb1GCbVga9a","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01CBN5tPzTwqBBpjxswJUqEX","name":"Bash","input":{"command":"ls /tmp/loop-bench-8xq7n6a5","description":"List current working directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4762,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","uuid":"a8347df2-a5aa-4b91-9e14-f1788d77d8c2"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":520636,"duration_api_ms":79951,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"90bceb9f-5727-45fa-8261-4b5151e69f48","total_cost_usd":0.6800476500000001,"usage":{"input_tokens":3,"cache_creation_input_tokens":521,"cache_read_input_tokens":4241,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":521},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":45025,"cacheReadInputTokens":9003,"cacheCreationInputTokens":521,"webSearchRequests":0,"costUSD":0.6800476500000001,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"2d940faf-0bf5-4148-a19b-cd7a697c12bf","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":852017,"duration_api_ms":93637,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"87d5e701-3460-4b41-bfc5-b8f784767ea2","total_cost_usd":1.09917045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.09917045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9f5c74da-24d9-4194-81c3-efa517b2a8ad","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 6, - "tool_calls": { - "total": 0, - "bash": 0, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 0, - "productivity_ratio": 0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 22 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 22 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "max", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1", - "run_number": 1, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.557895+00:00", - "wall_time_seconds": 852, - "exit_code": 1, - "completed_at": "2026-04-04T09:21:21.713056+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run1/transcript.jsonl @@ -1,6 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "max", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-o9xeiz1m","session_id":"87d5e701-3460-4b41-bfc5-b8f784767ea2","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"702b8b6b-07fb-4dec-b380-882c609f17d3","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01WoVjPAi45BQtMqS5k9Gg4G","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser, built with TypeScript. Let me plan this out:\n\n1. I'll create a TypeScript-based Tetris game\n2. It should include:\n - All 7 standard Tetris pieces (I, O, T, S, Z, J, L)\n - Piece movement (left, right, down)\n - Piece rotation\n - Line clearing\n - Scoring system\n - Increasing speed\n - Keyboard controls\n\nLet me structure this as a single HTML file with embedded TypeScript (compiled to JS), or better yet, create proper files.\n\n\nI'll set up a project structure with an HTML file, TypeScript source, and a config file, then compile everything to JavaScript so it runs directly in the browser without needing a build step. Now I'm thinking through the core game architecture—I'll need a TetrisGame class to manage the canvas, game state, and piece logic.\n\nFor the board, I'm going with the standard 10×20 grid. I'll define all seven tetrominoes with their colors (cyan I-piece, yellow O, purple T, and so on), handle rotation mechanics, and implement a scoring system that rewards clearing multiple lines at once, with bonuses scaling by level.\n\nNow I'm setting up the game mechanics: speed increases with each level by reducing the frame count between drops, and I'm mapping out the controls—arrow keys for movement and rotation, space for instant drops, and P to pause.\n\nDefining the game constants and piece data structures... Defining the rotation states for the remaining Tetris pieces... Finishing up the tetromino rotation states for J and L pieces, then pivoting to think through the full game architecture—I need a canvas-based board, a sidebar showing score and next piece, and a complete TypeScript implementation to make this polished.\n\nFor the project structure, I'm deciding between pre-compiling TypeScript or using a bundler, but the simplest approach is to set up a proper build process with package.json and tsconfig.json so everything compiles cleanly and runs immediately in the browser.\n\nNow I'm thinking through the game architecture—I'll define the core constants like grid dimensions and block size, then set up a color palette for the different tetromino pieces.\n\nDefining game constants and colors... Writing the Tetris class... Defining the tetromino shapes... Writing the Tetris game implementation... Defining the tetromino shapes for each piece type with their initial rotation states, then setting up the drop speed configuration. Continuing with the game class...\n\nI'm setting up the game state properties like score, level, and lines cleared, along with game status flags for whether it's paused or over. I'm also initializing timing variables to handle the piece drop speed and lock delay mechanics, plus references to the UI elements that display the score and game information.\n\nNow I'm initializing the canvas elements for the main game board and the next piece preview, grabbing references to all the DOM elements I need to update, and setting up the canvas dimensions based on the grid size.\n\nSetting up constructor... Continuing the game initialization...\n\nNow I'm setting up the game state by resetting the score and level, initializing the piece queue and hold mechanic, then kicking off the game loop with a timestamp to track the drop timing.\n\nSpawning the first piece and checking if it's a valid placement—if the piece can't fit at the starting position, the game ends immediately. I'm also implementing the collision detection system that validates whether a piece can move to a given position by checking board boundaries and existing blocks.\n\nBuilding the ghost piece logic... Writing game loop logic... Implementing wall kick logic to handle piece rotation near boundaries...\n\nNow I'm finishing the soft drop scoring and moving into the lock mechanism, which places the current piece on the board by iterating through its shape and marking occupied cells, then checking for game over if the piece extends above the board.\n\nAfter locking the piece, I'm resetting the game state flags and attempting to spawn the next piece. Then I'm implementing the line-clearing logic that scans from the bottom up, removes complete rows, and shifts everything down while recalculating the score based on how many lines were cleared at once.\n\nNow I'm adding the hold piece functionality, which lets the player swap their current falling piece with a previously held one, repositioning both to their spawn locations. Writing game logic... Drawing the grid and board state...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4729,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"87d5e701-3460-4b41-bfc5-b8f784767ea2","uuid":"fb1c9b14-d485-4e22-954e-073c0de41914"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01VBJHc2a2bnCZRwPNXfjwSo","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris implementation with:\n\n1. All 7 standard tetrominoes (I, O, T, S, Z, J, L)\n2. Piece movement (left, right, down)\n3. Piece rotation\n4. Line clearing\n5. Scoring system\n6. Increasing speed\n7. Keyboard controls\n\nI'll create:\n- `index.html` - the main HTML file\n- `src/tetris.ts` - the TypeScript game logic\n\n\n- `tsconfig.json` - TypeScript configuration\n- `package.json` - project dependencies\n\nI need to decide on the build approach. Since this needs to run in a browser, I'll go with a straightforward setup where TypeScript compiles to JavaScript. I could use a bundler, but a simple compilation approach will work fine for this project.\n\nNow I'm designing the full Tetris game structure, starting with the game board...\n\nThe board will be the standard 10×20 grid. I'm mapping out all seven tetrominoes with their colors, then defining the control scheme with arrow keys for movement and rotation, space for hard drop, and P or Escape to pause. For scoring, I'm using the classic Nintendo system where clearing multiple lines gives exponentially higher points multiplied by the current level, and the level increases every 10 lines cleared, which also speeds up the gameplay.\n\nNow I'm setting up the TypeScript implementation with the full game logic...\n\nWriting the game engine... Defining the tetromino shapes... Defining the remaining Tetris pieces... Defining the tetromino shapes and game structure...\n\nI'll represent each piece as a list of rotations, where each rotation contains the relative [row, col] coordinates of the filled cells, then build out the complete game logic with the board state, piece movement, and collision detection. I'm defining the standard Tetris pieces with their rotation states using coordinate notation. I'll represent each piece as a set of [row, col] positions within a bounding box, then convert them to a clean data structure for the game logic. Defining the rotation states for each Tetris piece using standard SRS coordinates within their bounding boxes — the I piece uses a 4x4 space while others fit in 3x3, and I'm specifying each rotation state as a set of cell positions. I've verified all the T piece rotations are correct, so now I'm ready to implement the complete game logic.\n\nWriting the game engine... Defining the tetromino pieces...\n\nI need to reconsider how spawn offsets work. When a piece appears, it starts at the top of the board centered horizontally, with its position representing the top-left corner of its bounding box. For something like the I piece with a 4-cell width on a 10-wide board, that means positioning it at column 3 to center it, and starting above the visible area so the actual cells appear at the top row. The absolute position of each cell is calculated by adding the cell's offset within the piece to the piece's current position.\n\nLooking at standard Tetris spawn positions, most pieces start at row -1 and column 3, except the O piece which starts at row 0 and column 4 since it's only 2 cells wide and needs to be centered differently.\n\nRather than overthinking the bounding box math, I'll just hardcode the spawn position for each piece type and represent each tetromino as a set of rotation states, where each state contains the four cell offsets relative to the piece's origin point.\n\nDefining the piece data... I'm realizing I'm overcomplicating the data structure. Let me step back and use a straightforward approach: the board is a 2D array with rows 0-19 and columns 0-9, pieces have a position at their top-left corner, and each piece's cells are defined as offsets from that position. I'll pre-define all rotation states for each tetromino and handle spawning by placing pieces at row 0, centered horizontally based on their bounding box.\n\nDefining piece rotations... Continuing with the remaining rotations for the J and L pieces, mapping out their coordinate positions for each orientation. Looking at the T piece rotations, they all check out correctly—each 90° rotation produces the expected orientation. Now I'm working through the spawn positions for the I piece, and I realize my current definition has the piece starting off-screen, which isn't right. I need to reconsider how the piece coordinates map to the actual board when it spawns.\n\nFor the I piece spawning at row 0, I should set pieceRow=0 and pieceCol=3 to center it horizontally on the 10-column board. The standard Tetris spawn positions are roughly centered, so I'll use row 0 for all pieces and calculate the column offset based on each piece's width—4 columns for the I piece gives column 3, while the 3-wide pieces (T, S, Z, J, L) also center around column 3, and the 2-wide O piece goes to column 4. Writing the Tetris implementation... Defining the tetromino rotation states...\n\nI'm noticing an issue with the S piece rotations—one of them seems to duplicate the T piece's pattern. Let me reconsider the S piece more carefully, starting with its actual shape and how it should rotate.\n\nFor the S piece in its base orientation, I have the cells mapped out correctly. Now I need to verify the 90-degree clockwise rotation is accurate by thinking through the transformation properly rather than just applying a formula that might be giving me wrong coordinates. I'm verifying the rotation logic by checking what each orientation should look like visually. The T-piece pointing up becomes a horizontal line when rotated clockwise, but I'm getting confused about which direction it's actually pointing after the transformation—the visual representation suggests it might be pointing left rather than right, so I need to reconsider the orientation naming. I need to work through the rotation math more carefully. For a 2×3 grid, I'll apply the standard CW rotation formula where new[i][j] = old[n-1-j][i], transposing and then flipping to get the correct orientation of the T piece after rotating 90 degrees clockwise. that's XXX in row 0 and X in row 1 at column 1 — so the T is now pointing up with the open side facing down. I'm visualizing the T-piece at 270° rotation—it forms an L shape pointing left with the stem on the right side. Now I'm comparing this against my earlier rotation calculations to verify the coordinate mappings are consistent across all four orientations. I'm mapping out the cell coordinates for that rotated T piece and visualizing it in the grid—the bump is indeed pointing right, which matches what I calculated. I need to think through the rotation more carefully. When I rotate the original T-piece clockwise—where the bump points up and the three cells form the base—the bump should end up pointing left, not right. Let me visualize this: rotating the paper 90° clockwise means what was at the top moves to the right side, so the upward bump becomes a leftward bump. Rather than trying to work out the rotation math, I'll just define all four rotations of the T piece directly by their coordinates, then verify which direction is clockwise versus counterclockwise based on how the piece actually moves on screen. Defining the rotation states for each piece based on visual appearance rather than worrying about orientation labels. The I piece has two unique rotations that alternate between horizontal and vertical, while the O piece only has one rotation since it's a square. Defining rotation states for remaining pieces... I've verified all four L-piece rotations and their cell coordinates match up correctly. Now I'm moving on to implement the full game using canvas for rendering.\n\nSetting up the project structure with an HTML file, TypeScript game code, and configuration, then writing out the game implementation with constants for the board dimensions, block size, and color mappings for each piece type.\n\nWriting game code... Defining the Tetris piece shapes... I'm realizing there's a mismatch in my T-piece rotations—I need to reconsider what clockwise rotation actually means in screen coordinates where y increases downward. Let me recalculate the transformation formula and verify that my rotation 1 state matches what I'd get by rotating rotation 0 clockwise. I'm verifying the rotation result by visualizing the grid—the vertical line of cells at column 0 forms the long side of the T, while the cell at [1,1] creates the bump pointing right, confirming this is the \"bump RIGHT\" orientation. I'm verifying the rotation formula by working through each coordinate transformation, and the results match up—so my earlier calculation was definitely off. I'm continuing to verify the T piece rotations by working through the coordinate transformations. The second rotation gives me the bump-down configuration, and now I'm checking the third rotation to confirm it produces the correct shape. Continuing the rotation transformation, I'm applying the same clockwise formula to the remaining coordinates and verifying that rotating again brings me back to the original rotation 0 state. The T piece's rotation cycle is now confirmed.\n\nNow I'm checking the S and Z piece rotations to ensure they follow the same pattern, starting with the S piece in its initial orientation and then rotating it to verify the shape is preserved.\n\nVerifying J and L piece rotations...\n\nNow I'm setting up the scoring system using standard Tetris rules: 100 points per line for a single line clear, with the multiplier increasing for multiple simultaneous clears.\n\nFor the drop speed, I'll use a time-based interval that starts at 800ms and decreases by 75ms per level, bottoming out at 50ms to keep the game playable at higher levels.\n\nThe controls map arrow keys for movement and rotation, space for instant drops, and Z for counter-clockwise rotation, plus pause functionality. I'm also adding visual features like a ghost piece preview, a queue showing the next three pieces, and a hold mechanic.\n\nFor rotation, I'll implement wall kicks with basic offset attempts rather than the full SRS specification—just trying shifts of 0, ±1 columns to handle edge cases smoothly.\n\nNow I'm building out the complete implementation with a dark-themed UI that has a clean side panel displaying the score, level, lines cleared, and upcoming pieces.\n\nWriting the HTML and TypeScript... Building the HTML structure...\n\nNow I'm deciding on the project setup—I'll create a TypeScript source file, configure it to compile to a dist folder, and set up the build tooling with a package.json so I can properly compile everything.\n\nI'm also working through the piece spawn positions to make sure they're centered correctly on the 10-wide board, accounting for the different bounding box sizes of each tetromino shape and whether the top row should be hidden above the visible play area. I'm going back and forth on the spawn position—starting pieces above the board at pieceRow = -1 is more authentic to standard Tetris, but it creates an immediate game over condition if row 0 is blocked. For this implementation, I'll keep it simple and spawn pieces fully visible at pieceRow = 0.\n\nNow I'm working out the spawn columns for each piece type based on their bounding boxes, making sure they're centered on the board. For the T piece specifically, with pieceRow = 0 and pieceCol = 3, the cells map correctly to create that centered appearance.\n\nThe I piece follows the same logic—starting at column 3 with rotation 0 places all four blocks across columns 3-6, which centers it nicely on the board.\n\nNow I'm ready to write the full TypeScript game implementation, using requestAnimationFrame for the game loop and incorporating soft lock delay and DAS for smoother controls.\n\nDefining the game class structure... Defining the game constants and piece types... Defining the piece shapes... Defining the spawn positions and rotation offsets...\n\nI need to implement the proper Standard Rotation System wall kicks for the JLSTZ pieces. The wall kick offsets vary depending on which rotation transition is happening—clockwise rotations have specific offset sequences, and I'll need to handle the counterclockwise transitions as well. I'm realizing these wall kick tables are getting unwieldy, so I'll simplify the approach—just try a basic sequence of horizontal offsets like no movement, then one space left or right, then two spaces in each direction. This should handle most rotation cases without needing the full SRS specification.\n\nWriting the rotation logic...\n\nNow I'm planning the full implementation with a single canvas approach—drawing the board in the center and the UI panels (hold and next pieces) on the sides. I'm settling on a 550×650 canvas with the main board taking up 300×600 pixels positioned at coordinates 125, 25, and the left panel starting at x=5.\n\nActually, I think it makes more sense to use HTML elements for the score, level, and lines display since they render text better, while keeping the canvas just for the game board and piece previews.\n\nSetting up the structure... Building the HTML structure...\n\nNow I'm thinking about the piece randomization system—I should implement a 7-bag system like standard Tetris, where each piece type appears exactly once per bag before reshuffling. I'm starting to write the Fisher-Yates shuffle algorithm to handle this fairly.\n\nThen I need a queue system that maintains the next pieces, refilling the bag whenever it drops below 7 items. Once I have the core logic planned, I'll write out the actual implementation files.\n\nFor the visual polish, I'm adding a ghost piece that shows where the current tetromino will land, and implementing lock delay so pieces stay briefly after landing—giving players a chance to adjust position or rotation before they lock in permanently.\n\nWriting the TypeScript code... Defining the wall kick data for SRS rotation... Defining kick data for I-pieces... I'm going to simplify the wall kick system for now with a basic set of offsets that should feel responsive without implementing the full SRS specification. Once that's working, I can always refine it with the proper Tetris wiki data for more authentic rotation behavior. I'm realizing the rotation kick offsets are getting tangled up with my coordinate system conventions. Let me simplify this by implementing a straightforward set of wall kick attempts that prioritize horizontal movement first, then vertical adjustments, which should handle most rotation scenarios in practice without needing to perfectly match the official Tetris guideline.\n\nDefining wall kick offsets... I'm going to implement the standard SRS wall kick system properly by looking up the exact rotation offsets from the Tetris Guideline specification. I'm mapping out the wall kick offsets for each rotation transition in screen coordinates, where positive row values move downward. The pattern shows how the piece attempts to shift position when rotating, trying different offset combinations to find valid placements. the offsets are [col_offset, row_offset] and I want [row_offset, col_offset] for my code.\n\nSo converting to [row, col]:\n0→R (CW, 0→1): [0,0], [0,-1], [-1,-1], [+2,0], [+2,-1]\nR→0 (CCW): [0,0], [0,+1], [+1,+1], [-2,0], [-2,+1]\nR→2 (CW, 1→2): [0,0], [0,+1], [+1,+1], [-2,0], [-2,+1]\n2→R (CCW): [0,0], [0,-1], [-1,-1], [+2,0], [+2,-1]\n2→L (CW, 2→3): [0,0], [0,+1], [-1,+1], [+2,0], [+2,+1]\nL→2 (CCW): [0,0], [0,-1], [+1,-1], [-2,0], [-2,-1]\nL→0 (CW, 3→0): [0,0], [0,-1], [+1,-1], [-2,0], [-2,-1]\n0→L (CCW): [0,0], [0,+1], [-1,+1], [+2,0], [+2,+1]\n\nI'm noticing that some of these rotation transitions share the same offset patterns—R→2 and R→0 both have identical values, which seems off. Let me verify this against the wiki definitions where R is rotation state 1, L is state 3, 0 is spawn, and 2 is 180°.\n\nActually, I'm overcomplicating this. The full SRS wall kick system is intricate, and I'm spending too much time parsing the exact specifications. I'm going to implement a simpler wall kick system that covers the most common cases—checking offsets horizontally and vertically when a rotation fails. This should handle the practical scenarios well enough for the game.\n\nNow I need to actually start writing the code instead of continuing to plan.\n\nSetting up the Tetris game implementation... Defining the rotation states for the remaining Tetris pieces... Defining the game structure... I'm setting up the canvas elements for the hold piece and next queue displays, then initializing the game by queuing pieces and starting the render loop. Writing game logic... Writing the game logic... Writing game mechanics... Writing game mechanics... Writing game logic... Setting up the movement controls...\n\nFor the arrow keys, I'm initializing the delayed auto-shift timers so the piece can smoothly slide across the board when held down. The rotation keys map to clockwise and counterclockwise turns, space triggers the hard drop, and the hold piece function lets players swap their current piece with a stored one.\n\nNow I'm handling the key release events to clear the movement state and reset those DAS timers. Then I'm adding a pause toggle that switches between playing and paused states with corresponding UI updates. The game initialization resets the board, score, level, and line count to start fresh.\n\nSetting up the game loop with requestAnimationFrame to handle the delta time calculations and only update when actively playing.\n\nNow I'm implementing the input handling for piece movement, using a delayed auto-shift system for left and right arrow keys to make the controls feel responsive, and setting up soft drop acceleration when the down arrow is held.\n\nImplementing drop mechanics and lock delay... I'm implementing the hold piece logic where swapping pieces resets their rotation state and position, then disables holding until the next piece locks, while also clearing any lock delay progress to prevent immediate locking. Now moving on to the rendering code...\n\nWriting the draw methods... Still writing the render method... Still writing rendering functions... Writing canvas rendering logic... Finishing the block rendering with darker shades for depth, then updating the UI to display the current score, level, and lines cleared with proper formatting.\n\nNow I'm setting up the game over and pause screens by toggling an overlay element and updating its text content to show the appropriate message.\n\nI'm also implementing helper methods to hide the overlay when needed, and starting to build out the initial start screen which fills the canvas with a dark background and displays instructions through the same overlay system.\n\nNow I'm realizing there's a bug in my hold piece logic—when I swap pieces, I need to validate that the swapped piece can actually spawn at the current position, not just assume it will work. Let me refactor the hold method to handle this properly. Resetting the drop accumulator and lock state. Now I'm implementing the DAS (Delayed Auto Shift) system properly—when the left arrow is first pressed, it moves immediately, then waits 167ms before repeating every 33ms. I'm tracking this with a das accumulator that starts negative to enforce the initial delay, then triggers repeated moves once it reaches zero. I'm realizing the logic is sound—after the initial delay, repeats trigger every DAS_REPEAT milliseconds. Though I should double-check the edge case where the update loop might not run immediately after keydown, or runs multiple times in quick succession, to ensure the first move always fires and the timing stays consistent. Now I'm ready to implement the complete game with proper scoring mechanics—soft drops worth 1 point per row, hard drops worth 2, and line clears scaled by level—plus localStorage for tracking high scores. I'm also thinking through the visual design with a dark color scheme to make the game feel polished.\n\nI'll keep the special effects minimal and focus on solid core gameplay, using a clean dark background with vibrant block colors and 3D shading. For the preview areas, I'm using 4x4 grids at 24px blocks, and I've mapped out the drop speeds across difficulty levels starting at 800ms and decreasing as the level increases.\n\nWriting the complete implementation...\n\nNow I'm thinking through the lock delay mechanics—when a piece lands, it should have a 500ms window before locking, but that timer resets if the player moves or rotates it while it's still grounded, up to a maximum of 15 resets to prevent infinite stalling. I need to make sure that if the piece gets lifted off the ground, the lock delay cancels entirely.\n\nRefining the approach: each frame I'll check if the piece is on the ground, and if so, increment the lock delay timer; if it's not on the ground, I reset the timer and clear the grounded state. When the player moves or rotates, I check whether the piece is still touching the ground afterward—if it is, I reset the delay counter (assuming resets remain), but if it's now floating, I clear the grounded flag.\n\nImplementing the logic... Finishing the UI update call, then reconsidering the lock reset logic—I think the standard approach of resetting the counter when a new piece spawns rather than when it temporarily leaves the ground makes more sense, and I'll cap it at 15 resets per placement with a 500ms lock delay.\n\nImplementing the ground detection and lock timing...\n\nNow I need to actually start writing the code. Let me think through the layout first—I want a clean Tetris interface with the game board in the center, hold piece on the left, next pieces on the right, and score display below. I'll keep everything in HTML and TypeScript to minimize file complexity.\n\nBuilding the game structure... Defining the piece shapes and colors... Defining the rotation states for the remaining Tetris pieces... Setting up game constants and the core Tetris game class with piece management, scoring rules, and game state tracking... I'm setting up the canvas contexts for the main board, hold piece display, and next queue previews, then initializing the game board and retrieving the high score from local storage before wiring up the keyboard event listeners.\n\nNow I'm finishing the event setup and triggering the initial render with the start overlay, then kicking off the game loop with requestAnimationFrame. I'm also defining the board creation method that generates a 2D grid filled with nulls, and implementing the piece queue system using a 7-bag randomization algorithm to ensure balanced piece distribution.\n\nContinuing with the piece spawning logic...\n\nNow I'm checking if a piece is valid by iterating through its cells and ensuring they're within bounds and not colliding with existing blocks on the board. I also have a method to detect when a piece hits the ground by testing if moving it down one row would be invalid. For input handling, I'm tracking which keys are currently pressed and ignoring system keys like F5 and F12 to avoid interfering with browser functions.\n\nWriting input handlers... I'm implementing the movement mechanics for the tetromino pieces—checking if left and right shifts are valid before updating the position, and handling the drop logic that moves pieces downward while validating each step.\n\nNow I'm adding the soft drop and hard drop functions, where soft drop gives bonus points for manually accelerating the piece, and hard drop instantly places it at the bottom while multiplying the score. I'm also setting up the rotation methods that will handle clockwise and counterclockwise turns...\n\nImplementing rotation with wall kick offsets...\n\nNow I'm handling the hold piece mechanic, which swaps the current piece with a previously held one or spawns a new piece if nothing was held before, then prevents immediate re-holding.\n\nContinuing with game logic... Continuing with the line clearing logic...\n\nNow I'm removing the cleared rows from the board and adding fresh empty rows at the top, then updating the score based on how many lines were cleared and the current level. I'm also calculating the new level based on total lines cleared, displaying an appropriate flash message for single, double, triple, or Tetris clears, and refreshing the UI to reflect all these changes.\n\nFor the ghost piece, I'm calculating where the current piece would land if dropped straight down by simulating the fall until it hits an obstacle. Then I'm setting up the game initialization by resetting the board, score, level, and all the piece management variables like the hold queue and drop timers.\n\nNow I'm finishing the startup sequence by clearing the UI overlay and spawning the first piece, then handling what happens when the game ends—checking if we've beaten the high score and saving it to local storage before showing the game over screen. The pause toggle is being implemented next...\n\nStill writing game logic... Still writing game logic... Writing the rendering logic... Writing the rendering logic... Writing the mini piece renderer... Writing the flash message display...\n\nNow I'm handling the UI updates—refreshing the score, level, lines cleared, and high score displays, then managing the overlay for game over and pause states.\n\nI need to initialize the game when the DOM loads, but I'm realizing there's a bug in how I'm handling the soft drop mechanic. The issue is that `ArrowDown` presses trigger both `onKeyDown` repeatedly and the update loop, causing double drops. I should consolidate this by only handling continuous soft drop in the update loop when the key is held, rather than in the key press handler. Still writing gravity logic... the browser's key repeat won't interfere since I'm checking `wasHeld` to prevent duplicate drops. For the immediate response on first press, I'll call `softDrop()` in `onKeyDown`, then let the gravity multiplier handle the continuous drop when the key is held. This way I get instant feedback without waiting for the gravity timer. I realize I should check the `repeat` property on the keyboard event instead—that's the cleaner way to distinguish between the initial keypress and browser-generated repeats. I'll use that to let the first ArrowDown press trigger softDrop immediately, while the update loop handles the continuous acceleration via gravity multiplier.\n\nI still need the `keys` set to track which keys are currently held for DAS timing and the soft drop multiplier during the update cycle. Now I'm refining the keydown handler to manage game state transitions like pausing and starting, while keeping the repeat logic separate.\n\nRefining the input handler... Finishing up the key handler with space for hard drop and shift/C for the hold mechanic. Now I'm thinking through how soft drop should work—I want to avoid conflicts between the initial key press triggering a drop and the gravity system handling sustained pressure, so I'll consolidate soft drop logic into the update loop where I can properly manage the timing. the immediate press for better feel. I'll handle the ArrowDown key in `onKeyDown` for the instant response on first press, then use the update loop to apply a 20x gravity multiplier when the key is held down—this way the accumulator gets boosted by the additional gravity while normal gravity still applies.\n\nNow I'm implementing the scoring logic for hard and soft drops. Hard drop awards 2 points per row, which I'll calculate by counting successful drops in a loop. For soft drop, I need to track rows dropped during the gravity update when ArrowDown is held, incrementing the score by 1 point per row.\n\nI'm also deciding on canvas dimensions for the preview areas—I want them compact but readable, so I'm settling on 96×96 pixel canvases for the hold and next piece displays, using 24-pixel blocks. The preview areas look good with those dimensions. Now I'm setting up the project structure with TypeScript and npm, then building out the HTML layout with sections for the hold piece, main game board, next queue, and score display.\n\nWriting HTML and styles... Still writing styles... Still writing styles... Building the game interface... Setting up the type definitions and constants for the game...\n\nNow I'm mapping out the color palette for each piece type and defining the rotation shapes for all seven Tetris pieces. Defining the rotation states for the remaining tetromino pieces...\n\nNow I'm setting up the spawn positions and game constants—the drop speeds increase through levels, line clears award points based on how many lines you complete at once, and there are mechanics for lock delay and input handling.\n\nSetting up the game class... Setting up the canvas contexts for the next pieces display, loading the high score from local storage, and wiring up keyboard event listeners before starting the game loop with the initial draw call.\n\nNow I'm defining utility methods for the board and pieces — creating the grid structure, calculating cell positions for rotated pieces, validating moves by checking boundaries and collisions, and detecting when a piece has landed.\n\nNow I'm implementing the piece queue system with a bag randomization approach, refilling it with shuffled piece types when it runs low and providing methods to peek ahead or draw the next piece.\n\nStill writing game logic... Writing the game logic... Writing the hold and lock logic... Still writing game logic... Writing game state logic... Implementing the DAS (Delayed Auto Shift) system for left and right movement, where holding a direction key triggers repeated moves after an initial delay, while also checking if the piece is currently on the ground.\n\nNow I'm handling the ground state — if the piece is resting, I increment a lock timer that triggers piece placement after a delay, but if it's falling, I reset the timer and apply gravity based on the current level, with soft drop acceleration if the down arrow is pressed. Writing the rendering logic... Writing the render logic... Still writing the drawing logic... Writing the preview rendering... Writing UI helper methods...\n\nNow I'm setting up the input handler to capture keyboard events, preventing default behavior for game-specific keys, and managing game state transitions like starting a new game or toggling pause.\n\nHandling active gameplay input...\n\nI'm setting up the key release handler to clear pressed keys and reset the delayed auto-shift timers for left and right movement, then wrapping up with utility functions and the game initialization on page load. But I'm noticing an issue with how `dasLeft` is being managed—it looks like it's being set to the same negative delay value both on key down and key up, which might not be the intended behavior for the delayed auto-shift system. When `ArrowLeft` is pressed, the first move fires immediately and `dasLeft` resets to `-DAS_DELAY_MS` to enforce the delay before repeating. The real problem is in my update logic—I'm clamping `dasLeft` to 0 when the key isn't held, which means it never goes negative enough to properly reset for the next press. I'm realizing the issue: when the player taps left multiple times quickly without holding, the `dasLeft` timer could accumulate and cause unexpected extra moves. The cleanest solution is to reset `dasLeft` to a large negative value in the key-up handler so it doesn't trigger immediately, then set it to `-DAS_DELAY_MS` fresh on each key-down press.\n\nSetting up the input handlers... I'm realizing the soft drop multiplier in the update loop might not feel responsive enough for a quick tap—it could take a few frames before anything happens. I should handle ArrowDown directly in keydown to trigger an immediate drop, then let the update loop handle the repeated drops if the key stays held.\n\nActually, I'm overcomplicating this. Let me just implement the straightforward approach: trigger a drop on the first keydown press and let the continuous logic handle the rest.\n\nI'm also noticing a couple of cleanup issues—the lockResets reset in clearLines() is redundant since I'm already resetting it in spawn(), and I need to double-check what happens when hard drop calls lockPiece() during the update cycle.\n\nNow I'm thinking through the color handling. My COLORS map uses standard hex codes, so I need to make sure my color shifting function correctly parses and adjusts the RGB values while keeping them clamped to valid ranges.\n\nHandling color shifts...\n\nNow I'm verifying the S and Z piece rotations to ensure they spawn correctly on the board. Let me trace through the S piece in its initial rotation—it should occupy two rows and three columns, with the pattern showing the characteristic S shape across the grid.\n\nFor the Z piece, I'm confirming it has the same rotation behavior as S, with only two unique states that cycle back on themselves, so rotations 2 and 3 just repeat rotations 0 and 1.\n\nNow I'm ready to write the complete TypeScript implementation, making sure to handle piece shapes correctly, manage the game loop properly from spawning through locking and clearing lines, implement accurate scoring, render everything visually, and respond to input smoothly. Before diving in, I want to think through the ghost piece mechanic—it should display where the current piece would land if dropped straight down, matching the current piece's type and rotation but positioned at the lowest valid row.\n\nWriting the ghost piece logic... I need to compile the TypeScript with `npm run build` to generate the final JavaScript. But first, let me double-check the T-piece rotation logic—I'm visualizing the second rotation state and want to make sure the coordinates map correctly to the intended shape before I write out all the files. The T rotations all check out correctly with the bump pointing in the right directions. Now I'm verifying the L piece rotations across all four orientations, and they're all matching up as expected.\n\nMoving on to the J piece, I'm confirming each of its four rotational states—the cells line up correctly for all 90-degree rotations. Everything looks solid with the piece definitions, so I'm ready to start implementing the actual code now. Let me think through the structure one more time before diving in.\n\nWriting the game logic... I'm realizing the issue with rapid taps: if I call `drop()` directly on keydown, combined with the 20x multiplier in the update loop, the piece might drop too aggressively. Instead, I should let the update loop handle all drops—when ArrowDown is first pressed, `dropAccum` jumps by `dt * 20` in that frame, causing an immediate drop, and then subsequent frames continue accelerating until the key is released. Implementing the drop handler... Writing the Tetris implementation... Defining piece shapes... Defining the rotation states for the remaining tetromino pieces...\n\nNow I'm setting up the spawn positions for each piece type and the drop speed progression across difficulty levels. Defining the type system and helper functions...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"87d5e701-3460-4b41-bfc5-b8f784767ea2","uuid":"8dd2dc3d-50df-46a7-ab1f-28b2500bc9b8"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":852017,"duration_api_ms":93637,"is_error":true,"num_turns":1,"stop_reason":"max_tokens","session_id":"87d5e701-3460-4b41-bfc5-b8f784767ea2","total_cost_usd":1.09917045,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4729},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":72000,"cacheReadInputTokens":4729,"cacheCreationInputTokens":4729,"webSearchRequests":0,"costUSD":1.09917045,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9f5c74da-24d9-4194-81c3-efa517b2a8ad","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":638410,"duration_api_ms":98961,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","total_cost_usd":0.7367664,"usage":{"input_tokens":3,"cache_creation_input_tokens":4728,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4728},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":47840,"cacheReadInputTokens":4728,"cacheCreationInputTokens":4728,"webSearchRequests":0,"costUSD":0.7367664,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9826e71c-bb0b-4fc0-8e3b-52c2e4bc0518","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/eval_results.json @@ -1,249 +0,0 @@ -{ - "structural": { - "pass": false, - "checks": [ - { - "name": "entry_point_exists", - "pass": false, - "detail": "no index.html found in workspace root, dist/, or public/" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - } - ], - "score": 0.67 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "error": "no tsconfig.json" - }, - "performance": { - "bundle_size_bytes": 0, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 2, - "code": 0, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 0, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "minimal", - "console_logs": 0, - "magic_numbers": { - "count": 0, - "excessive": false - }, - "function_length": { - "count": 0, - "average": 0, - "max": 0, - "long_functions": 0 - }, - "max_nesting_depth": 0, - "global_declarations": 0, - "naming": { - "dominant_style": "unknown", - "consistency_pct": 100.0, - "camel_case": 0, - "snake_case": 0 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 0, - "source_lines": 0, - "ratio_pct": 0.0 - }, - "separation_of_concerns": { - "verdict": "single-file", - "files_with_rendering": 0, - "files_with_logic": 0, - "files_with_both": 0 - }, - "html_validation": { - "valid": false, - "errors": 0 - }, - "duplication_percentage": 0.0, - "score": 1.0 - }, - "transcript_analysis": { - "total_events": 8, - "tool_calls": { - "total": 1, - "bash": 1, - "write": 0, - "edit": 0, - "read": 0 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 1, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.19, - "total": 16, - "passed": 3, - "failed": 13, - "report": { - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } - } - }, - "score": 0.602 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/gameplay-bot-report.json @@ -1,119 +0,0 @@ -{ - "implementation": { - "renderer": "unknown", - "grid_detected": false, - "grid_bounds": null, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "ArrowUp", - "drop": "Space" - }, - "start_mechanism": "unknown", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": false, - "detail": "could not start game with any mechanism" - }, - { - "name": "auto_drop", - "pass": false, - "detail": "piece did not move in 5 seconds" - }, - { - "name": "move_left", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_right", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "move_down", - "pass": false, - "detail": "no change detected after key press" - }, - { - "name": "rotate", - "pass": false, - "detail": "no change detected after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": false, - "detail": "could not detect any piece rotations" - }, - { - "name": "hard_drop", - "pass": false, - "detail": "no change detected after hard drop key" - }, - { - "name": "piece_locks", - "pass": false, - "detail": "could not verify piece locking at bottom" - }, - { - "name": "new_piece_spawns", - "pass": false, - "detail": "could not detect new piece at top" - }, - { - "name": "multiple_pieces", - "pass": false, - "detail": "grid did not accumulate filled cells" - }, - { - "name": "line_clear", - "pass": false, - "detail": "could not trigger or detect a line clear" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 11 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 3, - "failed": 13, - "score": 0.19 - }, - "gameplay": { - "pieces_placed": 102, - "lines_cleared": 0, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 20 - }, - "accessibility": { - "issues": [], - "issue_count": 0, - "pass": true - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "max", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 1200, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2", - "run_number": 2, - "claude_version": "2.1.92 (Claude Code)", - "started_at": "2026-04-04T09:07:02.558240+00:00", - "wall_time_seconds": 639, - "exit_code": 1, - "completed_at": "2026-04-04T09:17:48.150479+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run2/transcript.jsonl @@ -1,8 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "max", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 1200, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-c4n513d1","session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.92","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"1e132289-35a1-4ef2-af08-e14f389660c6","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LBS9k3MjxqGKbVV8v9e3Nd","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game in the browser using TypeScript. Let me build a complete Tetris game with:\n\n1. All standard Tetris pieces (I, O, T, S, Z, J, L)\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z for rotation)\n\nI'll create a self-contained HTML file with TypeScript compiled inline, or better yet, create separate files. Let me think about the structure:\n\n- `index.html` - Main HTML file\n\n\n- `game.ts` - TypeScript source\n- `style.css` - Styles (or inline in HTML)\n\nFor a browser game, I could either set up a build process with TypeScript compiler or use a single HTML file with TypeScript transpiled inline. Let me go with a proper project setup using TypeScript and compile it to JavaScript.\n\nSetting up the project structure...\n\nI'll need to define the core game mechanics: a 10×20 board with the standard seven Tetris pieces, collision detection, line clearing with scoring, and a ghost piece preview. The game will speed up every 10 lines cleared. For controls, I'm mapping arrow keys for movement and rotation, space for hard drop, C for hold, and P/Escape for pause.\n\nDefining the game types and structure... Defining the tetromino shapes and rotation states... Defining the tetromino rotation states... Defining piece rotations...\n\nNow I'm thinking about whether to implement the full Super Rotation System with its wall kick offset tables, or keep it simpler. The SRS is the standard for modern Tetris, but for a basic version I could just try shifting pieces left or right when they hit a wall during rotation.\n\nI'm going to build out the complete game with a proper structure: an HTML file for the canvas and UI, a TypeScript file for all the game logic, and the necessary config files. I want to make it polished with dark styling, colored pieces, a ghost piece preview, score tracking, level progression, line counters, a next piece preview, hold functionality, game over detection, and pause controls.\n\nDefining the game constants and piece color mappings... Defining the rotation states for the remaining Tetris pieces... Defining the wall kick data for standard Tetris pieces, which specifies the offset positions to try when rotating near walls or obstacles. Defining wall kick data for I-pieces... standard SRS uses x/y coordinates but the convention can be confusing. Let me use a well-known implementation.\n\nIn SRS:\n- x = column (positive = right)\n- y = row (positive = down)\n\nThe kick data from the Tetris wiki shows the offset adjustments for each rotation transition. Since the wiki uses screen coordinates with y positive downward (opposite of typical math convention), I need to negate those y values for my implementation. Actually, I think a simpler wall kick approach would work better—try rotating at the current position first, then test adjacent positions if that fails.\n\nBut proper SRS is worth implementing since it makes the game feel much more polished. Let me set up the coordinate system clearly: `board[row][col]` with row 0 at the top, and `piece.x` and `piece.y` as column and row offsets respectively. Then I'll implement the full SRS kick data for each piece type and rotation transition.\n\nDefining the wall kick offsets... I'm seeing the complete wall kick offset data for all rotation transitions—the pattern shows that opposite rotations have mirrored offsets, which makes sense for the symmetry of the piece rotations. I'm working through the coordinate system conversion more carefully now. The wiki uses column and row offsets where positive row points up, but my screen coordinates have positive row pointing down, so I need to negate those row values when converting. Let me map out each rotation state transition with the corrected offsets. I'm realizing the wall kick offset tables are getting messy, so let me simplify this approach instead of trying to perfectly match SRS specifications. I'll use a basic set of offsets that handles the common cases—no kick, single-tile shifts left and right, double-tile shifts, and vertical adjustments—which should work well enough for the game even if it's not tournament-standard. For a more polished implementation down the line, I can always circle back to proper SRS, but for now I want to focus on getting the core mechanic working.\n\nNow I'm carefully mapping out the coordinate system conversion: my columns increase rightward and rows increase downward, while the Tetris wiki uses x rightward but y upward, so I need to negate the y values when translating their offset data. I'm working through the JLSTZ piece rotations and their corresponding wall kick offsets, converting each one from wiki format to my system. I'm looking at the official Super Rotation System documentation from the Tetris Wiki to verify the exact rotation offsets for J, L, S, T, and Z pieces across all rotation states.\n\nSince my coordinate system has y increasing downward while the wiki uses y increasing upward, I need to flip the sign on all the y-values when I convert them over. Working through the 0->R rotation state as an example, I'm converting each test offset by negating the y-component to match my grid orientation. I'm comparing my rotation kick offsets against the wiki reference and finding discrepancies—my 2->L and 3->2 transitions have the wrong signs, and I need to verify the remaining cases to get the pattern right. I'm verifying each rotation transformation by comparing my coordinate system against the wiki reference, accounting for the y-axis flip between them. The pattern holds consistently across all four rotations—when I negate the y-coordinates from the wiki data, they match my system's offsets perfectly. I'm comparing my L-tetromino rotation offsets against the wiki reference, and I'm noticing a consistent pattern where my coordinates differ—specifically, I'm getting inverted y-values in several rotations. Let me trace through the remaining rotation states to identify where the discrepancy lies.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4728,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4728,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","uuid":"c8332304-4997-49f8-a507-0d7f92904ae1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWoWqYKUCFuyQTjiD7ng4U","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants me to build a playable Tetris game that runs in a browser using TypeScript. Let me plan the structure:\n\n1. `index.html` - The main HTML file with the game canvas\n2. `src/tetris.ts` - The TypeScript game logic\n3. `package.json` - Package configuration\n4. `tsconfig.json` - TypeScript configuration\n\nLet me design the game with all standard Tetris mechanics:\n- 7 Tetromino pieces (I, O, T, S, Z, J, L)\n- Piece rotation\n- Line clearing\n- Scoring (based on lines cleared)\n\n\n- Increasing speed as the level goes up\n- Keyboard controls (arrow keys + WASD for movement and rotation)\n- Next piece preview\n- Score and level display\n\nI'll use a canvas-based rendering with a 10x20 grid, supporting standard Tetris controls: arrow keys or WASD for movement, up arrow or W for rotation, down arrow or S for soft drop, space for hard drop, and P to pause. The scoring system will award points based on how many lines are cleared at once, with multipliers based on the current level.\n\nWriting the implementation... Defining the Tetris game types and piece shapes... Defining the tetromino shapes and their rotation states... Defining the rotation states for the remaining Tetris pieces...\n\nActually, I should reconsider the rotation system more carefully. The standard approach is to use SRS (Super Rotation System) with pre-computed rotations for each piece. Let me structure this as a complete TypeScript implementation with constants for piece definitions, game state management, collision detection, and line clearing logic all organized together.\n\nI'm planning to build this across multiple files: an HTML entry point, the main TypeScript source file, and configuration files for TypeScript and npm. The game will compile down to a single JavaScript file in the dist folder. I want to keep the implementation focused on core mechanics—the board, piece movement, rotation, and line clearing—without getting sidetracked by fancy visual effects. Now I'm ready to start writing out all the files.\n\nWriting the implementation... Building the game class... Writing the Tetris game implementation... Defining tetromino rotation patterns... Defining the rotation states for the remaining Tetris pieces... Setting up the game state... Writing the game logic... Writing the piece placement logic... Updating the score based on lines cleared, applying the level multiplier, and checking if the player has advanced to a new level by tracking total lines—if so, I'll adjust the drop speed accordingly. Then I'm refreshing the UI elements to display the current score, level, and line count.\n\nNow I'm calculating the ghost piece position by dropping it down until it hits a collision, and then I'm setting up a function to draw individual blocks on the canvas with customizable color, size, and transparency.\n\nDrawing the block with 3D effect... Writing the rendering logic... Writing the pause overlay and next piece preview... Writing the game UI... Writing game loop logic... Writing game mechanics... Implementing the hard drop and input handling... Setting up key repeat logic... Finishing the pause logic and game initialization...\n\nI'm realizing the game loop needs to keep rendering even when paused so the pause overlay displays correctly, and I need to reconsider how the piece placement works when `placePiece` is called—it should properly cycle the current and next pieces. Let me reconsider the input handling—I should implement a proper DAS (Delayed Auto Shift) system for smoother movement rather than simple key repeat. For the ghost piece, I need to calculate where the current piece will land by simulating downward movement until it hits an obstacle, then return that final position. I'm refining the ghost piece logic to use a cleaner approach with a `dy` offset that increments until it hits an invalid position, then returning the final y-coordinate. Now I'm thinking through the scoring system—standard Tetris awards points based on lines cleared (100 for single, 300 for double, 500 for triple, 800 for Tetris) multiplied by level, plus bonus points for hard and soft drops.\n\nNow I'm planning the HTML and CSS layout with a dark theme, centering the game canvas with a right panel for stats, and sizing the canvases appropriately—300×600 for the main board and around 120×90 for the next piece preview. I'm considering whether to write this as separate files or combine everything into a single HTML file with inline JavaScript.\n\nI'll go with the proper TypeScript project structure: separate HTML, TypeScript source, and config files. Before I start writing, I need to check the current directory and also clarify how the `isValidPosition` function should work—it needs to handle the piece's current position plus the offset deltas to determine if a move is valid.\n\nThe coordinate system has y=0 at the top with increasing y moving downward, which is standard. For piece spawning, I need to be careful about where blocks actually appear on the board relative to their rotation matrix, especially for the I piece which has a different shape than the other tetrominoes. Writing the spawn logic...\n\nFor the T piece, centering gives x=4 with blocks appearing at rows 0 and 1, but the I piece is trickier—it starts at y=0 but the actual blocks don't appear until row 1, which means part of the piece spawns invisibly. I need to reconsider how to handle the game-over detection when pieces can start partially off-screen. I'm realizing the I piece spawning one row lower is actually fine and matches how many Tetris games work. For game over detection, I need to check when a new piece spawns and immediately collides with existing blocks, which my `placePiece` method handles by validating the piece's position right after spawning it.\n\nChecking collision logic...\n\nI'm verifying that `boardY < 0` would only occur if a piece's y-coordinate goes negative, which shouldn't happen since pieces spawn at y=0 and the shape matrices keep blocks at non-negative positions relative to the spawn point. Let me trace through the piece definitions to confirm blocks stay within bounds. I'm verifying that all standard Tetris pieces spawn with blocks in the upper rows, so the `boardY < 0` check isn't needed. The real concern is when the board fills up to row 0—if a piece can't move down on its first attempt, it places immediately, and if that row is already occupied, the game ends. The placement logic seems solid, so I'm confident the collision detection will handle game-over scenarios correctly.\n\nNow I need to implement the actual code, but first I should make sure `isValidPosition` handles rotation parameters correctly...\n\nDefining the validation method... I'm sizing the next piece preview canvas—since all tetrominoes fit within a 4×4 grid, I'll make it 6×5 blocks at 25 pixels each for some breathing room, giving me 150×125 pixels total.\n\nActually, let me just go with 150×120 to keep things simple. Now I need to be careful with the ghost piece rendering—it should only appear when it's at a different vertical position than the current piece, otherwise I'm just drawing the same thing twice. I'll add a check to skip the ghost if it's at the same y coordinate.\n\nWriting the complete implementation...\n\nFor the O piece specifically, I need to verify the centering math works out correctly—with my current shape definition, the blocks should land in the center columns when spawned. Defining simpler shape matrices where possible, though the I piece is tricky—a 1×4 matrix for one rotation would require a 4×1 for the perpendicular rotation, which gets messy with jagged arrays, so I'll stick with the consistent 4×4 approach. One thing to note: with the 4×4 matrix, the I piece's blocks actually sit at row 1 when spawned at y=0, meaning it visually starts one row down rather than at the very top—that's fine for this implementation. I'm realizing the I piece spawn position follows the Tetris Guideline standard where pieces start above the visible field, so having the I piece's top row invisible at y=0 is actually correct. I'll stick with this approach and move forward with writing the final code. above the visible area (for some orientations/pieces), and as long as the visible part doesn't collide, it's fine.\n\nNow I'm finalizing the implementation. For scoring, I'll handle soft drop and hard drop separately—soft drop gives 1 point per row, hard drop gives 2 points per row, without level multipliers to keep it simple. For the game loop, I need to use `requestAnimationFrame` and track the last drop time to manage the falling speed properly.\n\nSetting up the game loop timing... Refining the game loop to handle the paused state more efficiently—when paused, we still request the next animation frame but skip all the game logic and rendering, which keeps the loop running without unnecessary computation.\n\nFor the pause toggle, I need to ensure we draw the pause overlay immediately when pausing, and reset the drop timer when resuming so the piece doesn't suddenly accelerate.\n\nNow I'm ready to start implementing the actual TypeScript files with clean, precise code. For the O piece, I'll use a simple 2x2 square shape and position it at spawn x = 5 - 1.\n\nSetting up the project structure with index.html, the main tetris.ts file, tsconfig.json, and package.json, then I'll define the core constants and tetromino types.\n\nWriting TypeScript implementation... Defining the tetromino rotation states... Defining the rotation states for the remaining Tetris pieces... Setting up the game class with canvas rendering for both the main board and next piece preview, along with tracking game state like score, level, and lines cleared, plus timing variables for piece drops and input handling. Setting up the board initialization and piece creation logic...\n\nNow I'm checking if a piece can move to a new position by validating that all its blocks stay within bounds and don't collide with existing pieces on the board. Then I'm placing the current piece onto the board by marking those cells as occupied. Writing game logic... Writing the rendering logic... Writing the render method... Writing the rendering logic... Writing the next piece preview... Writing the game over screen... Initializing the game state by resetting the board, score, and level, then setting up the first pieces and kicking off the main game loop with requestAnimationFrame.\n\nNow I'm handling the core game loop—checking if the game is paused, calculating the effective drop speed based on whether soft drop is active, and triggering piece drops at the appropriate intervals while also rendering each frame. When a piece can't move down anymore, I place it and check for completed lines, otherwise I just increment its y position.\n\nFor input handling, I'm implementing horizontal movement by validating the new position before shifting the piece left or right, and I'm starting the rotation logic by cycling through the available rotations for the current piece type with wall kick attempts to handle edge cases.\n\nStill writing game mechanics... Setting up input handlers...\n\nI'm wiring up keyboard controls for the game—space to start or hard drop, arrow keys and WASD for movement with delayed auto-shift, arrow down or S for soft drop, rotation with up arrow or Z, and pause with P or Escape. On key release, I'm clearing the movement state when the player lets go of left or right.\n\nNow I'm implementing the pause toggle, which stops the game loop and shows an overlay when paused, then resumes by resetting the drop timer. I'm also noticing there's a potential issue with the soft drop timing—when soft dropping is active, the effective drop interval becomes much faster, but I need to verify the math is working correctly for different levels. So for soft drop timing, I'm reconsidering whether to use a fixed rate or scale it with difficulty. Standard Tetris uses 20G acceleration, which would give roughly 40ms per cell at normal speed, but many modern games handle soft drop differently. I'm leaning toward a simpler approach with a consistent fast drop rate rather than scaling it with the level. The soft drop speed formula looks good across all difficulty levels. Now I'm implementing the actual game files, and I'm going to stick with the core mechanics the user requested rather than adding extra features like line clear animations or a hold piece system. For piece randomization, I'm using a 7-bag system where each tetromino appears once before repeating, which prevents long droughts of specific pieces.\n\nImplementing the bag system...\n\nI need to verify the rotation logic for the O piece since it only has one rotation state.\n\nNow I'm thinking through the input handling—I should make sure the rotation key doesn't auto-repeat on hold, and I want to add Z for counter-clockwise rotation using modulo arithmetic to cycle backwards through the rotation states.\n\nI've settled on the control scheme: arrow keys and WASD for movement, Up/W for clockwise rotation, Z for counter-clockwise, Space for hard drop, Down/S for soft drop, and P/Escape to pause. Time to stop overthinking and start building the actual game.\n\nWriting the HTML and styling... Still writing styles...\n\nNow I'm thinking through the overall layout—the game canvas needs to be 300×600 pixels for a 10×20 grid, with the side panel at 160 pixels wide, which gives me a comfortable total width around 484 pixels. I want to make sure the height works well on screen too.\n\nFor the next piece preview, I'm calculating the right canvas size—a 4×4 grid at 28 pixels per cell gives me 112×112 pixels, though I'll pad it out to 140×110 to have some breathing room. The tricky part is centering pieces of different widths, like the O piece which is only 2 blocks wide, so I need to account for that offset when rendering. I'm verifying the vertical centering calculations work the same way—the I piece sits at row 0, while the O and other pieces get centered properly. Now I'll set the canvas dimensions directly in HTML at 140x112 pixels with a block size of 28, then calculate the positioning dynamically based on those dimensions.\n\nSetting up the canvas...\n\nActually, I'm realizing there's a potential issue with the bag array—when I initialize the game, I call `createPiece()` twice to set up both the next piece and current piece, which means I'm popping from the bag twice right away.\n\nI need to reset the bag at the start of each game before creating those pieces. Let me make sure that's in the `startGame()` method.\n\nNow for the drop speed, I'm going to implement a formula that maps game levels to drop intervals. I'll use a simpler approach than the official Nintendo formula—something that feels responsive and scales well across difficulty levels.\n\nWriting the complete implementation... I'm testing an exponential decay formula that smoothly decreases the drop interval as levels increase, capping at 50ms to prevent the game from becoming unplayably fast. The curve feels natural—comfortable early on but ramping up significantly by the mid-teens. I'm settling on an exponential decay formula for the drop speed that caps at a minimum interval, keeping it simple and responsive. Now I'm verifying the T-piece rotation states to make sure they match the standard Tetris behavior across all four orientations. I'm verifying the rotation states for the S and Z pieces now, checking that each 90-degree rotation matches the expected grid patterns. Let me verify the clockwise rotation formula by working through the S piece systematically. Using the transformation where each new position pulls from the old matrix, I'm calculating all nine cells to confirm the rotated shape is correct.\n\nNow I'm checking the J piece rotations using the same method to make sure those definitions are accurate too. Verifying the 180° rotation produces the correct matrix, then moving on to calculate the 270° rotation by applying the same transformation logic to map old coordinates to new positions. Continuing with the L-piece rotation calculations, I'm verifying the second rotation by applying the clockwise transformation again to get the 180-degree state. I'm finishing the rotation calculation for the L piece and verifying the result matches my expected output. Now I need to move on to the I piece rotations, which use 4×4 matrices instead, so I'm starting to verify those as well. Continuing to work through the rotation transformations, I'm verifying that the 90-degree clockwise rotation produces the expected vertical line pattern. Now I need to apply the same transformation again to get the 180-degree rotation. Finishing the rotation calculation, I'm getting the expected output matrix with the 1s shifted to the third row, which matches my definition. Now I'm moving on to apply the same transformation for a 270-degree rotation. Finishing the rotation verification and confirming the tetromino definitions match the expected output. Now I'm ready to write out the actual files with these validated rotation patterns.\n\nSetting up the project structure with HTML, TypeScript game logic, and configuration files. I want to make sure TypeScript compiles properly so the game runs without any build issues.\n\nWriting the HTML file...\n\nConfiguring TypeScript settings...\n\nI'm realizing that using CommonJS would require a bundler for browser compatibility, so ES2020 modules with `<script type=\"module\">` would be cleaner. Actually, the simplest solution for a single TypeScript file is to compile without a module system entirely, letting TypeScript output everything in a way that works directly in the browser.\n\nConfiguring TypeScript...\n\nI'm realizing that since I'm not using any import/export statements in my TypeScript file, the compiled output will just be regular JavaScript without module syntax, even if I specify `\"module\": \"ES2020\"`. The `type=\"module\"` attribute in the HTML script tag won't cause issues in this case, and TypeScript will treat the file as a script rather than a module.\n\nFor the tsconfig, I should skip the `module` option entirely and let TypeScript default to CommonJS, but since my single-file game doesn't have any imports or exports, the output will just be plain JavaScript that works fine in the browser without needing a bundler. Checking the TypeScript module options to confirm `\"module\": \"none\"` is valid and case-insensitive—it is, and it's the right choice for a single-file browser script since it outputs plain JavaScript without any module wrapping. `nodenext`.\n\nYes, `none` is a valid option! Perfect. With `\"module\": \"none\"`, the TypeScript code compiles to plain JavaScript without any module wrapper. This is exactly what I need for a browser script tag.\n\nSo my tsconfig.json will have `target` set to ES2017, `module` set to none, and strict mode enabled. The HTML will just load the compiled script directly.\n\nNow I'm checking my TypeScript code for strict mode compatibility. I'm using non-null assertions on the canvas context, casting DOM elements to HTMLElement, and handling null values in the board type explicitly. There's one spot in the line-clearing logic where I'm splicing the board array and adding a new row that I should verify works correctly with strict checks.\n\nLooking at the loop structure, when a full row is found, I remove it and add an empty row at the top, then the loop counter adjusts so we re-check that same index since rows have shifted up. The logic handles this correctly. I need to trace through the array manipulation more carefully. When I remove a row from the middle and add an empty one at the top, the indices shift in a way that affects my loop logic—specifically, after removing row 5 and unshifting, what was at row 4 is now at row 5, so I shouldn't decrement the row counter; I should check the same index again to account for the shift. I need to trace through what happens to the array indices when I splice out a row and then unshift a new one. When I remove row at index `row`, everything below it shifts up by one index, so the row that was at `row+1` moves to `row`. Then when I unshift an empty row at the top, all existing rows shift down by one, which means that row that just moved to `row` is now at `row+1`. So the net effect is the row originally at `row+1` ends up at `row+1` again, while everything else shifts accordingly. Let me trace through a concrete example to verify this logic. Starting with a 5-row board where row 2 is complete, after removing it with splice and then unshifting an empty row, the rows shift up as expected—what was at index 3 moves to index 2, and what was at index 4 moves to index 3. Then incrementing `row` to 3 means the loop will check the next row down.\n\nActually, wait—the loop is going backwards from `ROWS - 1` down to 0, so when we find a complete row at index 2, incrementing `row` to 3 then immediately decrementing it back to 2 in the next iteration means we're re-checking the row that just shifted up from below the cleared line, which is exactly what we need to do. After clearing row 3, the board shifts and row 2 becomes the old row 3's data, so I need to increment row back to 3 and then decrement it to re-check the new row 2—which is fine since it wasn't complete anyway. Now I'm thinking through what happens when two consecutive rows are both complete: row 4 gets skipped, row 3 clears and shifts everything up, then I need to re-check row 3 since it now contains what was row 2. After the splice and unshift operations, board[3] ends up holding what was originally board[4], which isn't complete, so row 3 gets skipped. Then row 2 checks the old board[1], also incomplete. The algorithm correctly clears two lines total, and the key insight is that the `row++` followed by the loop's `row--` keeps us at the same index to re-examine it with the newly shifted rows.\n\nI'm also considering edge cases—like whether all rows could theoretically be complete at once, but that's impossible in standard Tetris since pieces are placed one at a time.\n\nNow I'm thinking about the soft drop mechanic and how `lastDropTime` interacts with it. When the player holds the soft drop key, the effective drop interval becomes much faster (around 40ms for level 1), so I need to make sure the timing logic handles this correctly.\n\nThe key insight is that when the player releases the soft drop key, `lastDropTime` was just updated from the last soft drop, so the next normal drop will happen 1000ms after that—giving the player a nice grace period to position the piece, which is actually good for gameplay. And when they first press soft drop, if `lastDropTime` is already in the past relative to the new 40ms interval, the piece drops immediately and the timer resets. This all works out naturally with the existing logic.\n\nThe one thing I'm reconsidering is the initial state: when the game starts with `lastDropTime = 0`, the first animation frame will have a huge timestamp value, so the piece drops immediately on frame one. I'm thinking it might be better to initialize `lastDropTime` to the current timestamp on the first frame instead, so the piece doesn't drop until the normal interval has actually elapsed. I can handle this by checking if `lastDropTime` is still 0 at the start of the loop and setting it to the current timestamp if so.\n\nActually, a cleaner approach is to set `lastDropTime` to `performance.now()` right in `startGame()` before the animation loop begins. Since `requestAnimationFrame` uses the same high-resolution timer as `performance.now()`, the first frame's timestamp will be approximately equal to what I set, meaning the elapsed time will be near zero and the piece won't drop immediately. This should work well.\n\nNow I'm thinking about the overall structure—I could use a state machine with 'start', 'playing', 'paused', and 'gameover' states, but that's probably overkill. I'll stick with the boolean flags I already have for `started`, `paused`, and `gameOver` to keep things simple.\n\nTime to write the actual implementation. I'm also considering the visual design for the side panel to make sure it looks polished.\n\nDesigning the arcade-style interface with a dark background, lighter panels, and neon accents. The layout will have the TETRIS logo at the top, followed by score, level, lines, and next piece displays arranged vertically alongside the main game canvas.\n\nBuilding the HTML and CSS structure... I'm testing different canvas dimensions to see how the pieces center properly—a 5×3 grid (125×75 pixels) might give the I piece better vertical spacing since it would have more room around it.\n\nActually, I think the cleanest approach is to just compute the bounding box of the actual filled cells in each piece and center that directly on the canvas, rather than trying to work with the full shape matrix dimensions.\n\nWriting canvas rendering code... Finishing the piece dimensions calculation and then drawing each filled cell at the centered position within the preview box, which properly handles pieces like the I-tetromino that have offset filled cells. With startY=0 and the I piece's block at shape row 1, it draws at canvas row 1, which is slightly above the vertical center of the 4-row canvas—that works fine. Now checking the T piece positioning.\n\nFor the T piece with height 2, the blocks span canvas rows 1 and 2, which centers perfectly between those rows, matching the canvas center. This approach is solid.\n\nI'll go with a 5×3 canvas at NEXT_BLOCK_SIZE (28 pixels), giving me 140×84 dimensions for the preview area.\n\nNow checking the positioning for specific pieces: the I piece (4 wide, 1 tall) centers horizontally at column 0 and vertically at row 1, while the O piece (2×2) positions at column 1, row 0, placing its four blocks in the top-left quadrant of the canvas.\n\nIncreasing the canvas height to 4 rows helps center the O piece vertically at rows 1-2, which aligns better with the middle of the available space. I'm settling on a 5×4 grid for the next block preview area.\n\nNow I'm working through the positioning math for different piece shapes—the I piece lands at row 1 with columns 0-3, and I'm calculating where the T piece should sit to keep it centered as well.\n\nI've settled on the design: a 300px canvas with a 160px side panel and 20px gap between them, giving me 480px total width and 600px height. Time to start writing the actual code files.","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","uuid":"4c5cb892-7798-49ad-9383-ee78ce8ed335"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWoWqYKUCFuyQTjiD7ng4U","type":"message","role":"assistant","content":[{"type":"text","text":"Let me check the current directory first, then build the complete Tetris game."}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","uuid":"8000e3b6-b258-4aa6-aa0d-4e53a8a3a43a"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01LWoWqYKUCFuyQTjiD7ng4U","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01D6hhwAvpZ1drRSuiuiLVwi","name":"Bash","input":{"command":"ls /tmp/loop-bench-c4n513d1","description":"List current directory contents"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4728,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","uuid":"ae988bd8-9798-4e86-8599-e8ac0971b99f"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":638410,"duration_api_ms":98961,"is_error":true,"num_turns":1,"stop_reason":"tool_use","session_id":"e9ebd7e9-6fac-4e46-8689-fdcdeb0e8c7d","total_cost_usd":0.7367664,"usage":{"input_tokens":3,"cache_creation_input_tokens":4728,"cache_read_input_tokens":0,"output_tokens":8000,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":4728},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":6,"outputTokens":47840,"cacheReadInputTokens":4728,"cacheCreationInputTokens":4728,"webSearchRequests":0,"costUSD":0.7367664,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"9826e71c-bb0b-4fc0-8e3b-52c2e4bc0518","errors":["Reached maximum budget ($0.5)"]} diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_output.json @@ -1 +0,0 @@ -{"type":"result","subtype":"error_max_budget_usd","duration_ms":339446,"duration_api_ms":330708,"is_error":true,"num_turns":10,"stop_reason":"tool_use","session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","total_cost_usd":0.5110791,"usage":{"input_tokens":14,"cache_creation_input_tokens":16187,"cache_read_input_tokens":67844,"output_tokens":27612,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":16187},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":15,"outputTokens":28037,"cacheReadInputTokens":83372,"cacheCreationInputTokens":17458,"webSearchRequests":0,"costUSD":0.5110791,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"6f21596a-5ae7-4acf-bb33-188ad97c88b7","errors":["Reached maximum budget ($0.5)"]} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/claude_stderr.log diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/eval_results.json @@ -1,262 +0,0 @@ -{ - "structural": { - "pass": true, - "checks": [ - { - "name": "entry_point_exists", - "pass": true, - "detail": "index.html found" - }, - { - "name": "package_json_exists", - "pass": true, - "detail": "package.json found" - }, - { - "name": "build_succeeds", - "pass": true, - "detail": "no build script defined (static project)" - }, - { - "name": "typescript_compiles", - "pass": true, - "detail": "tsc --noEmit passed" - } - ], - "score": 1.0 - }, - "functional": { - "pass": false, - "error": "playwright eval not yet wired", - "score": 0 - }, - "quality": { - "lint": { - "pass": true, - "errors": 0, - "warnings": 0 - }, - "typecheck": { - "pass": false, - "errors": 1 - }, - "performance": { - "bundle_size_bytes": 23462, - "size_under_512kb": true - }, - "score": 0.33 - }, - "code_analysis": { - "files": { - "total": 6, - "code": 3, - "docs": 0, - "unnecessary": 0, - "unnecessary_list": [] - }, - "lines_of_code": 1625, - "dependencies": { - "production": 0, - "dev": 5, - "total": 5 - }, - "complexity": "moderate", - "console_logs": 0, - "magic_numbers": { - "count": 74, - "excessive": true - }, - "function_length": { - "count": 81, - "average": 7.9, - "max": 31, - "long_functions": 0 - }, - "max_nesting_depth": 10, - "global_declarations": 22, - "naming": { - "dominant_style": "camelCase", - "consistency_pct": 99.3, - "camel_case": 593, - "snake_case": 4 - }, - "error_handling": { - "try_catch_blocks": 0, - "has_error_handling": false - }, - "comments": { - "comment_lines": 120, - "source_lines": 1273, - "ratio_pct": 9.4 - }, - "separation_of_concerns": { - "verdict": "mixed", - "files_with_rendering": 2, - "files_with_logic": 2, - "files_with_both": 2 - }, - "html_validation": { - "valid": false, - "errors": 4 - }, - "duplication_percentage": 0.0, - "score": 0.85 - }, - "transcript_analysis": { - "total_events": 28, - "tool_calls": { - "total": 10, - "bash": 9, - "write": 0, - "edit": 0, - "read": 1 - }, - "wasted_turns": { - "total": 0, - "docs": 0, - "ascii_art": 0, - "server_starts": 0 - }, - "errors_encountered": 0, - "thinking_blocks": 2, - "text_blocks": 3, - "productivity_ratio": 1.0, - "self_tested": false, - "score": 1.0 - }, - "gameplay_bot": { - "pass": false, - "score": 0.94, - "total": 16, - "passed": 15, - "failed": 1, - "report": { - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 16 -> 44" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 79 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 130, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } - } - }, - "score": 0.6725 -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/gameplay-bot-report.json @@ -1,127 +0,0 @@ -{ - "implementation": { - "renderer": "canvas", - "grid_detected": true, - "grid_bounds": { - "x": 0, - "y": 0, - "width": 300, - "height": 600 - }, - "controls": { - "left": "ArrowLeft", - "right": "ArrowRight", - "down": "ArrowDown", - "rotate": "x", - "drop": "Space" - }, - "start_mechanism": "auto", - "score_element_found": false - }, - "tests": [ - { - "name": "game_loads", - "pass": true, - "detail": "no console errors" - }, - { - "name": "game_starts", - "pass": true, - "detail": "started via auto" - }, - { - "name": "auto_drop", - "pass": true, - "detail": "grid state changed after 5s with no input" - }, - { - "name": "move_left", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_right", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "move_down", - "pass": true, - "detail": "grid state changed after key press" - }, - { - "name": "rotate", - "pass": true, - "detail": "piece shape changed after rotate key" - }, - { - "name": "all_pieces_rotate", - "pass": true, - "detail": "rotated: [other] failed: [] (tested 1 piece types in 60 attempts)" - }, - { - "name": "hard_drop", - "pass": true, - "detail": "piece immediately dropped and new piece appeared" - }, - { - "name": "piece_locks", - "pass": true, - "detail": "filled cells persist at bottom" - }, - { - "name": "new_piece_spawns", - "pass": true, - "detail": "new piece detected at top of grid" - }, - { - "name": "multiple_pieces", - "pass": true, - "detail": "grid accumulated cells: 16 -> 44" - }, - { - "name": "line_clear", - "pass": true, - "detail": "line cleared via strategic placement" - }, - { - "name": "score_changes", - "pass": false, - "detail": "no score element found and no number changed" - }, - { - "name": "game_over", - "pass": true, - "detail": "game stopped after stacking to top" - }, - { - "name": "playable_30s", - "pass": true, - "detail": "played for 30s, placed 79 pieces, no crashes" - } - ], - "summary": { - "total": 16, - "passed": 15, - "failed": 1, - "score": 0.94 - }, - "gameplay": { - "pieces_placed": 130, - "lines_cleared": 1, - "max_score_observed": 0, - "play_duration_seconds": 30, - "errors_during_play": 0 - }, - "performance": { - "load_time_ms": 27 - }, - "accessibility": { - "issues": [ - "canvas without aria-label or role", - "canvas without aria-label or role" - ], - "issue_count": 2, - "pass": false - } -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/meta.json @@ -1,30 +0,0 @@ -{ - "model": "sonnet", - "effort": "max", - "prompt_style": "simple", - "language": "typescript", - "human_language": "en", - "tool_read": "on", - "tool_write": "on", - "tool_edit": "on", - "tool_glob": "on", - "tool_grep": "on", - "linter": "on", - "playwright": "on", - "context_file": "none", - "sub_agents": "on", - "web_search": "on", - "max_budget": "low", - "task": "tetris", - "cell_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on", - "runs_per_cell": 3, - "timeout_seconds": 600, - "max_budget_usd": 0.5, - "run_id": "tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3", - "run_number": 3, - "claude_version": "2.1.91 (Claude Code)", - "started_at": "2026-04-03T20:46:29.796470+00:00", - "wall_time_seconds": 340, - "exit_code": 1, - "completed_at": "2026-04-03T20:52:15.455125+00:00" -} -\ No newline at end of file diff --git a/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl b/results/runs/tetris_context_file=none_effort=max_human_language=en_language=typescript_linter=on_max_budget=low_model=sonnet_playwright=on_prompt_style=simple_sub_agents=on_tool_edit=on_tool_glob=on_tool_grep=on_tool_read=on_tool_write=on_web_search=on_run3/transcript.jsonl @@ -1,28 +0,0 @@ -{"type": "harness", "subtype": "config", "model": "sonnet", "effort": "max", "tools": ["Bash", "Read", "Write", "Edit", "Glob", "Grep", "Agent", "WebSearch", "WebFetch"], "max_budget_usd": 0.5, "timeout_seconds": 600, "task": "tetris", "language": "typescript", "prompt_style": "simple"} -{"type": "user", "subtype": "prompt", "message": {"role": "user", "content": "Build a playable Tetris game that runs in a browser. It should have all the standard mechanics: piece rotation, line clearing, scoring, and increasing speed. Use keyboard controls for movement and rotation.\n\n\nUse TypeScript."}} -{"type":"system","subtype":"init","cwd":"/tmp/loop-bench-a45vhkn9","session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","tools":["Bash","Edit","Read"],"mcp_servers":[],"model":"claude-sonnet-4-6","permissionMode":"dontAsk","slash_commands":["update-config","debug","simplify","batch","loop","schedule","claude-api","compact","context","cost","heapdump","init","release-notes","review","security-review","insights"],"apiKeySource":"apiKeyHelper","claude_code_version":"2.1.91","output_style":"default","agents":["general-purpose","statusline-setup","Explore","Plan"],"skills":["update-config","debug","simplify","batch","loop","schedule","claude-api"],"plugins":[{"name":"claude-hud","path":"/root/.claude/plugins/marketplaces/claude-hud/","source":"claude-hud@claude-hud"},{"name":"rust-analyzer-lsp","path":"/root/.claude/plugins/marketplaces/claude-plugins-official/plugins/rust-analyzer-lsp","source":"rust-analyzer-lsp@claude-plugins-official"}],"uuid":"c14378f4-98bb-4139-ba22-4f5e5b710d8e","fast_mode_state":"off"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FQuiMs1iGvjVe7w4ggVti9","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"Let me build a complete Tetris game in TypeScript that runs in the browser. I'll create a well-structured project with:\n\n1. `index.html` - The main HTML file\n2. `src/tetris.ts` - The TypeScript game logic\n3. `tsconfig.json` - TypeScript configuration\n4. `package.json` - Package configuration\n\nLet me plan the game:\n\n**Game Features:**\n- Standard 10x20 Tetris board\n- All 7 tetrominoes (I, O, T, S, Z, J, L)\n- Piece rotation (with wall kicks)\n\n\n- Line clearing and scoring system based on lines cleared\n- Increasing speed over time/levels\n- Keyboard controls (arrow keys + Z/X for rotation)\n- Ghost piece showing where the piece will land\n- Hold piece functionality\n- Next piece preview\n- Game over detection\n- Start/pause functionality\n\n**Keyboard Controls:**\n- Left/Right arrows: Move piece\n- Down arrow: Soft drop\n- Space: Hard drop\n- Up arrow or X: Rotate clockwise\n- Z: Rotate counter-clockwise\n- C: Hold piece\n- P: Pause\n- Enter: Start/Restart\n\n**Scoring (NES Tetris style):**\n- 1 line: 100 × level\n- 2 lines: 300 × level\n- 3 lines: 500 × level\n- 4 lines (Tetris): 800 × level\n\nNow I'm setting up the project structure with TypeScript. I'll create an HTML file, TypeScript source files, and configuration files so it can compile and run in the browser. Building the core game logic... Writing the game engine... Defining the tetromino shapes... Defining the remaining tetromino shapes... Defining wall kick data...\n\nActually, I need to reconsider how these offsets work in the standard rotation system—the x and y coordinates represent column and row adjustments when a piece tries to rotate into a wall.\n\nLet me clarify the coordinate system: rows increase downward (0 at top, 19 at bottom) while the standard SRS notation uses y increasing upward, so I'll need to negate the y values when converting to my row-based system. The x offset maps directly to column changes, and I should verify I'm applying these offsets correctly against the actual wall kick data from the Tetris specification.\n\nWriting the game implementation... Defining the piece data structures... Defining the tetromino pieces...\n\nI'm realizing that using relative coordinates for each rotation state makes implementing wall kicks complicated. I should reconsider this approach.\n\nActually, I think a cleaner solution is to represent each piece as a 2D matrix for each rotation state—that's more standard and easier to work with. Let me structure the complete game now with a solid architecture: I'll create a `TetrisGame` class to manage all the state, handle canvas rendering, process keyboard input, and run the game loop with `requestAnimationFrame`. I'll organize this across a few files: HTML for the structure, TypeScript for the game logic, and the necessary config files.\n\nWriting the complete implementation... Defining the tetromino pieces... Defining the rotation matrices for the remaining Tetris pieces... Defining the wall kick offsets for the SRS rotation system, which specifies the sequence of position adjustments to try when a piece rotation would normally collide with the board or other pieces. Defining the kick offset data for I-pieces...\n\nWait, I need to reconsider the coordinate system here. The SRS wall kicks use standard math coordinates where y increases upward, but my game has rows increasing downward. So when I apply a kick offset, I need to add the x component to the column but subtract the y component from the row to account for this difference. Let me double-check this logic with the spawn-to-clockwise rotation case for the JLSTZ pieces. I'm verifying the I piece rotation offsets match the expected behavior, then moving on to implement the complete game. I'm deciding between a self-contained npm setup with TypeScript or a simpler single HTML file approach, leaning toward the modular structure with separate files for better organization.\n\nWriting the game implementation... Setting up the type definitions and constants for the game board, pieces, and rendering parameters...\n\nDefining piece colors and rotation matrices... Defining the rotation states for the remaining tetromino pieces...","signature":"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"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":4729,"cache_read_input_tokens":0,"cache_creation":{"ephemeral_5m_input_tokens":4729,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"4436ecfc-bd32-4185-a5b8-53aad1772e56"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FCu8X5FsMdfXyLZ9qGSZ5d","type":"message","role":"assistant","content":[{"type":"thinking","thinking":"The user wants a playable Tetris game that runs in a browser using TypeScript. Let me build a complete Tetris game with:\n\n1. Standard Tetris pieces (tetrominoes): I, O, T, S, Z, J, L\n2. Piece rotation\n3. Line clearing\n4. Scoring system\n5. Increasing speed\n6. Keyboard controls (arrow keys for movement, up arrow or Z/X for rotation)\n\nI'll create a self-contained HTML file with TypeScript compiled to JavaScript, or I'll create separate files. Since we need TypeScript, let me create:\n\n\n- `index.html` - the HTML structure\n- `src/game.ts` - the TypeScript source\n- `tsconfig.json` - the TypeScript configuration\n- `package.json` - project dependencies\n\nI'll set up a proper project structure with TypeScript compilation so the game can run in the browser.","signature":"EtEIClsIDBgCKkB7xqMhdbwlPcFVcXK4w55bxJubbIt4ip1RAz47LNxPEGeQ5wuQGGHpDG+SRKSa3tXcjIPGZF6M4tbHVgKc8IilMhFjbGF1ZGUtc29ubmV0LTQtNjgAEgw+9o+UMix8m4XbzHgaDGY/T0s9sjKKEyk2SSIwIaIfdA3Kr0GVMCcLA8BxXKLpyuwk5pnyUzCBRNaxGF1ojtDvHrec7maFdoOqld+3KqMH4YUc53v/CsHtZLlom+KwVm1X27wI0W4x2hefD4wUymq28/EJFW2tBfYdc/GfSFIeZn+DAa5ZJue/0LfnGO57wv6ua12FC1SjsUZDxfOQKynkKTagCCLS4aBVtcgyku+2xbdgfiQW71PkYRhwpcSCUchwtg0FdnPXFO4NY6jx5WwT3wX4DH2xu7uKChIXfmlVGNn1f/PBw/DPtTNcpyxmdALJlxQ0BTwQEC+qEJZczsolH91DAIeqBH+t7FPTqCnDPiDRRLcpQQ6Tcy5S6oB/VsxajlF0yuK4QFAUTmrKzQbnQZf6AmpJKJ9nbIHlN504WNtlZh5r9waAQ/yB+Xhv12CFLmDsPyn9xhZfcXkmuNwPPFxBfbWhabG0Ot6wRk0GEVrjyCQ/Jsx2yhHdK5DpyV+5UgiztufjIFCkriT3S7OXaR3AHrCEmde8OMD3g7nS/F1TLuPMcQmmUV1gGXjWMArDBC4IHuU/wtXkX1eT5MUsC8H1zts7iCE9lSSqJC+SaxcLiugCg0+yraI1A6NlCCBSCrt/5zwoZMjnjmJQp8r0Jqu0XemZDmDINFSpufaAEGRUw+BV7nEIp1bVGj0MV/hBw3cdUH4Sp/jHoWn14Whmqettqhj2nwQCM8NNzmKnr3aPoTLA2kXy67Gtjy3rWnd40WUk8I9WS0IMJiRiYZMe6f8K/27htVdqFQX7eeFA3Sme6rVnP+E/mxWwfTevpFBKquWeEh/yLNps8ilZzH+ocm1AQS/Ul7XVLS60RSh3ocKAJJ6UqCIJzVtUy4OirqKMq6WM2FXvYx1CJSJTpdbAr2VqHgIU2BJGoxkQ6IBkYrAA483Fuz/CmFxDao6g74SwreDVVWuDBbzyXw97l5/cfmFHpgwddlzVmEh4o9gUqrote06T9Ic5hQtvqBYvD95RmgP6nAPNdOaojlnmM2iXlCHyYr2DbH/eDj1m/4UZYhjAhho1wY2754/n4m3aQ3M+ulXscGGquNLlyu+GrXfknfThg3NfS592MWPpusR9rrwgZHHu9UJ0xQpg9W6F8nHco+83ngWSqyqDYA2rjjIAuikXXlMzcEb3L5xwqaq01yEunQK3Dlygvb4/JDtC+xdW5H1SxR0e6pJGvXoCVjMnZePloQK4aeFQb6m3aAKgwP8Wql9N600GfN6ueCYEWqn1SQ6MY4SGcQxDYNCkXluCqdByr0GqNxx3+63lSvwa/r4ocfzsIE1eA9J0zuttyC4VdBgB"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"d83b4981-8d63-4e72-b606-2f4b1d15bef1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01FCu8X5FsMdfXyLZ9qGSZ5d","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01ACTdU5EMvYpDhDQdnyR6aV","name":"Bash","input":{"command":"ls /tmp/loop-bench-a45vhkn9 && which tsc && tsc --version","description":"Check directory contents and TypeScript availability"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":3,"cache_creation_input_tokens":0,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":0,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"a7a67ea4-37a0-4a72-90b3-301bcb97af5f"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01ACTdU5EMvYpDhDQdnyR6aV","type":"tool_result","content":"node_modules\npackage.json\npackage-lock.json\n/usr/bin/tsc\nVersion 5.9.3","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"a9f9500f-f008-48f8-8414-2a1d8672c362","timestamp":"2026-04-03T20:48:20.773Z","tool_use_result":{"stdout":"node_modules\npackage.json\npackage-lock.json\n/usr/bin/tsc\nVersion 5.9.3","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01XsXkFnXq3khGctXdNDKNxB","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01JTMNSnfh1wVtKaB5kNAtjc","name":"Read","input":{"file_path":"/tmp/loop-bench-a45vhkn9/package.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":417,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":417,"ephemeral_1h_input_tokens":0},"output_tokens":54,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"382d5193-6787-4ee8-92d1-f71608530645"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01JTMNSnfh1wVtKaB5kNAtjc","type":"tool_result","content":"1\t{\n2\t \"name\": \"loop-bench-a45vhkn9\",\n3\t \"version\": \"1.0.0\",\n4\t \"description\": \"\",\n5\t \"main\": \"index.js\",\n6\t \"scripts\": {\n7\t \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n8\t },\n9\t \"keywords\": [],\n10\t \"author\": \"\",\n11\t \"license\": \"ISC\",\n12\t \"type\": \"commonjs\",\n13\t \"devDependencies\": {\n14\t \"@eslint/js\": \"^10.0.1\",\n15\t \"@playwright/test\": \"^1.59.1\",\n16\t \"@types/node\": \"^25.5.2\",\n17\t \"eslint\": \"^10.2.0\",\n18\t \"typescript\": \"^6.0.2\"\n19\t }\n20\t}\n21\t\n\n<system-reminder>\nWhenever you read a file, you should consider whether it would be considered malware. You CAN and SHOULD provide analysis of malware, what it is doing. But you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer questions about the code behavior.\n</system-reminder>\n"}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"ffb6a4ed-57f6-400c-b3eb-e4270c9def19","timestamp":"2026-04-03T20:48:22.417Z","tool_use_result":{"type":"text","file":{"filePath":"/tmp/loop-bench-a45vhkn9/package.json","content":"{\n \"name\": \"loop-bench-a45vhkn9\",\n \"version\": \"1.0.0\",\n \"description\": \"\",\n \"main\": \"index.js\",\n \"scripts\": {\n \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"ISC\",\n \"type\": \"commonjs\",\n \"devDependencies\": {\n \"@eslint/js\": \"^10.0.1\",\n \"@playwright/test\": \"^1.59.1\",\n \"@types/node\": \"^25.5.2\",\n \"eslint\": \"^10.2.0\",\n \"typescript\": \"^6.0.2\"\n }\n}\n","numLines":21,"startLine":1,"totalLines":21}}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015CXHE2nQ87VUY221Q7RmRF","type":"message","role":"assistant","content":[{"type":"text","text":"Now I have a clear picture of the environment. Let me build the full Tetris game:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":814,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":814,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"96794e84-0e33-43ed-a47c-c0132b19d823"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_015CXHE2nQ87VUY221Q7RmRF","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_016AkRttKsVtUqjUjnASSRtv","name":"Bash","input":{"command":"cat > /tmp/loop-bench-a45vhkn9/tsconfig.json << 'EOF'\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"ES2020\",\n \"moduleResolution\": \"node\",\n \"strict\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"lib\": [\"ES2020\", \"DOM\"],\n \"noEmitOnError\": true\n },\n \"include\": [\"src/**/*\"]\n}\nEOF","description":"Write tsconfig.json"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":814,"cache_read_input_tokens":4729,"cache_creation":{"ephemeral_5m_input_tokens":814,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"b82eeccb-1a40-4662-b993-63ce247367dd"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_016AkRttKsVtUqjUjnASSRtv","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"b04adda1-f07b-4a35-a137-34fd9faa56e0","timestamp":"2026-04-03T20:48:25.855Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01F4Ny3gMDvhrtwn5Yz2JSzA","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01CbQpbqiGS1yg5rUj5f5S6P","name":"Bash","input":{"command":"mkdir -p /tmp/loop-bench-a45vhkn9/src /tmp/loop-bench-a45vhkn9/dist","description":"Create src and dist directories"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":242,"cache_read_input_tokens":5543,"cache_creation":{"ephemeral_5m_input_tokens":242,"ephemeral_1h_input_tokens":0},"output_tokens":65,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"42c803fc-d098-4e52-bd12-c51507866eab"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01CbQpbqiGS1yg5rUj5f5S6P","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"1d10f6f8-7b0a-4415-b2bf-9d7048dec920","timestamp":"2026-04-03T20:48:28.569Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":true}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01HscVfJdZVxEpGLDxcJhixK","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01KbeTQYtNydaNAHBHecvQkv","name":"Bash","input":{"command":"cat > /tmp/loop-bench-a45vhkn9/src/tetris.ts << 'TSEOF'\n// ─── Constants ───────────────────────────────────────────────────────────────\n\nconst COLS = 10;\nconst ROWS = 20;\nconst BLOCK = 30; // px per cell\nconst HIDDEN_ROWS = 2; // rows above the visible grid for spawn area\n\n// Scoring per simultaneous line-clear (classic Tetris BPS formula × level)\nconst LINE_SCORES = [0, 100, 300, 500, 800];\n\n// Frames-per-drop at each level (lower = faster). 60 fps baseline.\nconst SPEEDS: number[] = [\n 48, 43, 38, 33, 28, 23, 18, 13, 8, 6, // levels 0-9\n 5, 5, 5, 4, 4, 4, 3, 3, 3, // levels 10-18\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // levels 19-28\n 1 // level 29+\n];\n\nfunction speedForLevel(level: number): number {\n return SPEEDS[Math.min(level, SPEEDS.length - 1)];\n}\n\n// ─── Piece definitions ───────────────────────────────────────────────────────\n\n// Each piece is represented as an array of rotation states.\n// Every rotation state is a 4×4 grid (flat array, row-major).\n\ntype PieceShape = number[][]; // [rotation][cell-index]\ntype Color = string;\n\ninterface PieceDef {\n shapes: PieceShape;\n color: Color;\n}\n\n// prettier-ignore\nconst PIECES: PieceDef[] = [\n // I\n {\n color: \"#00f0f0\",\n shapes: [\n [0,0,0,0, 1,1,1,1, 0,0,0,0, 0,0,0,0],\n [0,0,1,0, 0,0,1,0, 0,0,1,0, 0,0,1,0],\n [0,0,0,0, 0,0,0,0, 1,1,1,1, 0,0,0,0],\n [0,1,0,0, 0,1,0,0, 0,1,0,0, 0,1,0,0],\n ],\n },\n // O\n {\n color: \"#f0f000\",\n shapes: [\n [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,1,0, 0,1,1,0, 0,0,0,0, 0,0,0,0],\n ],\n },\n // T\n {\n color: \"#a000f0\",\n shapes: [\n [0,1,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,0,0, 0,1,1,0, 0,1,0,0, 0,0,0,0],\n [0,0,0,0, 1,1,1,0, 0,1,0,0, 0,0,0,0],\n [0,1,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0],\n ],\n },\n // S\n {\n color: \"#00f000\",\n shapes: [\n [0,1,1,0, 1,1,0,0, 0,0,0,0, 0,0,0,0],\n [0,1,0,0, 0,1,1,0, 0,0,1,0, 0,0,0,0],\n [0,0,0,0, 0,1,1,0, 1,1,0,0, 0,0,0,0],\n [1,0,0,0, 1,1,0,0, 0,1,0,0, 0,0,0,0],\n ],\n },\n // Z\n {\n color: \"#f00000\",\n shapes: [\n [1,1,0,0, 0,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,0,1,0, 0,1,1,0, 0,1,0,0, 0,0,0,0],\n [0,0,0,0, 1,1,0,0, 0,1,1,0, 0,0,0,0],\n [0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0],\n ],\n },\n // J\n {\n color: \"#0000f0\",\n shapes: [\n [1,0,0,0, 1,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,1,0, 0,1,0,0, 0,1,0,0, 0,0,0,0],\n [0,0,0,0, 1,1,1,0, 0,0,1,0, 0,0,0,0],\n [0,1,0,0, 0,1,0,0, 1,1,0,0, 0,0,0,0],\n ],\n },\n // L\n {\n color: \"#f0a000\",\n shapes: [\n [0,0,1,0, 1,1,1,0, 0,0,0,0, 0,0,0,0],\n [0,1,0,0, 0,1,0,0, 0,1,1,0, 0,0,0,0],\n [0,0,0,0, 1,1,1,0, 1,0,0,0, 0,0,0,0],\n [1,1,0,0, 0,1,0,0, 0,1,0,0, 0,0,0,0],\n ],\n },\n];\n\n// ─── SRS Wall-kick data ───────────────────────────────────────────────────────\n\n// Tests for J, L, S, T, Z pieces (non-I)\n// Index: [fromRotation * 4 + toDirection (0=CW, 1=CCW)]\n// Each entry: array of (col_offset, row_offset) pairs to try\n\nconst KICKS_JLSTZ: [number, number][][] = [\n // 0>>1 (CW from state 0)\n [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n // 1>>0 (CCW from state 1)\n [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n // 1>>2\n [[0,0],[1,0],[1,-1],[0,2],[1,2]],\n // 2>>1\n [[0,0],[-1,0],[-1,1],[0,-2],[-1,-2]],\n // 2>>3\n [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n // 3>>2\n [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n // 3>>0\n [[0,0],[-1,0],[-1,-1],[0,2],[-1,2]],\n // 0>>3 (CCW from state 0)\n [[0,0],[1,0],[1,1],[0,-2],[1,-2]],\n];\n\nconst KICKS_I: [number, number][][] = [\n // 0>>1\n [[0,0],[-2,0],[1,0],[-2,-1],[1,2]],\n // 1>>0\n [[0,0],[2,0],[-1,0],[2,1],[-1,-2]],\n // 1>>2\n [[0,0],[-1,0],[2,0],[-1,2],[2,-1]],\n // 2>>1\n [[0,0],[1,0],[-2,0],[1,-2],[-2,1]],\n // 2>>3\n [[0,0],[2,0],[-1,0],[2,1],[-1,-2]],\n // 3>>2\n [[0,0],[-2,0],[1,0],[-2,-1],[1,2]],\n // 3>>0\n [[0,0],[1,0],[-2,0],[1,-2],[-2,1]],\n // 0>>3\n [[0,0],[-1,0],[2,0],[-1,2],[2,-1]],\n];\n\nfunction getKickTable(pieceIndex: number, fromRot: number, cw: boolean): [number, number][] {\n const tableIndex = [\n 0 * 2 + (cw ? 0 : 1), // 0 CW→1 | 0 CCW→3\n 1 * 2 + (cw ? 0 : 1), // 1 CW→2 | 1 CCW→0\n 2 * 2 + (cw ? 0 : 1), // 2 CW→3 | 2 CCW→1\n 3 * 2 + (cw ? 0 : 1), // 3 CW→0 | 3 CCW→2\n ];\n const table = pieceIndex === 0 ? KICKS_I : KICKS_JLSTZ;\n return table[tableIndex[fromRot]];\n}\n\n// ─── Piece (active) ───────────────────────────────────────────────────────────\n\ninterface ActivePiece {\n index: number; // piece type index into PIECES\n rot: number; // current rotation state 0-3\n col: number; // left edge column (can be negative)\n row: number; // top edge row (0 = first hidden row)\n}\n\nfunction pieceBlocks(p: ActivePiece): [number, number][] {\n const shape = PIECES[p.index].shapes[p.rot];\n const cells: [number, number][] = [];\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (shape[r * 4 + c]) {\n cells.push([p.row + r, p.col + c]);\n }\n }\n }\n return cells;\n}\n\n// ─── Board ────────────────────────────────────────────────────────────────────\n\n// Board includes hidden rows at the top. Total height = ROWS + HIDDEN_ROWS.\n// Each cell: 0 = empty, else = color string.\n\ntype Board = (string | 0)[][];\n\nfunction createBoard(): Board {\n return Array.from({ length: ROWS + HIDDEN_ROWS }, () => Array(COLS).fill(0));\n}\n\nfunction isValid(board: Board, p: ActivePiece): boolean {\n for (const [r, c] of pieceBlocks(p)) {\n if (c < 0 || c >= COLS) return false;\n if (r >= ROWS + HIDDEN_ROWS) return false;\n if (r >= 0 && board[r][c] !== 0) return false;\n }\n return true;\n}\n\nfunction lockPiece(board: Board, p: ActivePiece): void {\n const color = PIECES[p.index].color;\n for (const [r, c] of pieceBlocks(p)) {\n if (r >= 0) board[r][c] = color;\n }\n}\n\n/** Clears full lines; returns count of lines cleared. */\nfunction clearLines(board: Board): number {\n let cleared = 0;\n for (let r = ROWS + HIDDEN_ROWS - 1; r >= 0; ) {\n if (board[r].every(cell => cell !== 0)) {\n board.splice(r, 1);\n board.unshift(Array(COLS).fill(0));\n cleared++;\n // Don't decrement r — the row at index r is now the next one to check\n } else {\n r--;\n }\n }\n return cleared;\n}\n\n// ─── Bag randomiser (7-bag) ───────────────────────────────────────────────────\n\nfunction newBag(): number[] {\n const bag = [0, 1, 2, 3, 4, 5, 6];\n for (let i = bag.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [bag[i], bag[j]] = [bag[j], bag[i]];\n }\n return bag;\n}\n\n// ─── Ghost piece ──────────────────────────────────────────────────────────────\n\nfunction ghostPiece(board: Board, p: ActivePiece): ActivePiece {\n let ghost: ActivePiece = { ...p };\n while (isValid(board, { ...ghost, row: ghost.row + 1 })) {\n ghost = { ...ghost, row: ghost.row + 1 };\n }\n return ghost;\n}\n\n// ─── Game state ───────────────────────────────────────────────────────────────\n\ninterface GameState {\n board: Board;\n current: ActivePiece;\n next: number[]; // upcoming piece indices (first = next)\n held: number | null;\n holdUsed: boolean; // can only hold once per piece\n score: number;\n lines: number;\n level: number;\n gameOver: boolean;\n paused: boolean;\n // tick counters\n dropCounter: number; // frames since last gravity drop\n lockDelay: number; // frames spent \"touching\" the floor (for lock delay)\n bag: number[]; // current 7-bag\n}\n\nfunction spawnPiece(index: number): ActivePiece {\n return {\n index,\n rot: 0,\n col: Math.floor(COLS / 2) - 2,\n row: HIDDEN_ROWS - 1, // spawn in hidden area (row 1 visible = row HIDDEN_ROWS)\n };\n}\n\nfunction nextFromBag(state: GameState): number {\n if (state.bag.length === 0) state.bag = newBag();\n return state.bag.pop()!;\n}\n\nfunction initState(): GameState {\n const bag = newBag();\n // prefill 5 preview pieces\n const next: number[] = [];\n const tempBag = [...bag];\n const extraBag = newBag();\n const combined = [...tempBag, ...extraBag];\n for (let i = 0; i < 5; i++) next.push(combined.pop()!);\n const remainingBag = combined;\n\n const currentIndex = remainingBag.pop()!;\n\n return {\n board: createBoard(),\n current: spawnPiece(currentIndex),\n next,\n held: null,\n holdUsed: false,\n score: 0,\n lines: 0,\n level: 0,\n gameOver: false,\n paused: false,\n dropCounter: 0,\n lockDelay: 0,\n bag: remainingBag,\n };\n}\n\n// ─── Renderer ────────────────────────────────────────────────────────────────\n\nclass Renderer {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n\n constructor(canvas: HTMLCanvasElement) {\n this.canvas = canvas;\n this.ctx = canvas.getContext(\"2d\")!;\n }\n\n clear(): void {\n this.ctx.fillStyle = \"#111\";\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n\n drawBlock(col: number, row: number, color: string, alpha = 1): void {\n const x = col * BLOCK;\n const y = row * BLOCK;\n const ctx = this.ctx;\n ctx.globalAlpha = alpha;\n\n // Fill\n ctx.fillStyle = color;\n ctx.fillRect(x + 1, y + 1, BLOCK - 2, BLOCK - 2);\n\n // Highlight (top-left bevel)\n ctx.fillStyle = \"rgba(255,255,255,0.25)\";\n ctx.fillRect(x + 1, y + 1, BLOCK - 2, 4);\n ctx.fillRect(x + 1, y + 1, 4, BLOCK - 2);\n\n // Shadow (bottom-right bevel)\n ctx.fillStyle = \"rgba(0,0,0,0.35)\";\n ctx.fillRect(x + 1, y + BLOCK - 5, BLOCK - 2, 4);\n ctx.fillRect(x + BLOCK - 5, y + 1, 4, BLOCK - 2);\n\n ctx.globalAlpha = 1;\n }\n\n drawBoard(board: Board): void {\n for (let r = HIDDEN_ROWS; r < ROWS + HIDDEN_ROWS; r++) {\n for (let c = 0; c < COLS; c++) {\n const cell = board[r][c];\n const visRow = r - HIDDEN_ROWS;\n if (cell !== 0) {\n this.drawBlock(c, visRow, cell);\n } else {\n // Grid dot\n this.ctx.fillStyle = \"rgba(255,255,255,0.04)\";\n this.ctx.fillRect(c * BLOCK + BLOCK / 2 - 1, visRow * BLOCK + BLOCK / 2 - 1, 2, 2);\n }\n }\n }\n }\n\n drawPiece(p: ActivePiece, ghost = false): void {\n const color = PIECES[p.index].color;\n for (const [r, c] of pieceBlocks(p)) {\n const visRow = r - HIDDEN_ROWS;\n if (visRow >= 0 && visRow < ROWS) {\n if (ghost) {\n // Ghost: outline only\n const x = c * BLOCK;\n const y = visRow * BLOCK;\n this.ctx.strokeStyle = color;\n this.ctx.globalAlpha = 0.35;\n this.ctx.lineWidth = 2;\n this.ctx.strokeRect(x + 2, y + 2, BLOCK - 4, BLOCK - 4);\n this.ctx.globalAlpha = 1;\n } else {\n this.drawBlock(c, visRow, color);\n }\n }\n }\n }\n\n drawMiniPiece(\n ctx: CanvasRenderingContext2D,\n index: number,\n cx: number,\n cy: number,\n blockSize = 20\n ): void {\n const shape = PIECES[index].shapes[0];\n const color = PIECES[index].color;\n // Find bounding box\n let minR = 4, maxR = 0, minC = 4, maxC = 0;\n for (let r = 0; r < 4; r++) {\n for (let c = 0; c < 4; c++) {\n if (shape[r * 4 + c]) {\n minR = Math.min(minR, r);\n maxR = Math.max(maxR, r);\n minC = Math.min(minC, c);\n maxC = Math.max(maxC, c);\n }\n }\n }\n const pw = (maxC - minC + 1) * blockSize;\n const ph = (maxR - minR + 1) * blockSize;\n const ox = cx - pw / 2;\n const oy = cy - ph / 2;\n\n for (let r = minR; r <= maxR; r++) {\n for (let c = minC; c <= maxC; c++) {\n if (shape[r * 4 + c]) {\n const x = ox + (c - minC) * blockSize;\n const y = oy + (r - minR) * blockSize;\n ctx.fillStyle = color;\n ctx.fillRect(x + 1, y + 1, blockSize - 2, blockSize - 2);\n ctx.fillStyle = \"rgba(255,255,255,0.25)\";\n ctx.fillRect(x + 1, y + 1, blockSize - 2, 3);\n ctx.fillRect(x + 1, y + 1, 3, blockSize - 2);\n ctx.fillStyle = \"rgba(0,0,0,0.3)\";\n ctx.fillRect(x + 1, y + blockSize - 4, blockSize - 2, 3);\n ctx.fillRect(x + blockSize - 4, y + 1, 3, blockSize - 2);\n }\n }\n }\n }\n}\n\n// ─── Sidebar renderer ─────────────────────────────────────────────────────────\n\nclass SidebarRenderer {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private renderer: Renderer;\n\n constructor(canvas: HTMLCanvasElement, renderer: Renderer) {\n this.canvas = canvas;\n this.ctx = canvas.getContext(\"2d\")!;\n this.renderer = renderer;\n }\n\n draw(state: GameState): void {\n const ctx = this.ctx;\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n\n ctx.fillStyle = \"#1a1a2e\";\n ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n\n const W = this.canvas.width;\n\n // ── NEXT pieces ──\n this.drawLabel(ctx, \"NEXT\", W / 2, 28);\n for (let i = 0; i < Math.min(5, state.next.length); i++) {\n this.renderer.drawMiniPiece(ctx, state.next[i], W / 2, 70 + i * 64, 18);\n }\n\n // ── HOLD ──\n const holdY = 70 + 5 * 64 + 20;\n this.drawLabel(ctx, \"HOLD\", W / 2, holdY);\n if (state.held !== null) {\n const alpha = state.holdUsed ? 0.35 : 1;\n ctx.globalAlpha = alpha;\n this.renderer.drawMiniPiece(ctx, state.held, W / 2, holdY + 40, 18);\n ctx.globalAlpha = 1;\n }\n\n // ── SCORE / LINES / LEVEL ──\n const statsY = holdY + 90;\n this.drawStat(ctx, \"SCORE\", String(state.score), W / 2, statsY);\n this.drawStat(ctx, \"LINES\", String(state.lines), W / 2, statsY + 70);\n this.drawStat(ctx, \"LEVEL\", String(state.level), W / 2, statsY + 140);\n }\n\n private drawLabel(ctx: CanvasRenderingContext2D, text: string, x: number, y: number): void {\n ctx.fillStyle = \"#888\";\n ctx.font = \"bold 12px 'Courier New', monospace\";\n ctx.textAlign = \"center\";\n ctx.fillText(text, x, y);\n }\n\n private drawStat(\n ctx: CanvasRenderingContext2D,\n label: string,\n value: string,\n x: number,\n y: number\n ): void {\n this.drawLabel(ctx, label, x, y);\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 22px 'Courier New', monospace\";\n ctx.textAlign = \"center\";\n ctx.fillText(value, x, y + 26);\n }\n}\n\n// ─── Input handler ────────────────────────────────────────────────────────────\n\ntype Action =\n | \"moveLeft\"\n | \"moveRight\"\n | \"softDrop\"\n | \"hardDrop\"\n | \"rotateCW\"\n | \"rotateCCW\"\n | \"hold\"\n | \"pause\";\n\nconst KEY_MAP: Record<string, Action> = {\n ArrowLeft: \"moveLeft\",\n ArrowRight: \"moveRight\",\n ArrowDown: \"softDrop\",\n ArrowUp: \"rotateCW\",\n \" \": \"hardDrop\", // Space\n z: \"rotateCCW\",\n Z: \"rotateCCW\",\n x: \"rotateCW\",\n X: \"rotateCW\",\n c: \"hold\",\n C: \"hold\",\n p: \"pause\",\n P: \"pause\",\n Escape: \"pause\",\n};\n\nclass InputHandler {\n private pressed = new Set<Action>();\n private justPressed = new Set<Action>();\n // DAS (delayed auto shift)\n private dasTimer: Partial<Record<Action, number>> = {};\n private readonly DAS_INITIAL = 10; // frames before auto-repeat starts\n private readonly DAS_REPEAT = 2; // frames between repeats\n\n constructor() {\n window.addEventListener(\"keydown\", (e) => {\n const action = KEY_MAP[e.key];\n if (action) {\n e.preventDefault();\n if (!this.pressed.has(action)) {\n this.justPressed.add(action);\n this.pressed.add(action);\n this.dasTimer[action] = 0;\n }\n }\n });\n window.addEventListener(\"keyup\", (e) => {\n const action = KEY_MAP[e.key];\n if (action) {\n this.pressed.delete(action);\n delete this.dasTimer[action];\n }\n });\n }\n\n /** Call once per frame to update DAS timers. Returns actions to execute this frame. */\n tick(): Action[] {\n const actions: Action[] = [];\n\n for (const action of this.justPressed) {\n actions.push(action);\n }\n this.justPressed.clear();\n\n // DAS for movement\n for (const action of [\"moveLeft\", \"moveRight\", \"softDrop\"] as Action[]) {\n if (this.pressed.has(action) && !actions.includes(action)) {\n const t = (this.dasTimer[action] ?? 0) + 1;\n this.dasTimer[action] = t;\n if (t >= this.DAS_INITIAL && (t - this.DAS_INITIAL) % this.DAS_REPEAT === 0) {\n actions.push(action);\n }\n }\n }\n\n return actions;\n }\n}\n\n// ─── Game logic ───────────────────────────────────────────────────────────────\n\nconst LOCK_DELAY_FRAMES = 30; // half a second at 60fps\n\nfunction tryMove(state: GameState, dc: number, dr: number): boolean {\n const next: ActivePiece = { ...state.current, col: state.current.col + dc, row: state.current.row + dr };\n if (isValid(state.board, next)) {\n state.current = next;\n return true;\n }\n return false;\n}\n\nfunction tryRotate(state: GameState, cw: boolean): boolean {\n const fromRot = state.current.rot;\n const toRot = cw ? (fromRot + 1) % 4 : (fromRot + 3) % 4;\n const kicks = getKickTable(state.current.index, fromRot, cw);\n\n for (const [dc, dr] of kicks) {\n const candidate: ActivePiece = {\n ...state.current,\n rot: toRot,\n col: state.current.col + dc,\n row: state.current.row + dr,\n };\n if (isValid(state.board, candidate)) {\n state.current = candidate;\n return true;\n }\n }\n return false;\n}\n\nfunction doHold(state: GameState): void {\n if (state.holdUsed) return;\n state.holdUsed = true;\n const idx = state.current.index;\n if (state.held === null) {\n state.held = idx;\n spawnNext(state);\n } else {\n const prev = state.held;\n state.held = idx;\n state.current = spawnPiece(prev);\n if (!isValid(state.board, state.current)) {\n state.gameOver = true;\n }\n }\n state.dropCounter = 0;\n state.lockDelay = 0;\n}\n\nfunction spawnNext(state: GameState): void {\n const nextIdx = state.next.shift()!;\n // Refill next queue\n if (state.bag.length === 0) state.bag = newBag();\n state.next.push(state.bag.pop()!);\n\n state.current = spawnPiece(nextIdx);\n state.holdUsed = false;\n state.dropCounter = 0;\n state.lockDelay = 0;\n\n if (!isValid(state.board, state.current)) {\n state.gameOver = true;\n }\n}\n\nfunction lockAndClear(state: GameState): void {\n lockPiece(state.board, state.current);\n const cleared = clearLines(state.board);\n if (cleared > 0) {\n state.score += LINE_SCORES[cleared] * (state.level + 1);\n state.lines += cleared;\n state.level = Math.floor(state.lines / 10);\n }\n spawnNext(state);\n}\n\nfunction hardDrop(state: GameState): void {\n let dropped = 0;\n while (isValid(state.board, { ...state.current, row: state.current.row + 1 })) {\n state.current = { ...state.current, row: state.current.row + 1 };\n dropped++;\n }\n state.score += dropped * 2;\n lockAndClear(state);\n}\n\nfunction processActions(state: GameState, actions: Action[]): void {\n for (const action of actions) {\n if (action === \"pause\") {\n state.paused = !state.paused;\n continue;\n }\n if (state.paused || state.gameOver) continue;\n switch (action) {\n case \"moveLeft\":\n if (tryMove(state, -1, 0)) state.lockDelay = 0;\n break;\n case \"moveRight\":\n if (tryMove(state, 1, 0)) state.lockDelay = 0;\n break;\n case \"softDrop\":\n if (tryMove(state, 0, 1)) {\n state.score += 1;\n state.dropCounter = 0;\n state.lockDelay = 0;\n }\n break;\n case \"hardDrop\":\n hardDrop(state);\n break;\n case \"rotateCW\":\n if (tryRotate(state, true)) state.lockDelay = 0;\n break;\n case \"rotateCCW\":\n if (tryRotate(state, false)) state.lockDelay = 0;\n break;\n case \"hold\":\n doHold(state);\n break;\n }\n }\n}\n\nfunction tickGravity(state: GameState): void {\n if (state.paused || state.gameOver) return;\n\n const speed = speedForLevel(state.level);\n state.dropCounter++;\n\n const onGround = !isValid(state.board, { ...state.current, row: state.current.row + 1 });\n\n if (onGround) {\n state.lockDelay++;\n if (state.lockDelay >= LOCK_DELAY_FRAMES) {\n lockAndClear(state);\n }\n } else {\n state.lockDelay = 0;\n if (state.dropCounter >= speed) {\n state.dropCounter = 0;\n tryMove(state, 0, 1);\n }\n }\n}\n\n// ─── Overlay rendering ────────────────────────────────────────────────────────\n\nfunction drawOverlay(\n ctx: CanvasRenderingContext2D,\n w: number,\n h: number,\n text: string,\n sub: string\n): void {\n ctx.fillStyle = \"rgba(0,0,0,0.65)\";\n ctx.fillRect(0, 0, w, h);\n\n ctx.fillStyle = \"#fff\";\n ctx.font = \"bold 36px 'Courier New', monospace\";\n ctx.textAlign = \"center\";\n ctx.fillText(text, w / 2, h / 2 - 20);\n\n ctx.font = \"16px 'Courier New', monospace\";\n ctx.fillStyle = \"#aaa\";\n ctx.fillText(sub, w / 2, h / 2 + 16);\n}\n\n// ─── Main game loop ───────────────────────────────────────────────────────────\n\nclass TetrisGame {\n private state: GameState;\n private renderer: Renderer;\n private sidebar: SidebarRenderer;\n private input: InputHandler;\n private mainCanvas: HTMLCanvasElement;\n private frameId = 0;\n\n constructor() {\n this.mainCanvas = document.getElementById(\"board\") as HTMLCanvasElement;\n const sideCanvas = document.getElementById(\"sidebar\") as HTMLCanvasElement;\n\n this.mainCanvas.width = COLS * BLOCK;\n this.mainCanvas.height = ROWS * BLOCK;\n sideCanvas.width = 140;\n sideCanvas.height = ROWS * BLOCK;\n\n this.renderer = new Renderer(this.mainCanvas);\n this.sidebar = new SidebarRenderer(sideCanvas, this.renderer);\n this.input = new InputHandler();\n this.state = initState();\n\n document.getElementById(\"restart-btn\")!.addEventListener(\"click\", () => this.restart());\n\n this.loop();\n }\n\n restart(): void {\n cancelAnimationFrame(this.frameId);\n this.state = initState();\n this.loop();\n }\n\n private loop(): void {\n const tick = (): void => {\n const actions = this.input.tick();\n processActions(this.state, actions);\n tickGravity(this.state);\n this.render();\n this.frameId = requestAnimationFrame(tick);\n };\n this.frameId = requestAnimationFrame(tick);\n }\n\n private render(): void {\n const state = this.state;\n const ctx = this.mainCanvas.getContext(\"2d\")!;\n const W = this.mainCanvas.width;\n const H = this.mainCanvas.height;\n\n this.renderer.clear();\n this.renderer.drawBoard(state.board);\n\n if (!state.gameOver && !state.paused) {\n this.renderer.drawPiece(ghostPiece(state.board, state.current), true);\n this.renderer.drawPiece(state.current);\n }\n\n this.sidebar.draw(state);\n\n if (state.paused && !state.gameOver) {\n drawOverlay(ctx, W, H, \"PAUSED\", \"press P to resume\");\n }\n if (state.gameOver) {\n drawOverlay(ctx, W, H, \"GAME OVER\", `score: ${state.score}`);\n }\n }\n}\n\n// Boot when DOM is ready\nwindow.addEventListener(\"DOMContentLoaded\", () => {\n new TetrisGame();\n});\nTSEOF","description":"Write the full Tetris TypeScript source"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":0,"cache_read_input_tokens":5910,"cache_creation":{"ephemeral_5m_input_tokens":0,"ephemeral_1h_input_tokens":0},"output_tokens":61,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"c84c60be-3b91-4959-8f0e-782648deccc7"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01KbeTQYtNydaNAHBHecvQkv","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"5d737f09-a6f1-4505-b1ff-a2738ae344e7","timestamp":"2026-04-03T20:51:46.182Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01EPsksXiYFqLK57isRuvqiT","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Fuvk9Wruk6QcRbDmhAQ6kU","name":"Bash","input":{"command":"tsc 2>&1","description":"Compile TypeScript"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":9418,"cache_read_input_tokens":5910,"cache_creation":{"ephemeral_5m_input_tokens":9418,"ephemeral_1h_input_tokens":0},"output_tokens":37,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"e3b5aef0-dca5-400f-81cf-daba323ff56e"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Fuvk9Wruk6QcRbDmhAQ6kU","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"ace7ec69-4bf5-4c0c-9a14-18f40ba042ce","timestamp":"2026-04-03T20:51:50.567Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_01GwhnSzkGSGKkfL8gdFoCoe","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01BcnGyUnhbteVuDN6p8XKeV","name":"Bash","input":{"command":"ls /tmp/loop-bench-a45vhkn9/dist/","description":"Verify compiled output"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":95,"cache_read_input_tokens":15328,"cache_creation":{"ephemeral_5m_input_tokens":95,"ephemeral_1h_input_tokens":0},"output_tokens":37,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"82fbc1ed-1631-4d0e-9f26-7d7c3aae6dd4"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01BcnGyUnhbteVuDN6p8XKeV","type":"tool_result","content":"tetris.js","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"ac5e3cde-ab08-473e-ad79-8523dcbb0814","timestamp":"2026-04-03T20:51:53.663Z","tool_use_result":{"stdout":"tetris.js","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014PQPWchr8RF14V9Et4wYzQ","type":"message","role":"assistant","content":[{"type":"text","text":"TypeScript compiled cleanly. Now let me write the HTML and CSS:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":105,"cache_read_input_tokens":15423,"cache_creation":{"ephemeral_5m_input_tokens":105,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"795c08c5-0300-4276-ae4a-dafcce9bbea1"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014PQPWchr8RF14V9Et4wYzQ","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01Q1QqQHQ9TYpxRhrgyf5h5a","name":"Bash","input":{"command":"cat > /tmp/loop-bench-a45vhkn9/index.html << 'EOF'\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>Tetris</title>\n <style>\n /* ── Reset & page ── */\n *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n body {\n background: #0d0d1a;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 100vh;\n font-family: 'Courier New', Courier, monospace;\n color: #eee;\n user-select: none;\n }\n\n h1 {\n font-size: 2rem;\n letter-spacing: 0.35em;\n text-transform: uppercase;\n margin-bottom: 18px;\n color: #00f0f0;\n text-shadow: 0 0 18px #00f0f0aa;\n }\n\n /* ── Layout wrapper ── */\n #game-wrap {\n display: flex;\n align-items: flex-start;\n gap: 0;\n }\n\n /* ── Main board ── */\n #board {\n display: block;\n border: 2px solid #333;\n box-shadow: 0 0 40px #00f0f022, inset 0 0 8px #000;\n background: #111;\n image-rendering: pixelated;\n }\n\n /* ── Sidebar ── */\n #sidebar {\n display: block;\n border: 2px solid #333;\n border-left: none;\n box-shadow: 0 0 40px #00f0f022;\n background: #1a1a2e;\n image-rendering: pixelated;\n }\n\n /* ── Controls bar below the game ── */\n #controls {\n margin-top: 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n color: #555;\n font-size: 0.78rem;\n letter-spacing: 0.04em;\n }\n\n #controls table {\n border-collapse: collapse;\n }\n\n #controls td {\n padding: 2px 10px;\n }\n\n #controls td:first-child {\n color: #888;\n text-align: right;\n }\n\n /* ── Restart button ── */\n #restart-btn {\n margin-top: 14px;\n padding: 8px 32px;\n background: transparent;\n border: 2px solid #00f0f0;\n color: #00f0f0;\n font-family: inherit;\n font-size: 0.9rem;\n letter-spacing: 0.2em;\n text-transform: uppercase;\n cursor: pointer;\n transition: background 0.15s, color 0.15s, box-shadow 0.15s;\n }\n\n #restart-btn:hover {\n background: #00f0f0;\n color: #0d0d1a;\n box-shadow: 0 0 16px #00f0f0aa;\n }\n </style>\n</head>\n<body>\n <h1>Tetris</h1>\n\n <div id=\"game-wrap\">\n <canvas id=\"board\"></canvas>\n <canvas id=\"sidebar\"></canvas>\n </div>\n\n <div id=\"controls\">\n <table>\n <tr><td>← →</td><td>Move</td></tr>\n <tr><td>↑ / X</td><td>Rotate CW</td></tr>\n <tr><td>Z</td><td>Rotate CCW</td></tr>\n <tr><td>↓</td><td>Soft drop</td></tr>\n <tr><td>Space</td><td>Hard drop</td></tr>\n <tr><td>C</td><td>Hold</td></tr>\n <tr><td>P / Esc</td><td>Pause</td></tr>\n </table>\n </div>\n\n <button id=\"restart-btn\">New Game</button>\n\n <script type=\"module\" src=\"dist/tetris.js\"></script>\n</body>\n</html>\nEOF","description":"Write index.html with layout and styles"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":105,"cache_read_input_tokens":15423,"cache_creation":{"ephemeral_5m_input_tokens":105,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"676c9e7d-1599-4096-b7bf-0b59e7fe8107"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01Q1QqQHQ9TYpxRhrgyf5h5a","type":"tool_result","content":"(Bash completed with no output)","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"2ba3c91d-41b9-401c-85d2-0ff55cfe9fb5","timestamp":"2026-04-03T20:52:07.706Z","tool_use_result":{"stdout":"","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014uBGtGDTLpaH53hW2pZG11","type":"message","role":"assistant","content":[{"type":"text","text":"Now let's do a final check — verify the compiled JS has the expected symbols and the HTML references match:"}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1271,"cache_read_input_tokens":15528,"cache_creation":{"ephemeral_5m_input_tokens":1271,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"d4f64daf-a2f4-4d30-b56e-4c77f0dee930"} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014uBGtGDTLpaH53hW2pZG11","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01SMWUsGLi6tuk3kqQnZKp1Z","name":"Bash","input":{"command":"wc -l /tmp/loop-bench-a45vhkn9/src/tetris.ts /tmp/loop-bench-a45vhkn9/dist/tetris.js /tmp/loop-bench-a45vhkn9/index.html","description":"Check line counts of all files"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1271,"cache_read_input_tokens":15528,"cache_creation":{"ephemeral_5m_input_tokens":1271,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"5811c6c1-ab3b-4432-883b-eddb8e5de763"} -{"type":"user","message":{"role":"user","content":[{"tool_use_id":"toolu_01SMWUsGLi6tuk3kqQnZKp1Z","type":"tool_result","content":" 827 /tmp/loop-bench-a45vhkn9/src/tetris.ts\n 669 /tmp/loop-bench-a45vhkn9/dist/tetris.js\n 129 /tmp/loop-bench-a45vhkn9/index.html\n 1625 total","is_error":false}]},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"4b502204-522c-41c3-b1a1-77b9af3b69e7","timestamp":"2026-04-03T20:52:11.813Z","tool_use_result":{"stdout":" 827 /tmp/loop-bench-a45vhkn9/src/tetris.ts\n 669 /tmp/loop-bench-a45vhkn9/dist/tetris.js\n 129 /tmp/loop-bench-a45vhkn9/index.html\n 1625 total","stderr":"","interrupted":false,"isImage":false,"noOutputExpected":false}} -{"type":"assistant","message":{"model":"claude-sonnet-4-6","id":"msg_014uBGtGDTLpaH53hW2pZG11","type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_01LjQfh2C7qqjhuN6N9gqkCU","name":"Bash","input":{"command":"node -e \"\nconst fs = require('fs');\nconst js = fs.readFileSync('/tmp/loop-bench-a45vhkn9/dist/tetris.js','utf8');\n// Quick sanity checks\nconst checks = [\n 'TetrisGame',\n 'initState',\n 'clearLines',\n 'lockAndClear',\n 'hardDrop',\n 'ghostPiece',\n 'KICKS_I',\n 'KICKS_JLSTZ',\n 'LINE_SCORES',\n 'SPEEDS',\n];\nlet ok = true;\nfor (const c of checks) {\n if (!js.includes(c)) { console.error('MISSING:', c); ok = false; }\n}\nif (ok) console.log('All checks passed. JS size:', js.length, 'bytes');\n\"\n","description":"Sanity-check compiled JS for key symbols"},"caller":{"type":"direct"}}],"stop_reason":null,"stop_sequence":null,"stop_details":null,"usage":{"input_tokens":1,"cache_creation_input_tokens":1271,"cache_read_input_tokens":15528,"cache_creation":{"ephemeral_5m_input_tokens":1271,"ephemeral_1h_input_tokens":0},"output_tokens":1,"service_tier":"standard","inference_geo":"not_available"},"context_management":null},"parent_tool_use_id":null,"session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","uuid":"59639e37-9179-40ee-8d59-e679673136f4"} -{"type":"result","subtype":"error_max_budget_usd","duration_ms":339446,"duration_api_ms":330708,"is_error":true,"num_turns":10,"stop_reason":"tool_use","session_id":"d64861b3-07d6-46b6-8d4f-6f6beca5d86d","total_cost_usd":0.5110791,"usage":{"input_tokens":14,"cache_creation_input_tokens":16187,"cache_read_input_tokens":67844,"output_tokens":27612,"server_tool_use":{"web_search_requests":0,"web_fetch_requests":0},"service_tier":"standard","cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":16187},"inference_geo":"","iterations":[],"speed":"standard"},"modelUsage":{"claude-sonnet-4-6":{"inputTokens":15,"outputTokens":28037,"cacheReadInputTokens":83372,"cacheCreationInputTokens":17458,"webSearchRequests":0,"costUSD":0.5110791,"contextWindow":200000,"maxOutputTokens":32000}},"permission_denials":[],"fast_mode_state":"off","uuid":"6f21596a-5ae7-4acf-bb33-188ad97c88b7","errors":["Reached maximum budget ($0.5)"]}