diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml index 2aa6bc87..e54c8a94 100644 --- a/.github/workflows/docker_build.yml +++ b/.github/workflows/docker_build.yml @@ -25,7 +25,7 @@ jobs: build-server: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build Docker Image run: docker build --pull -t ${{ env.IMAGE_NAME }} -f ./UT4MasterServer/Dockerfile . - name: Clean Up diff --git a/.github/workflows/docker_build_frontend.yml b/.github/workflows/docker_build_frontend.yml index b6d18194..f955e1ca 100644 --- a/.github/workflows/docker_build_frontend.yml +++ b/.github/workflows/docker_build_frontend.yml @@ -21,7 +21,7 @@ jobs: build-frontend: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Build Frontend Docker Image run: docker build --pull -t ${{ env.IMAGE_NAME }} -f ./UT4MasterServer.Web/.docker/Development.Dockerfile ./UT4MasterServer.Web/ - name: Clean Up diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index b77431ca..d802c7a1 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -21,8 +21,8 @@ jobs: linters: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@v6 + - uses: actions/setup-node@v6 with: node-version: lts/* - run: npm install --ignore-scripts diff --git a/UT4MasterServer.Web/index.html b/UT4MasterServer.Web/index.html index c7ec1e1a..67d6112c 100644 --- a/UT4MasterServer.Web/index.html +++ b/UT4MasterServer.Web/index.html @@ -1,14 +1,14 @@ - - - - - - UT4 Master Server - - -
- - + + + + + + UT4 Master Server + + +
+ + diff --git a/UT4MasterServer.Web/package-lock.json b/UT4MasterServer.Web/package-lock.json index 0ce3dd45..b3a8be1c 100644 --- a/UT4MasterServer.Web/package-lock.json +++ b/UT4MasterServer.Web/package-lock.json @@ -1,3331 +1,3886 @@ { - "name": "ut4masterserver-web", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ut4masterserver-web", - "version": "0.0.0", - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-regular-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/vue-fontawesome": "^3.0.6", - "@types/crypto-js": "^4.2.2", - "@types/lodash": "^4.17.0", - "@vueform/multiselect": "^2.6.7", - "crypto-js": "^4.2.0", - "lodash": "^4.17.21", - "sass": "^1.75.0", - "ts-debounce": "^4.0.0", - "ts-md5": "^1.3.1", - "vue": "^3.4.25", - "vue-recaptcha": "^2.0.3", - "vue-router": "^4.3.2" - }, - "devDependencies": { - "@types/node": "^18.19.31", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "@vitejs/plugin-vue": "^4.6.2", - "eslint": "^8.57.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-vue": "^9.25.0", - "husky": "^8.0.3", - "prettier": "^2.8.8", - "pretty-quick": "^3.3.1", - "typescript": "^4.9.5", - "vite": "^4.5.3", - "vue-eslint-parser": "^9.4.2", - "vue-tsc": "^1.8.27" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.2.tgz", - "integrity": "sha512-gBxPg3aVO6J0kpfHNILc+NMhXnqHumFxOmjYCFfOiLZfwhnnfhtsdA2hfJlDnj+8PjAs6kKQPenOTKj3Rf7zHw==", - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.2.tgz", - "integrity": "sha512-5CdaCBGl8Rh9ohNdxeeTMxIj8oc3KNBgIeLMvJosBMdslK/UnEB8rzyDRrbKdL1kDweqBPo4GT9wvnakHWucZw==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.2.tgz", - "integrity": "sha512-zi5FNYdmKLnEc0jc0uuHH17kz/hfYTg4Uei0wMGzcoCL/4d3WM3u1VMc0iGGa31HuhV5i7ZK8ZlTCQrHqRHSGQ==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.2.tgz", - "integrity": "sha512-iabw/f5f8Uy2nTRtJ13XZTS1O5+t+anvlamJ3zJGLEVE2pKsAWhPv2lq01uQlfgCX7VaveT3EVs515cCN9jRbw==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.2.tgz", - "integrity": "sha512-QWFZYXFE7O1Gr1dTIp+D6UcFUF0qElOnZptpi7PBUMylJh+vFmIedVe1Ir6RM1t2tEQLLSV1k7bR4o92M+uqlw==", - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.5.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/vue-fontawesome": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.6.tgz", - "integrity": "sha512-akrL7lTroyNpPkoHtvK2UpsMzJr6jXdHaQ0YdcwqDsB8jdwlpNHZYijpOUd9KJsARr+VB3WXY4EyObepqJ4ytQ==", - "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "vue": ">= 3.0.0 < 4" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.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, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" - }, - "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, - "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, - "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, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/crypto-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", - "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==" - }, - "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 - }, - "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==" - }, - "node_modules/@types/node": { - "version": "18.19.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz", - "integrity": "sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", - "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0 || ^5.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", - "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", - "dev": true, - "dependencies": { - "@volar/source-map": "1.11.1" - } - }, - "node_modules/@volar/source-map": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", - "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", - "dev": true, - "dependencies": { - "muggle-string": "^0.3.1" - } - }, - "node_modules/@volar/typescript": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", - "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", - "dev": true, - "dependencies": { - "@volar/language-core": "1.11.1", - "path-browserify": "^1.0.1" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.25.tgz", - "integrity": "sha512-Y2pLLopaElgWnMNolgG8w3C5nNUVev80L7hdQ5iIKPtMJvhVpG0zhnBG/g3UajJmZdvW0fktyZTotEHD1Srhbg==", - "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/shared": "3.4.25", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.25.tgz", - "integrity": "sha512-Ugz5DusW57+HjllAugLci19NsDK+VyjGvmbB2TXaTcSlQxwL++2PETHx/+Qv6qFwNLzSt7HKepPe4DcTE3pBWg==", - "dependencies": { - "@vue/compiler-core": "3.4.25", - "@vue/shared": "3.4.25" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.25.tgz", - "integrity": "sha512-m7rryuqzIoQpOBZ18wKyq05IwL6qEpZxFZfRxlNYuIPDqywrXQxgUwLXIvoU72gs6cRdY6wHD0WVZIFE4OEaAQ==", - "dependencies": { - "@babel/parser": "^7.24.4", - "@vue/compiler-core": "3.4.25", - "@vue/compiler-dom": "3.4.25", - "@vue/compiler-ssr": "3.4.25", - "@vue/shared": "3.4.25", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.10", - "postcss": "^8.4.38", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.25.tgz", - "integrity": "sha512-H2ohvM/Pf6LelGxDBnfbbXFPyM4NE3hrw0e/EpwuSiYu8c819wx+SVGdJ65p/sFrYDd6OnSDxN1MB2mN07hRSQ==", - "dependencies": { - "@vue/compiler-dom": "3.4.25", - "@vue/shared": "3.4.25" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", - "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" - }, - "node_modules/@vue/language-core": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", - "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", - "dev": true, - "dependencies": { - "@volar/language-core": "~1.11.1", - "@volar/source-map": "~1.11.1", - "@vue/compiler-dom": "^3.3.0", - "@vue/shared": "^3.3.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.3.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/language-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@vue/language-core/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.25.tgz", - "integrity": "sha512-mKbEtKr1iTxZkAG3vm3BtKHAOhuI4zzsVcN0epDldU/THsrvfXRKzq+lZnjczZGnTdh3ojd86/WrP+u9M51pWQ==", - "dependencies": { - "@vue/shared": "3.4.25" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.25.tgz", - "integrity": "sha512-3qhsTqbEh8BMH3pXf009epCI5E7bKu28fJLi9O6W+ZGt/6xgSfMuGPqa5HRbUxLoehTNp5uWvzCr60KuiRIL0Q==", - "dependencies": { - "@vue/reactivity": "3.4.25", - "@vue/shared": "3.4.25" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.25.tgz", - "integrity": "sha512-ode0sj77kuwXwSc+2Yhk8JMHZh1sZp9F/51wdBiz3KGaWltbKtdihlJFhQG4H6AY+A06zzeMLkq6qu8uDSsaoA==", - "dependencies": { - "@vue/runtime-core": "3.4.25", - "@vue/shared": "3.4.25", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.25.tgz", - "integrity": "sha512-8VTwq0Zcu3K4dWV0jOwIVINESE/gha3ifYCOKEhxOj6MEl5K5y8J8clQncTcDhKF+9U765nRw4UdUEXvrGhyVQ==", - "dependencies": { - "@vue/compiler-ssr": "3.4.25", - "@vue/shared": "3.4.25" - }, - "peerDependencies": { - "vue": "3.4.25" - } - }, - "node_modules/@vue/shared": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.25.tgz", - "integrity": "sha512-k0yappJ77g2+KNrIaF0FFnzwLvUBLUYr8VOwz+/6vLsmItFp51AcxLL7Ey3iPd7BIRyWPOcqUjMnm7OkahXllA==" - }, - "node_modules/@vueform/multiselect": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/@vueform/multiselect/-/multiselect-2.6.7.tgz", - "integrity": "sha512-d0iwfzsj+N27o/JPE1KXbf0rVtwIe33dqlkQcOPxOP0RS6mW9umQG1hcuFEpdqNajuryHB9N4zo0rEcGmN20xQ==" - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "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, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/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==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/computeds": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", - "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "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 - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", - "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", - "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", - "dev": true, - "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "peerDependencies": { - "eslint": ">=5.16.0" - } - }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.25.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.25.0.tgz", - "integrity": "sha512-tDWlx14bVe6Bs+Nnh3IGrD+hb11kf2nukfm6jLsmJIhmiRQ1SUaksvwY9U5MvPB0pcrg0QK0xapQkfITs3RKOA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.0", - "vue-eslint-parser": "^9.4.2", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/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, - "engines": { - "node": ">=4.0" - } - }, - "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, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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 - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "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.4" - }, - "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, - "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 - }, - "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 - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "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, - "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": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "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, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "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, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "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, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", - "dev": true, - "bin": { - "husky": "lib/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "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 - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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, - "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, - "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, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.30.10", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", - "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - } - }, - "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 - }, - "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, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/muggle-string": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", - "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "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 - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "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, - "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, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "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, - "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, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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 - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.16", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", - "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-quick": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", - "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", - "dev": true, - "dependencies": { - "execa": "^4.1.0", - "find-up": "^4.1.0", - "ignore": "^5.3.0", - "mri": "^1.2.0", - "picocolors": "^1.0.0", - "picomatch": "^3.0.1", - "tslib": "^2.6.2" - }, - "bin": { - "pretty-quick": "dist/cli.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": "^2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-quick/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-quick/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "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, - "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" - } - ] - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "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" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sass": { - "version": "1.75.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", - "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "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, - "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, - "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 - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "engines": { - "node": ">=0.10.0" - } - }, - "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, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-debounce": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", - "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==" - }, - "node_modules/ts-md5": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-1.3.1.tgz", - "integrity": "sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "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, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.4.25", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.25.tgz", - "integrity": "sha512-HWyDqoBHMgav/OKiYA2ZQg+kjfMgLt/T0vg4cbIF7JbXAjDexRf5JRg+PWAfrAkSmTd2I8aPSXtooBFWHB98cg==", - "dependencies": { - "@vue/compiler-dom": "3.4.25", - "@vue/compiler-sfc": "3.4.25", - "@vue/runtime-dom": "3.4.25", - "@vue/server-renderer": "3.4.25", - "@vue/shared": "3.4.25" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.2.tgz", - "integrity": "sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/vue-eslint-parser/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, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/vue-recaptcha": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/vue-recaptcha/-/vue-recaptcha-2.0.3.tgz", - "integrity": "sha512-Rz0kLIETUgmOrp7CxFvaFE65DkhKdWu4pteWOTt2i+yTajTHPqtyOW6DqTg0BvALWTm+WUvWVV7k5XXFijQnBw==", - "dependencies": { - "vue-demi": "^0.13.11" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-beta.1", - "vue": "^2.0.0 || ^3.0.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vue-recaptcha/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vue-router": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz", - "integrity": "sha512-hKQJ1vDAZ5LVkKEnHhmm1f9pMiWIBNGF5AwU67PdH7TyXCj/a4hTccuUuYCAMgJK6rO/NVYtQIEN3yL8CECa7Q==", - "dependencies": { - "@vue/devtools-api": "^6.5.1" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", - "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-tsc": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", - "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", - "dev": true, - "dependencies": { - "@volar/typescript": "~1.11.1", - "@vue/language-core": "1.8.27", - "semver": "^7.5.4" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } + "name": "ut4masterserver-web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ut4masterserver-web", + "version": "0.0.0", + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-regular-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/vue-fontawesome": "^3.1.2", + "@types/crypto-js": "^4.2.2", + "@types/lodash": "^4.17.21", + "@vueform/multiselect": "^2.6.11", + "crypto-js": "^4.2.0", + "lodash": "^4.17.21", + "sass": "^1.97.1", + "ts-debounce": "^4.0.0", + "ts-md5": "^1.3.1", + "vue": "^3.5.26", + "vue-recaptcha": "^2.0.3", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@types/node": "^18.19.130", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "@vitejs/plugin-vue": "^4.6.2", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.10.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-vue": "^9.33.0", + "husky": "^8.0.3", + "prettier": "^2.8.8", + "pretty-quick": "^3.3.1", + "typescript": "^4.9.5", + "vite": "^4.5.14", + "vue-eslint-parser": "^9.4.3", + "vue-tsc": "^1.8.27" + } + }, + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", + "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/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/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", + "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", + "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.7.2.tgz", + "integrity": "sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.7.2.tgz", + "integrity": "sha512-7Z/ur0gvCMW8G93dXIQOkQqHo2M5HLhYrRVC0//fakJXxcF1VmMPsxnG6Ee8qEylA8b8Q3peQXWMNZ62lYF28g==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz", + "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==", + "license": "(CC-BY-4.0 AND MIT)", + "dependencies": { + "@fortawesome/fontawesome-common-types": "6.7.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/vue-fontawesome": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.1.2.tgz", + "integrity": "sha512-mhYnBIuuW8OIMHf31kOjaBmyE7BMrwBorhrOHVud6vTTu+7IPQNWB+DWaHoE75v10dRF5s/dFtcrgE7vKSEWwQ==", + "license": "MIT", + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6 || ~7", + "vue": ">= 3.0.0 < 4" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.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/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "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/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.2.tgz", + "integrity": "sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/shared": "3.5.26" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.26", + "@vue/runtime-core": "3.5.26", + "@vue/shared": "3.5.26", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "vue": "3.5.26" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", + "license": "MIT" + }, + "node_modules/@vueform/multiselect": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/@vueform/multiselect/-/multiselect-2.6.11.tgz", + "integrity": "sha512-iG4TGfqE3baftbSGF0PhoS+xZOCnV0ChkDo9rwhJ/Qi2YlCdb6tyQCjvyug3jnzncga8+d85kx0WvG7rDYFqiA==", + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "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.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "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/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "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/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "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": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", + "integrity": "sha512-/IGJ6+Dka158JnP5n5YFMOszjDWrXggGz1LaK/guZq9vZTmniaKlHcsscvkAhn9y4U+BU3JuUdYvtAMcv30y4A==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-es": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", + "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-utils": "^2.0.0", + "regexpp": "^3.0.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-node": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", + "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-plugin-es": "^3.0.0", + "eslint-utils": "^2.0.0", + "ignore": "^5.1.1", + "minimatch": "^3.0.4", + "resolve": "^1.10.1", + "semver": "^6.1.0" + }, + "engines": { + "node": ">=8.10.0" + }, + "peerDependencies": { + "eslint": ">=5.16.0" + } + }, + "node_modules/eslint-plugin-node/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.33.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", + "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "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/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/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/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/esrecurse/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/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "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/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": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.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==", + "devOptional": 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": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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-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/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "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/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "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/husky": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", + "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "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/immutable": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "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-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "devOptional": 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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "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/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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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==", + "devOptional": 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": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "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/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "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/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "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/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "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-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-quick": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.3.1.tgz", + "integrity": "sha512-3b36UXfYQ+IXXqex6mCca89jC8u0mYLqFAN5eTQKoXO6oCQYcIVYZEB/5AlBHI7JPYygReM2Vv6Vom/Gln7fBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^4.1.0", + "find-up": "^4.1.0", + "ignore": "^5.3.0", + "mri": "^1.2.0", + "picocolors": "^1.0.0", + "picomatch": "^3.0.1", + "tslib": "^2.6.2" + }, + "bin": { + "pretty-quick": "dist/cli.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": "^2.0.0" + } + }, + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "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/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "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/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz", + "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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/sass": { + "version": "1.97.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz", + "integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==", + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "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/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-debounce": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ts-debounce/-/ts-debounce-4.0.0.tgz", + "integrity": "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==", + "license": "MIT" + }, + "node_modules/ts-md5": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-1.3.1.tgz", + "integrity": "sha512-DiwiXfwvcTeZ5wCE0z+2A9EseZsztaiZtGrtSaY5JOD7ekPnR/GoIVD5gXZAlK9Na9Kvpo9Waz5rW64WKAWApg==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "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/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "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/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "4.5.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.14.tgz", + "integrity": "sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-sfc": "3.5.26", + "@vue/runtime-dom": "3.5.26", + "@vue/server-renderer": "3.5.26", + "@vue/shared": "3.5.26" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/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/vue-recaptcha": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-recaptcha/-/vue-recaptcha-2.0.3.tgz", + "integrity": "sha512-Rz0kLIETUgmOrp7CxFvaFE65DkhKdWu4pteWOTt2i+yTajTHPqtyOW6DqTg0BvALWTm+WUvWVV7k5XXFijQnBw==", + "license": "MIT", + "workspaces": [ + ".", + "vue2-test" + ], + "dependencies": { + "vue-demi": "^0.13.11" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-beta.1", + "vue": "^2.0.0 || ^3.0.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-recaptcha/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "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/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/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "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/UT4MasterServer.Web/package.json b/UT4MasterServer.Web/package.json index 11d8776a..74c57a9e 100644 --- a/UT4MasterServer.Web/package.json +++ b/UT4MasterServer.Web/package.json @@ -1,94 +1,94 @@ { - "name": "ut4masterserver-web", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite --host 0.0.0.0", - "dev-open": "vite --host 0.0.0.0 --open", - "build": "vite build --mode production", - "build-dev": "vite build --mode development", - "format": "prettier . --write", - "format-check": "prettier . --check", - "lint": "eslint . --ext .ts,.vue", - "lint-fix": "eslint . --ext .ts,.vue --fix", - "prepare": "cd .. && husky install client/.husky" - }, - "dependencies": { - "@fortawesome/fontawesome-svg-core": "^6.5.2", - "@fortawesome/free-brands-svg-icons": "^6.5.2", - "@fortawesome/free-regular-svg-icons": "^6.5.2", - "@fortawesome/free-solid-svg-icons": "^6.5.2", - "@fortawesome/vue-fontawesome": "^3.0.6", - "@types/crypto-js": "^4.2.2", - "@types/lodash": "^4.17.0", - "@vueform/multiselect": "^2.6.7", - "crypto-js": "^4.2.0", - "lodash": "^4.17.21", - "sass": "^1.75.0", - "ts-debounce": "^4.0.0", - "ts-md5": "^1.3.1", - "vue": "^3.4.25", - "vue-recaptcha": "^2.0.3", - "vue-router": "^4.3.2" - }, - "devDependencies": { - "@types/node": "^18.19.31", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "@vitejs/plugin-vue": "^4.6.2", - "eslint": "^8.57.0", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-vue": "^9.25.0", - "husky": "^8.0.3", - "prettier": "^2.8.8", - "pretty-quick": "^3.3.1", - "typescript": "^4.9.5", - "vite": "^4.5.3", - "vue-eslint-parser": "^9.4.2", - "vue-tsc": "^1.8.27" - }, - "eslintConfig": { - "env": { - "node": true, - "vue/setup-compiler-macros": true - }, - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser" - }, - "plugins": [ - "@typescript-eslint" - ], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "plugin:vue/vue3-recommended", - "prettier" - ], - "rules": { - "vue/multi-word-component-names": "off", - "vue/component-tags-order": [ - "error", - { - "order": [ - "template", - "style", - "script" - ] - } - ] - }, - "globals": { - "__BACKEND_URL": "readonly", - "__RECAPTCHA_SITE_KEY": "readonly" - } - }, - "prettier": { - "trailingComma": "none", - "semi": true, - "singleQuote": true, - "endOfLine": "lf" - } + "name": "ut4masterserver-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite --host 0.0.0.0", + "dev-open": "vite --host 0.0.0.0 --open", + "build": "vite build --mode production", + "build-dev": "vite build --mode development", + "format": "prettier . --write", + "format-check": "prettier . --check", + "lint": "eslint . --ext .ts,.vue", + "lint-fix": "eslint . --ext .ts,.vue --fix", + "prepare": "cd .. && husky install client/.husky" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^6.7.2", + "@fortawesome/free-brands-svg-icons": "^6.7.2", + "@fortawesome/free-regular-svg-icons": "^6.7.2", + "@fortawesome/free-solid-svg-icons": "^6.7.2", + "@fortawesome/vue-fontawesome": "^3.1.2", + "@types/crypto-js": "^4.2.2", + "@types/lodash": "^4.17.21", + "@vueform/multiselect": "^2.6.11", + "crypto-js": "^4.2.0", + "lodash": "^4.17.21", + "sass": "^1.97.1", + "ts-debounce": "^4.0.0", + "ts-md5": "^1.3.1", + "vue": "^3.5.26", + "vue-recaptcha": "^2.0.3", + "vue-router": "^4.6.4" + }, + "devDependencies": { + "@types/node": "^18.19.130", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "@typescript-eslint/parser": "^5.62.0", + "@vitejs/plugin-vue": "^4.6.2", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.10.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-vue": "^9.33.0", + "husky": "^8.0.3", + "prettier": "^2.8.8", + "pretty-quick": "^3.3.1", + "typescript": "^4.9.5", + "vite": "^4.5.14", + "vue-eslint-parser": "^9.4.3", + "vue-tsc": "^1.8.27" + }, + "eslintConfig": { + "env": { + "node": true, + "vue/setup-compiler-macros": true + }, + "parser": "vue-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser" + }, + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:vue/vue3-recommended", + "prettier" + ], + "rules": { + "vue/multi-word-component-names": "off", + "vue/component-tags-order": [ + "error", + { + "order": [ + "template", + "style", + "script" + ] + } + ] + }, + "globals": { + "__BACKEND_URL": "readonly", + "__RECAPTCHA_SITE_KEY": "readonly" + } + }, + "prettier": { + "trailingComma": "none", + "semi": true, + "singleQuote": true, + "endOfLine": "lf" + } } diff --git a/UT4MasterServer.Web/public/news/2023-01-23.html b/UT4MasterServer.Web/public/news/2023-01-23.html index e15e5c18..ef021239 100644 --- a/UT4MasterServer.Web/public/news/2023-01-23.html +++ b/UT4MasterServer.Web/public/news/2023-01-23.html @@ -1,15 +1,15 @@ - - - - -

Hi there!

+ + + + +

Hi there!

-

- This is a small test of fancy announcements that we'll be able to use in - the future. -

+

+ This is a small test of fancy announcements that we'll be able to use in + the future. +

-

Enjoy the game after the official shutdown! :D

- +

Enjoy the game after the official shutdown! :D

+ diff --git a/UT4MasterServer.Web/src/App.vue b/UT4MasterServer.Web/src/App.vue index 44053df3..4a3bf947 100644 --- a/UT4MasterServer.Web/src/App.vue +++ b/UT4MasterServer.Web/src/App.vue @@ -1,14 +1,14 @@ diff --git a/UT4MasterServer.Web/src/components/Autocomplete.vue b/UT4MasterServer.Web/src/components/Autocomplete.vue index 3931317f..b7fb7ed3 100644 --- a/UT4MasterServer.Web/src/components/Autocomplete.vue +++ b/UT4MasterServer.Web/src/components/Autocomplete.vue @@ -1,64 +1,64 @@ @@ -67,27 +67,27 @@ import { ref, PropType, computed, watch } from 'vue'; import { debounce } from 'ts-debounce'; const props = defineProps({ - items: { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - type: Array as PropType, - default: () => [] - }, - itemKey: { - type: String, - required: true - }, - searchKey: { - type: String, - required: true - }, - value: { - type: String, - default: undefined - }, - minSearchLength: { - type: Number, - default: 2 - } + items: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + type: Array as PropType, + default: () => [] + }, + itemKey: { + type: String, + required: true + }, + searchKey: { + type: String, + required: true + }, + value: { + type: String, + default: undefined + }, + minSearchLength: { + type: Number, + default: 2 + } }); const emit = defineEmits(['select', 'inputChange']); @@ -99,89 +99,89 @@ const initialValueSet = ref(false); const lastEmittedValue = ref(''); const filteredItems = computed(() => - props.items.filter((i) => - ((props.searchKey ? i[props.searchKey] : i) as string) - ?.toLocaleLowerCase() - .includes(searchText.value.toLocaleLowerCase()) - ) + props.items.filter((i) => + ((props.searchKey ? i[props.searchKey] : i) as string) + ?.toLocaleLowerCase() + .includes(searchText.value.toLocaleLowerCase()) + ) ); function handleFocus() { - menuOpen.value = true; + menuOpen.value = true; } function handleBlur(event: FocusEvent) { - if (!event.relatedTarget) { - menuOpen.value = false; - } + if (!event.relatedTarget) { + menuOpen.value = false; + } } // eslint-disable-next-line @typescript-eslint/no-explicit-any function handleSelect(item?: any) { - emit('select', item); - menuOpen.value = false; - searchText.value = item ? item[props.searchKey].toString() : ''; + emit('select', item); + menuOpen.value = false; + searchText.value = item ? item[props.searchKey].toString() : ''; } function handleClear() { - searchText.value = ''; - handleSelect(); - handleKeyup(); + searchText.value = ''; + handleSelect(); + handleKeyup(); } function setActiveIndex(i: number) { - if (i < 0) { - activeIndex.value = filteredItems.value.length - 1; - } else if (i > filteredItems.value.length - 1) { - activeIndex.value = 0; - } else { - activeIndex.value = i; - } + if (i < 0) { + activeIndex.value = filteredItems.value.length - 1; + } else if (i > filteredItems.value.length - 1) { + activeIndex.value = 0; + } else { + activeIndex.value = i; + } } function handleKeydown(event: KeyboardEvent) { - menuOpen.value = true; - if (event.key === 'ArrowDown') { - event.preventDefault(); - setActiveIndex(activeIndex.value + 1); - } else if (event.key === 'ArrowUp') { - event.preventDefault(); - setActiveIndex(activeIndex.value - 1); - } else if (event.key === 'Enter') { - event.preventDefault(); - if (filteredItems.value.length === 1) { - activeIndex.value = 0; - } - const item = filteredItems.value[activeIndex.value]; - handleSelect(item); - } + menuOpen.value = true; + if (event.key === 'ArrowDown') { + event.preventDefault(); + setActiveIndex(activeIndex.value + 1); + } else if (event.key === 'ArrowUp') { + event.preventDefault(); + setActiveIndex(activeIndex.value - 1); + } else if (event.key === 'Enter') { + event.preventDefault(); + if (filteredItems.value.length === 1) { + activeIndex.value = 0; + } + const item = filteredItems.value[activeIndex.value]; + handleSelect(item); + } } const handleKeyup = debounce(() => { - if ( - searchText.value === lastEmittedValue.value || - props.minSearchLength > searchText.value.length - ) { - return; - } - emit('inputChange', searchText.value ?? ''); - lastEmittedValue.value = searchText.value; + if ( + searchText.value === lastEmittedValue.value || + props.minSearchLength > searchText.value.length + ) { + return; + } + emit('inputChange', searchText.value ?? ''); + lastEmittedValue.value = searchText.value; }, 250); function valueChanged() { - if (props.value) { - const match = props.items.find((i) => i[props.itemKey] === props.value); - if (match && !initialValueSet.value) { - searchText.value = match[props.searchKey].toString(); - initialValueSet.value = true; - } - } + if (props.value) { + const match = props.items.find((i) => i[props.itemKey] === props.value); + if (match && !initialValueSet.value) { + searchText.value = match[props.searchKey].toString(); + initialValueSet.value = true; + } + } } function itemsChanged() { - if (!initialValueSet.value) { - valueChanged(); - } + if (!initialValueSet.value) { + valueChanged(); + } } watch(() => props.value, valueChanged); diff --git a/UT4MasterServer.Web/src/components/CodeBlock.vue b/UT4MasterServer.Web/src/components/CodeBlock.vue index e1222a2a..f4f1c89f 100644 --- a/UT4MasterServer.Web/src/components/CodeBlock.vue +++ b/UT4MasterServer.Web/src/components/CodeBlock.vue @@ -1,21 +1,21 @@ diff --git a/UT4MasterServer.Web/src/components/CopyButton.vue b/UT4MasterServer.Web/src/components/CopyButton.vue index 628cb1d9..0f42b27a 100644 --- a/UT4MasterServer.Web/src/components/CopyButton.vue +++ b/UT4MasterServer.Web/src/components/CopyButton.vue @@ -1,18 +1,18 @@ @@ -21,33 +21,33 @@ import { computed, shallowRef } from 'vue'; import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'; const props = defineProps({ - subject: { - type: String, - required: true - }, - customClass: { - type: String, - default: '' - }, - title: { - type: String, - default: 'Copy' - } + subject: { + type: String, + required: true + }, + customClass: { + type: String, + default: '' + }, + title: { + type: String, + default: 'Copy' + } }); const copied = shallowRef(false); const classes = computed(() => ({ - [props.customClass]: true, - 'text-success': copied.value + [props.customClass]: true, + 'text-success': copied.value })); function copy() { - if (props.subject) { - const content = props.subject; - navigator.clipboard.writeText(content); - copied.value = true; - setTimeout(() => (copied.value = false), 2000); - } + if (props.subject) { + const content = props.subject; + navigator.clipboard.writeText(content); + copied.value = true; + setTimeout(() => (copied.value = false), 2000); + } } diff --git a/UT4MasterServer.Web/src/components/CrudPage.vue b/UT4MasterServer.Web/src/components/CrudPage.vue index bd9145d8..29ccd0da 100644 --- a/UT4MasterServer.Web/src/components/CrudPage.vue +++ b/UT4MasterServer.Web/src/components/CrudPage.vue @@ -1,55 +1,55 @@ @@ -58,15 +58,15 @@ import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'; import { shallowRef } from 'vue'; defineProps({ - title: { - type: String, - required: true - } + title: { + type: String, + required: true + } }); const adding = shallowRef(false); function cancelAdd() { - adding.value = false; + adding.value = false; } diff --git a/UT4MasterServer.Web/src/components/Dropdown.vue b/UT4MasterServer.Web/src/components/Dropdown.vue index a137bbce..bd8ace0f 100644 --- a/UT4MasterServer.Web/src/components/Dropdown.vue +++ b/UT4MasterServer.Web/src/components/Dropdown.vue @@ -1,47 +1,47 @@ diff --git a/UT4MasterServer.Web/src/components/Footer.vue b/UT4MasterServer.Web/src/components/Footer.vue index 6a95a0ad..c4510fa1 100644 --- a/UT4MasterServer.Web/src/components/Footer.vue +++ b/UT4MasterServer.Web/src/components/Footer.vue @@ -1,69 +1,69 @@ @@ -81,39 +81,39 @@ const { servers } = useServers(); const { quickPlayServers } = useQuickPlay(); const playersOnline = computed(() => { - const playersInHubs = hubs.value.reduce((sum, h) => sum + h.totalPlayers, 0); - const playersInServers = servers.value.reduce( - (sum, s) => sum + (s.playersOnline ?? 0), - 0 - ); - const playersInQuickplay = quickPlayServers.value.reduce( - (sum, q) => sum + (q.playersOnline ?? 0), - 0 - ); + const playersInHubs = hubs.value.reduce((sum, h) => sum + h.totalPlayers, 0); + const playersInServers = servers.value.reduce( + (sum, s) => sum + (s.playersOnline ?? 0), + 0 + ); + const playersInQuickplay = quickPlayServers.value.reduce( + (sum, q) => sum + (q.playersOnline ?? 0), + 0 + ); - return playersInHubs + playersInServers + playersInQuickplay; + return playersInHubs + playersInServers + playersInQuickplay; }); const matchesInProgress = computed(() => { - const hubMatches = hubs.value.reduce( - (sum, h) => - sum + - h.matches.filter((m) => m.matchState === MatchState.inProgress).length, - 0 - ); + const hubMatches = hubs.value.reduce( + (sum, h) => + sum + + h.matches.filter((m) => m.matchState === MatchState.inProgress).length, + 0 + ); - const serverMatches = servers.value.filter( - (s) => s.matchState === MatchState.inProgress - ).length; + const serverMatches = servers.value.filter( + (s) => s.matchState === MatchState.inProgress + ).length; - const quickPlayMatches = quickPlayServers.value.filter( - (q) => q.matchState === MatchState.inProgress - ).length; + const quickPlayMatches = quickPlayServers.value.filter( + (q) => q.matchState === MatchState.inProgress + ).length; - return hubMatches + serverMatches + quickPlayMatches; + return hubMatches + serverMatches + quickPlayMatches; }); onMounted(() => { - ServerStore.fetchAllServers(); + ServerStore.fetchAllServers(); }); diff --git a/UT4MasterServer.Web/src/components/Header.vue b/UT4MasterServer.Web/src/components/Header.vue index e3b32265..6f3dfff8 100644 --- a/UT4MasterServer.Web/src/components/Header.vue +++ b/UT4MasterServer.Web/src/components/Header.vue @@ -1,116 +1,116 @@ @@ -129,7 +129,7 @@ const authenticationService = new AuthenticationService(); const menuExpanded = shallowRef(false); async function logOut() { - await authenticationService.logOut(); - router.push('/Login'); + await authenticationService.logOut(); + router.push('/Login'); } diff --git a/UT4MasterServer.Web/src/components/HeaderLink.vue b/UT4MasterServer.Web/src/components/HeaderLink.vue index 92002cc5..042643b7 100644 --- a/UT4MasterServer.Web/src/components/HeaderLink.vue +++ b/UT4MasterServer.Web/src/components/HeaderLink.vue @@ -1,13 +1,13 @@ diff --git a/UT4MasterServer.Web/src/directives/valid.ts b/UT4MasterServer.Web/src/directives/valid.ts index e2f876fa..5ce31cce 100644 --- a/UT4MasterServer.Web/src/directives/valid.ts +++ b/UT4MasterServer.Web/src/directives/valid.ts @@ -1,16 +1,16 @@ import { Directive, DirectiveBinding } from 'vue'; export const valid: Directive = { - mounted: ( - element: HTMLInputElement, - binding: DirectiveBinding - ): void => { - element.setCustomValidity(binding.value ? '' : 'invalid'); - }, - updated: ( - element: HTMLInputElement, - binding: DirectiveBinding - ): void => { - element.setCustomValidity(binding.value ? '' : 'invalid'); - } + mounted: ( + element: HTMLInputElement, + binding: DirectiveBinding + ): void => { + element.setCustomValidity(binding.value ? '' : 'invalid'); + }, + updated: ( + element: HTMLInputElement, + binding: DirectiveBinding + ): void => { + element.setCustomValidity(binding.value ? '' : 'invalid'); + } }; diff --git a/UT4MasterServer.Web/src/enums/game-server-trust.ts b/UT4MasterServer.Web/src/enums/game-server-trust.ts index 0f143525..54d8bb5d 100644 --- a/UT4MasterServer.Web/src/enums/game-server-trust.ts +++ b/UT4MasterServer.Web/src/enums/game-server-trust.ts @@ -1,5 +1,5 @@ export enum GameServerTrust { - Epic = 0, - Trusted = 1, - Untrusted = 2 + Epic = 0, + Trusted = 1, + Untrusted = 2 } diff --git a/UT4MasterServer.Web/src/enums/grant-type.ts b/UT4MasterServer.Web/src/enums/grant-type.ts index a06c8d83..dc415c46 100644 --- a/UT4MasterServer.Web/src/enums/grant-type.ts +++ b/UT4MasterServer.Web/src/enums/grant-type.ts @@ -1,7 +1,7 @@ export enum GrantType { - Password = 'password', - RefreshToken = 'refresh_token', - AuthorizationCode = 'authorization_code', - ExchangeCode = 'exchange_code', - ClientCredentials = 'client_credentials' + Password = 'password', + RefreshToken = 'refresh_token', + AuthorizationCode = 'authorization_code', + ExchangeCode = 'exchange_code', + ClientCredentials = 'client_credentials' } diff --git a/UT4MasterServer.Web/src/enums/rating-type.ts b/UT4MasterServer.Web/src/enums/rating-type.ts index fe262c25..8141c986 100644 --- a/UT4MasterServer.Web/src/enums/rating-type.ts +++ b/UT4MasterServer.Web/src/enums/rating-type.ts @@ -1,12 +1,12 @@ export enum RatingType { - DMSkillRating = 'DMSkillRating', - SkillRating = 'SkillRating', - TDMSkillRating = 'TDMSkillRating', - CTFSkillRating = 'CTFSkillRating', - ShowdownSkillRating = 'ShowdownSkillRating', - FlagRunSkillRating = 'FlagRunSkillRating', - RankedDuelSkillRating = 'RankedDuelSkillRating', - RankedCTFSkillRating = 'RankedCTFSkillRating', - RankedShowdownSkillRating = 'RankedShowdownSkillRating', - RankedFlagRunSkillRating = 'RankedFlagRunSkillRating' + DMSkillRating = 'DMSkillRating', + SkillRating = 'SkillRating', + TDMSkillRating = 'TDMSkillRating', + CTFSkillRating = 'CTFSkillRating', + ShowdownSkillRating = 'ShowdownSkillRating', + FlagRunSkillRating = 'FlagRunSkillRating', + RankedDuelSkillRating = 'RankedDuelSkillRating', + RankedCTFSkillRating = 'RankedCTFSkillRating', + RankedShowdownSkillRating = 'RankedShowdownSkillRating', + RankedFlagRunSkillRating = 'RankedFlagRunSkillRating' } diff --git a/UT4MasterServer.Web/src/enums/role.ts b/UT4MasterServer.Web/src/enums/role.ts index bd7c917b..7aff1d12 100644 --- a/UT4MasterServer.Web/src/enums/role.ts +++ b/UT4MasterServer.Web/src/enums/role.ts @@ -1,8 +1,8 @@ export enum Role { - None = 'None', - Admin = 'Admin', - Moderator = 'Moderator', - Developer = 'Developer', - ContentCreator = 'ContentCreator', - HubOwner = 'HubOwner' + None = 'None', + Admin = 'Admin', + Moderator = 'Moderator', + Developer = 'Developer', + ContentCreator = 'ContentCreator', + HubOwner = 'HubOwner' } diff --git a/UT4MasterServer.Web/src/enums/statistic-display.ts b/UT4MasterServer.Web/src/enums/statistic-display.ts index a5f86290..1332d8f1 100644 --- a/UT4MasterServer.Web/src/enums/statistic-display.ts +++ b/UT4MasterServer.Web/src/enums/statistic-display.ts @@ -1,175 +1,175 @@ import { Statistic } from './statistic'; export const StatisticDisplay: Record = { - // Quick Look - [Statistic.SkillRating]: 'Duel MMR', - [Statistic.TDMSkillRating]: 'TDM MMR', - [Statistic.CTFSkillRating]: 'CTF MMR', - [Statistic.DMSkillRating]: 'DM MMR', - [Statistic.ShowdownSkillRating]: 'Showdown MMR', - [Statistic.MatchesPlayed]: 'Matches Played', - [Statistic.MatchesQuit]: 'Matches Quit', - [Statistic.TimePlayed]: 'Time Played', - [Statistic.Wins]: 'Wins', - [Statistic.Losses]: 'Losses', - [Statistic.Kills]: 'Kills', - [Statistic.Deaths]: 'Deaths', - [Statistic.Suicides]: 'Suicides', - - // Kill Achievements - [Statistic.MultiKillLevel0]: 'Double Kills', - [Statistic.MultiKillLevel1]: 'Multi Kills', - [Statistic.MultiKillLevel2]: 'Ultra Kills', - [Statistic.MultiKillLevel3]: 'Monster Kills', - [Statistic.SpreeKillLevel0]: 'Killing Sprees', - [Statistic.SpreeKillLevel1]: 'Rampages', - [Statistic.SpreeKillLevel2]: 'Dominatings', - [Statistic.SpreeKillLevel3]: 'Unstoppables', - [Statistic.SpreeKillLevel4]: 'Godlikes', - [Statistic.BestShockCombo]: 'Best Shock Combo', - [Statistic.AmazingCombos]: 'Amazing Combos', - [Statistic.AirRox]: 'Air Rox', - [Statistic.FlakShreds]: 'Flak Shreds', - [Statistic.AirSnot]: 'Air Snot', - - //Power Up Achievements - [Statistic.UDamageTime]: 'UDamage Time', - [Statistic.BerserkTime]: 'Berserk Time', - [Statistic.InvisibilityTime]: 'Invisibility Time', - [Statistic.UDamageCount]: 'UDamage Count', - [Statistic.BerserkCount]: 'Berserk Count', - [Statistic.InvisibilityCount]: 'Invisibility Count', - [Statistic.BootJumps]: 'Boot Jumps', - [Statistic.ShieldBeltCount]: 'Shield Belt Count', - [Statistic.ArmorVestCount]: 'Armor Vest Count', - [Statistic.ArmorPadsCount]: 'Armor Pads Count', - [Statistic.HelmetCount]: 'Helmet Count', - [Statistic.KegCount]: 'Keg Count', - - //Weapons - [Statistic.Accuracy]: 'Accuracy', - [Statistic.ImpactHammerKills]: 'Kills', - [Statistic.ImpactHammerDeaths]: 'Deaths', - - [Statistic.EnforcerKills]: 'Kills', - [Statistic.EnforcerDeaths]: 'Deaths', - [Statistic.EnforcerShots]: 'Shots', - [Statistic.EnforcerHits]: 'Hits', - - [Statistic.BioRifleKills]: 'Kills', - [Statistic.BioRifleDeaths]: 'Deaths', - [Statistic.BioRifleShots]: 'Shots', - [Statistic.BioRifleHits]: 'Hits', - - [Statistic.BioLauncherKills]: 'Kills', - [Statistic.BioLauncherDeaths]: 'Deaths', - [Statistic.BioLauncherShots]: 'Shots', - [Statistic.BioLauncherHits]: 'Hits', - - [Statistic.ShockBeamKills]: 'Beam Kills', - [Statistic.ShockBeamDeaths]: 'Beam Deaths', - [Statistic.ShockCoreKills]: 'Core Kills', - [Statistic.ShockCoreDeaths]: 'Core Deaths', - [Statistic.ShockComboKills]: 'Combo Kills', - [Statistic.ShockComboDeaths]: 'Combo Deaths', - [Statistic.ShockRifleShots]: 'Shots', - [Statistic.ShockRifleHits]: 'Hits', - - [Statistic.LinkKills]: 'Kills', - [Statistic.LinkDeaths]: 'Deaths', - [Statistic.LinkBeamKills]: 'Beam Kills', - [Statistic.LinkBeamDeaths]: 'Beam Deaths', - [Statistic.LinkShots]: 'Shots', - [Statistic.LinkHits]: 'Hits', - - [Statistic.MinigunKills]: 'Kills', - [Statistic.MinigunDeaths]: 'Deaths', - [Statistic.MinigunShardKills]: 'Shard Kills', - [Statistic.MinigunShardDeaths]: 'Shard Deaths', - [Statistic.MinigunShots]: 'Shots', - [Statistic.MinigunHits]: 'Hits', - - [Statistic.FlakShardKills]: 'Shard Kills', - [Statistic.FlakShardDeaths]: 'Shard Deaths', - [Statistic.FlakShellKills]: 'Shell Kills', - [Statistic.FlakShellDeaths]: 'Shell Deaths', - [Statistic.FlakShots]: 'Shots', - [Statistic.FlakHits]: 'Hits', - - [Statistic.RocketKills]: 'Kills', - [Statistic.RocketDeaths]: 'Deaths', - [Statistic.RocketShots]: 'Shots', - [Statistic.RocketHits]: 'Hits', - - [Statistic.SniperKills]: 'Kills', - [Statistic.SniperDeaths]: 'Deaths', - [Statistic.SniperHeadshotKills]: 'Headshot Kills', - [Statistic.SniperHeadshotDeaths]: 'Headshot Deaths', - [Statistic.SniperShots]: 'Shots', - [Statistic.SniperHits]: 'Hits', - - [Statistic.LightningRiflePrimaryKills]: 'Primary Kills', - [Statistic.LightningRiflePrimaryDeaths]: 'Primary Deaths', - [Statistic.LightningRifleSecondaryKills]: 'Secondary Kills', - [Statistic.LightningRifleSecondaryDeaths]: 'Secondary Deaths', - [Statistic.LightningRifleShots]: 'Shots', - [Statistic.LightningRifleHits]: 'Hits', - - [Statistic.RedeemerKills]: 'Kills', - [Statistic.RedeemerDeaths]: 'Deaths', - [Statistic.RedeemerShots]: 'Shots', - [Statistic.RedeemerHits]: 'Hits', - - [Statistic.InstagibKills]: 'Kills', - [Statistic.InstagibDeaths]: 'Deaths', - [Statistic.InstagibShots]: 'Shots', - [Statistic.InstagibHits]: 'Hits', - - [Statistic.TelefragKills]: 'Kills', - [Statistic.TelefragDeaths]: 'Deaths', - - // Movement - [Statistic.RunDist]: 'Run Distance', - [Statistic.SprintDist]: 'Sprint Distance', - [Statistic.InAirDist]: 'In Air Distance', - [Statistic.SwimDist]: 'Swim Distance', - [Statistic.TranslocDist]: 'Translocator Distance', - [Statistic.NumDodges]: 'Dodges', - [Statistic.NumWallDodges]: 'Wall Dodges', - [Statistic.NumJumps]: 'Jumps', - [Statistic.NumLiftJumps]: 'Lift Jumps', - [Statistic.NumFloorSlides]: 'Floor Slides', - [Statistic.NumWallRuns]: 'Wall Runs', - [Statistic.NumImpactJumps]: 'Impact Jumps', - [Statistic.NumRocketJumps]: 'Rocket Jumps', - [Statistic.SlideDist]: 'Slide Dist', - [Statistic.WallRunDist]: 'Wall Run Dist', - - // CTF - [Statistic.FlagCaptures]: 'Flag Captures', - [Statistic.FlagReturns]: 'Flag Returns', - [Statistic.FlagAssists]: 'Flag Assists', - [Statistic.FlagHeldDeny]: 'Flag Held Deny', - [Statistic.FlagHeldDenyTime]: 'Flag Held Deny Time', - [Statistic.FlagHeldTime]: 'Flag Held Time', - [Statistic.FlagReturnPoints]: 'Flag Return Points', - [Statistic.CarryAssist]: 'Carry Assist', - [Statistic.CarryAssistPoints]: 'Carry Assist Points', - [Statistic.FlagCapPoints]: 'Flag Cap Points', - [Statistic.DefendAssist]: 'Defend Assist', - [Statistic.DefendAssistPoints]: 'Defend Assist Points', - [Statistic.ReturnAssist]: 'Return Assist', - [Statistic.ReturnAssistPoints]: 'Return Assist Points', - [Statistic.TeamCapPoints]: 'Team Cap Points', - [Statistic.EnemyFCDamage]: 'Enemy FC Damage', - [Statistic.FCKills]: 'FC Kills', - [Statistic.FCKillPoints]: 'FC Kill Points', - [Statistic.FlagSupportKills]: 'Flag Support Kills', - [Statistic.FlagSupportKillPoints]: 'Flag Support Kill Points', - [Statistic.RegularKillPoints]: 'Regular Kill Points', - [Statistic.FlagGrabs]: 'Flag Grabs', - [Statistic.AttackerScore]: 'Attacker Score', - [Statistic.DefenderScore]: 'Defender Score', - [Statistic.SupporterScore]: 'Supporter Score', - [Statistic.TeamKills]: 'Team Kills' + // Quick Look + [Statistic.SkillRating]: 'Duel MMR', + [Statistic.TDMSkillRating]: 'TDM MMR', + [Statistic.CTFSkillRating]: 'CTF MMR', + [Statistic.DMSkillRating]: 'DM MMR', + [Statistic.ShowdownSkillRating]: 'Showdown MMR', + [Statistic.MatchesPlayed]: 'Matches Played', + [Statistic.MatchesQuit]: 'Matches Quit', + [Statistic.TimePlayed]: 'Time Played', + [Statistic.Wins]: 'Wins', + [Statistic.Losses]: 'Losses', + [Statistic.Kills]: 'Kills', + [Statistic.Deaths]: 'Deaths', + [Statistic.Suicides]: 'Suicides', + + // Kill Achievements + [Statistic.MultiKillLevel0]: 'Double Kills', + [Statistic.MultiKillLevel1]: 'Multi Kills', + [Statistic.MultiKillLevel2]: 'Ultra Kills', + [Statistic.MultiKillLevel3]: 'Monster Kills', + [Statistic.SpreeKillLevel0]: 'Killing Sprees', + [Statistic.SpreeKillLevel1]: 'Rampages', + [Statistic.SpreeKillLevel2]: 'Dominatings', + [Statistic.SpreeKillLevel3]: 'Unstoppables', + [Statistic.SpreeKillLevel4]: 'Godlikes', + [Statistic.BestShockCombo]: 'Best Shock Combo', + [Statistic.AmazingCombos]: 'Amazing Combos', + [Statistic.AirRox]: 'Air Rox', + [Statistic.FlakShreds]: 'Flak Shreds', + [Statistic.AirSnot]: 'Air Snot', + + //Power Up Achievements + [Statistic.UDamageTime]: 'UDamage Time', + [Statistic.BerserkTime]: 'Berserk Time', + [Statistic.InvisibilityTime]: 'Invisibility Time', + [Statistic.UDamageCount]: 'UDamage Count', + [Statistic.BerserkCount]: 'Berserk Count', + [Statistic.InvisibilityCount]: 'Invisibility Count', + [Statistic.BootJumps]: 'Boot Jumps', + [Statistic.ShieldBeltCount]: 'Shield Belt Count', + [Statistic.ArmorVestCount]: 'Armor Vest Count', + [Statistic.ArmorPadsCount]: 'Armor Pads Count', + [Statistic.HelmetCount]: 'Helmet Count', + [Statistic.KegCount]: 'Keg Count', + + //Weapons + [Statistic.Accuracy]: 'Accuracy', + [Statistic.ImpactHammerKills]: 'Kills', + [Statistic.ImpactHammerDeaths]: 'Deaths', + + [Statistic.EnforcerKills]: 'Kills', + [Statistic.EnforcerDeaths]: 'Deaths', + [Statistic.EnforcerShots]: 'Shots', + [Statistic.EnforcerHits]: 'Hits', + + [Statistic.BioRifleKills]: 'Kills', + [Statistic.BioRifleDeaths]: 'Deaths', + [Statistic.BioRifleShots]: 'Shots', + [Statistic.BioRifleHits]: 'Hits', + + [Statistic.BioLauncherKills]: 'Kills', + [Statistic.BioLauncherDeaths]: 'Deaths', + [Statistic.BioLauncherShots]: 'Shots', + [Statistic.BioLauncherHits]: 'Hits', + + [Statistic.ShockBeamKills]: 'Beam Kills', + [Statistic.ShockBeamDeaths]: 'Beam Deaths', + [Statistic.ShockCoreKills]: 'Core Kills', + [Statistic.ShockCoreDeaths]: 'Core Deaths', + [Statistic.ShockComboKills]: 'Combo Kills', + [Statistic.ShockComboDeaths]: 'Combo Deaths', + [Statistic.ShockRifleShots]: 'Shots', + [Statistic.ShockRifleHits]: 'Hits', + + [Statistic.LinkKills]: 'Kills', + [Statistic.LinkDeaths]: 'Deaths', + [Statistic.LinkBeamKills]: 'Beam Kills', + [Statistic.LinkBeamDeaths]: 'Beam Deaths', + [Statistic.LinkShots]: 'Shots', + [Statistic.LinkHits]: 'Hits', + + [Statistic.MinigunKills]: 'Kills', + [Statistic.MinigunDeaths]: 'Deaths', + [Statistic.MinigunShardKills]: 'Shard Kills', + [Statistic.MinigunShardDeaths]: 'Shard Deaths', + [Statistic.MinigunShots]: 'Shots', + [Statistic.MinigunHits]: 'Hits', + + [Statistic.FlakShardKills]: 'Shard Kills', + [Statistic.FlakShardDeaths]: 'Shard Deaths', + [Statistic.FlakShellKills]: 'Shell Kills', + [Statistic.FlakShellDeaths]: 'Shell Deaths', + [Statistic.FlakShots]: 'Shots', + [Statistic.FlakHits]: 'Hits', + + [Statistic.RocketKills]: 'Kills', + [Statistic.RocketDeaths]: 'Deaths', + [Statistic.RocketShots]: 'Shots', + [Statistic.RocketHits]: 'Hits', + + [Statistic.SniperKills]: 'Kills', + [Statistic.SniperDeaths]: 'Deaths', + [Statistic.SniperHeadshotKills]: 'Headshot Kills', + [Statistic.SniperHeadshotDeaths]: 'Headshot Deaths', + [Statistic.SniperShots]: 'Shots', + [Statistic.SniperHits]: 'Hits', + + [Statistic.LightningRiflePrimaryKills]: 'Primary Kills', + [Statistic.LightningRiflePrimaryDeaths]: 'Primary Deaths', + [Statistic.LightningRifleSecondaryKills]: 'Secondary Kills', + [Statistic.LightningRifleSecondaryDeaths]: 'Secondary Deaths', + [Statistic.LightningRifleShots]: 'Shots', + [Statistic.LightningRifleHits]: 'Hits', + + [Statistic.RedeemerKills]: 'Kills', + [Statistic.RedeemerDeaths]: 'Deaths', + [Statistic.RedeemerShots]: 'Shots', + [Statistic.RedeemerHits]: 'Hits', + + [Statistic.InstagibKills]: 'Kills', + [Statistic.InstagibDeaths]: 'Deaths', + [Statistic.InstagibShots]: 'Shots', + [Statistic.InstagibHits]: 'Hits', + + [Statistic.TelefragKills]: 'Kills', + [Statistic.TelefragDeaths]: 'Deaths', + + // Movement + [Statistic.RunDist]: 'Run Distance', + [Statistic.SprintDist]: 'Sprint Distance', + [Statistic.InAirDist]: 'In Air Distance', + [Statistic.SwimDist]: 'Swim Distance', + [Statistic.TranslocDist]: 'Translocator Distance', + [Statistic.NumDodges]: 'Dodges', + [Statistic.NumWallDodges]: 'Wall Dodges', + [Statistic.NumJumps]: 'Jumps', + [Statistic.NumLiftJumps]: 'Lift Jumps', + [Statistic.NumFloorSlides]: 'Floor Slides', + [Statistic.NumWallRuns]: 'Wall Runs', + [Statistic.NumImpactJumps]: 'Impact Jumps', + [Statistic.NumRocketJumps]: 'Rocket Jumps', + [Statistic.SlideDist]: 'Slide Dist', + [Statistic.WallRunDist]: 'Wall Run Dist', + + // CTF + [Statistic.FlagCaptures]: 'Flag Captures', + [Statistic.FlagReturns]: 'Flag Returns', + [Statistic.FlagAssists]: 'Flag Assists', + [Statistic.FlagHeldDeny]: 'Flag Held Deny', + [Statistic.FlagHeldDenyTime]: 'Flag Held Deny Time', + [Statistic.FlagHeldTime]: 'Flag Held Time', + [Statistic.FlagReturnPoints]: 'Flag Return Points', + [Statistic.CarryAssist]: 'Carry Assist', + [Statistic.CarryAssistPoints]: 'Carry Assist Points', + [Statistic.FlagCapPoints]: 'Flag Cap Points', + [Statistic.DefendAssist]: 'Defend Assist', + [Statistic.DefendAssistPoints]: 'Defend Assist Points', + [Statistic.ReturnAssist]: 'Return Assist', + [Statistic.ReturnAssistPoints]: 'Return Assist Points', + [Statistic.TeamCapPoints]: 'Team Cap Points', + [Statistic.EnemyFCDamage]: 'Enemy FC Damage', + [Statistic.FCKills]: 'FC Kills', + [Statistic.FCKillPoints]: 'FC Kill Points', + [Statistic.FlagSupportKills]: 'Flag Support Kills', + [Statistic.FlagSupportKillPoints]: 'Flag Support Kill Points', + [Statistic.RegularKillPoints]: 'Regular Kill Points', + [Statistic.FlagGrabs]: 'Flag Grabs', + [Statistic.AttackerScore]: 'Attacker Score', + [Statistic.DefenderScore]: 'Defender Score', + [Statistic.SupporterScore]: 'Supporter Score', + [Statistic.TeamKills]: 'Team Kills' }; diff --git a/UT4MasterServer.Web/src/enums/statistic-window.ts b/UT4MasterServer.Web/src/enums/statistic-window.ts index afbb4a73..7f9c0785 100644 --- a/UT4MasterServer.Web/src/enums/statistic-window.ts +++ b/UT4MasterServer.Web/src/enums/statistic-window.ts @@ -1,6 +1,6 @@ export enum StatisticWindow { - AllTime = 'alltime', - Daily = 'daily', - Weekly = 'weekly', - Monthly = 'monthly' + AllTime = 'alltime', + Daily = 'daily', + Weekly = 'weekly', + Monthly = 'monthly' } diff --git a/UT4MasterServer.Web/src/enums/statistic.ts b/UT4MasterServer.Web/src/enums/statistic.ts index 061c1a31..677afea3 100644 --- a/UT4MasterServer.Web/src/enums/statistic.ts +++ b/UT4MasterServer.Web/src/enums/statistic.ts @@ -1,173 +1,173 @@ export enum Statistic { - // Quick Look - 'SkillRating' = 'SkillRating', - 'TDMSkillRating' = 'TDMSkillRating', - 'CTFSkillRating' = 'CTFSkillRating', - 'DMSkillRating' = 'DMSkillRating', - 'ShowdownSkillRating' = 'ShowdownSkillRating', - 'MatchesPlayed' = 'MatchesPlayed', - 'MatchesQuit' = 'MatchesQuit', - 'TimePlayed' = 'TimePlayed', - 'Wins' = 'Wins', - 'Losses' = 'Losses', - 'Kills' = 'Kills', - 'Deaths' = 'Deaths', - 'Suicides' = 'Suicides', - - // Kill Achievements - 'MultiKillLevel0' = 'MultiKillLevel0', - 'MultiKillLevel1' = 'MultiKillLevel1', - 'MultiKillLevel2' = 'MultiKillLevel2', - 'MultiKillLevel3' = 'MultiKillLevel3', - 'SpreeKillLevel0' = 'SpreeKillLevel0', - 'SpreeKillLevel1' = 'SpreeKillLevel1', - 'SpreeKillLevel2' = 'SpreeKillLevel2', - 'SpreeKillLevel3' = 'SpreeKillLevel3', - 'SpreeKillLevel4' = 'SpreeKillLevel4', - 'BestShockCombo' = 'BestShockCombo', - 'AmazingCombos' = 'AmazingCombos', - 'AirRox' = 'AirRox', - 'FlakShreds' = 'FlakShreds', - 'AirSnot' = 'AirSnot', - - //Power Up Achievements - 'UDamageTime' = 'UDamageTime', - 'BerserkTime' = 'BerserkTime', - 'InvisibilityTime' = 'InvisibilityTime', - 'UDamageCount' = 'UDamageCount', - 'BerserkCount' = 'BerserkCount', - 'InvisibilityCount' = 'InvisibilityCount', - 'BootJumps' = 'BootJumps', - 'ShieldBeltCount' = 'ShieldBeltCount', - 'ArmorVestCount' = 'ArmorVestCount', - 'ArmorPadsCount' = 'ArmorPadsCount', - 'HelmetCount' = 'HelmetCount', - 'KegCount' = 'KegCount', - - //Weapons - 'Accuracy' = 'Accuracy', - 'ImpactHammerKills' = 'ImpactHammerKills', - 'ImpactHammerDeaths' = 'ImpactHammerDeaths', - - 'EnforcerKills' = 'EnforcerKills', - 'EnforcerDeaths' = 'EnforcerDeaths', - 'EnforcerShots' = 'EnforcerShots', - 'EnforcerHits' = 'EnforcerHits', - - 'BioRifleKills' = 'BioRifleKills', - 'BioRifleDeaths' = 'BioRifleDeaths', - 'BioRifleShots' = 'BioRifleShots', - 'BioRifleHits' = 'BioRifleHits', - - 'BioLauncherKills' = 'BioLauncherKills', - 'BioLauncherDeaths' = 'BioLauncherDeaths', - 'BioLauncherShots' = 'BioLauncherShots', - 'BioLauncherHits' = 'BioLauncherHits', - - 'ShockBeamKills' = 'ShockBeamKills', - 'ShockBeamDeaths' = 'ShockBeamDeaths', - 'ShockCoreKills' = 'ShockCoreKills', - 'ShockCoreDeaths' = 'ShockCoreDeaths', - 'ShockComboKills' = 'ShockComboKills', - 'ShockComboDeaths' = 'ShockComboDeaths', - 'ShockRifleShots' = 'ShockRifleShots', - 'ShockRifleHits' = 'ShockRifleHits', - - 'LinkKills' = 'LinkKills', - 'LinkDeaths' = 'LinkDeaths', - 'LinkBeamKills' = 'LinkBeamKills', - 'LinkBeamDeaths' = 'LinkBeamDeaths', - 'LinkShots' = 'LinkShots', - 'LinkHits' = 'LinkHits', - - 'MinigunKills' = 'MinigunKills', - 'MinigunDeaths' = 'MinigunDeaths', - 'MinigunShardKills' = 'MinigunShardKills', - 'MinigunShardDeaths' = 'MinigunShardDeaths', - 'MinigunShots' = 'MinigunShots', - 'MinigunHits' = 'MinigunHits', - - 'FlakShardKills' = 'FlakShardKills', - 'FlakShardDeaths' = 'FlakShardDeaths', - 'FlakShellKills' = 'FlakShellKills', - 'FlakShellDeaths' = 'FlakShellDeaths', - 'FlakShots' = 'FlakShots', - 'FlakHits' = 'FlakHits', - - 'RocketKills' = 'RocketKills', - 'RocketDeaths' = 'RocketDeaths', - 'RocketShots' = 'RocketShots', - 'RocketHits' = 'RocketHits', - - 'SniperKills' = 'SniperKills', - 'SniperDeaths' = 'SniperDeaths', - 'SniperHeadshotKills' = 'SniperHeadshotKills', - 'SniperHeadshotDeaths' = 'SniperHeadshotDeaths', - 'SniperShots' = 'SniperShots', - 'SniperHits' = 'SniperHits', - - 'LightningRiflePrimaryKills' = 'LightningRiflePrimaryKills', - 'LightningRiflePrimaryDeaths' = 'LightningRiflePrimaryDeaths', - 'LightningRifleSecondaryKills' = 'LightningRifleSecondaryKills', - 'LightningRifleSecondaryDeaths' = 'LightningRifleSecondaryDeaths', - 'LightningRifleShots' = 'LightningRifleShots', - 'LightningRifleHits' = 'LightningRifleHits', - - 'RedeemerKills' = 'RedeemerKills', - 'RedeemerDeaths' = 'RedeemerDeaths', - 'RedeemerShots' = 'RedeemerShots', - 'RedeemerHits' = 'RedeemerHits', - - 'InstagibKills' = 'InstagibKills', - 'InstagibDeaths' = 'InstagibDeaths', - 'InstagibShots' = 'InstagibShots', - 'InstagibHits' = 'InstagibHits', - - 'TelefragKills' = 'TelefragKills', - 'TelefragDeaths' = 'TelefragDeaths', - - // Movement - 'RunDist' = 'RunDist', - 'SprintDist' = 'SprintDist', - 'InAirDist' = 'InAirDist', - 'SwimDist' = 'SwimDist', - 'TranslocDist' = 'TranslocDist', - 'NumDodges' = 'NumDodges', - 'NumWallDodges' = 'NumWallDodges', - 'NumJumps' = 'NumJumps', - 'NumLiftJumps' = 'NumLiftJumps', - 'NumFloorSlides' = 'NumFloorSlides', - 'NumWallRuns' = 'NumWallRuns', - 'NumImpactJumps' = 'NumImpactJumps', - 'NumRocketJumps' = 'NumRocketJumps', - 'SlideDist' = 'SlideDist', - 'WallRunDist' = 'WallRunDist', - - // CTF - 'FlagCaptures' = 'FlagCaptures', - 'FlagReturns' = 'FlagReturns', - 'FlagAssists' = 'FlagAssists', - 'FlagHeldDeny' = 'FlagHeldDeny', - 'FlagHeldDenyTime' = 'FlagHeldDenyTime', - 'FlagHeldTime' = 'FlagHeldTime', - 'FlagReturnPoints' = 'FlagReturnPoints', - 'CarryAssist' = 'CarryAssist', - 'CarryAssistPoints' = 'CarryAssistPoints', - 'FlagCapPoints' = 'FlagCapPoints', - 'DefendAssist' = 'DefendAssist', - 'DefendAssistPoints' = 'DefendAssistPoints', - 'ReturnAssist' = 'ReturnAssist', - 'ReturnAssistPoints' = 'ReturnAssistPoints', - 'TeamCapPoints' = 'TeamCapPoints', - 'EnemyFCDamage' = 'EnemyFCDamage', - 'FCKills' = 'FCKills', - 'FCKillPoints' = 'FCKillPoints', - 'FlagSupportKills' = 'FlagSupportKills', - 'FlagSupportKillPoints' = 'FlagSupportKillPoints', - 'RegularKillPoints' = 'RegularKillPoints', - 'FlagGrabs' = 'FlagGrabs', - 'AttackerScore' = 'AttackerScore', - 'DefenderScore' = 'DefenderScore', - 'SupporterScore' = 'SupporterScore', - 'TeamKills' = 'TeamKills' + // Quick Look + 'SkillRating' = 'SkillRating', + 'TDMSkillRating' = 'TDMSkillRating', + 'CTFSkillRating' = 'CTFSkillRating', + 'DMSkillRating' = 'DMSkillRating', + 'ShowdownSkillRating' = 'ShowdownSkillRating', + 'MatchesPlayed' = 'MatchesPlayed', + 'MatchesQuit' = 'MatchesQuit', + 'TimePlayed' = 'TimePlayed', + 'Wins' = 'Wins', + 'Losses' = 'Losses', + 'Kills' = 'Kills', + 'Deaths' = 'Deaths', + 'Suicides' = 'Suicides', + + // Kill Achievements + 'MultiKillLevel0' = 'MultiKillLevel0', + 'MultiKillLevel1' = 'MultiKillLevel1', + 'MultiKillLevel2' = 'MultiKillLevel2', + 'MultiKillLevel3' = 'MultiKillLevel3', + 'SpreeKillLevel0' = 'SpreeKillLevel0', + 'SpreeKillLevel1' = 'SpreeKillLevel1', + 'SpreeKillLevel2' = 'SpreeKillLevel2', + 'SpreeKillLevel3' = 'SpreeKillLevel3', + 'SpreeKillLevel4' = 'SpreeKillLevel4', + 'BestShockCombo' = 'BestShockCombo', + 'AmazingCombos' = 'AmazingCombos', + 'AirRox' = 'AirRox', + 'FlakShreds' = 'FlakShreds', + 'AirSnot' = 'AirSnot', + + //Power Up Achievements + 'UDamageTime' = 'UDamageTime', + 'BerserkTime' = 'BerserkTime', + 'InvisibilityTime' = 'InvisibilityTime', + 'UDamageCount' = 'UDamageCount', + 'BerserkCount' = 'BerserkCount', + 'InvisibilityCount' = 'InvisibilityCount', + 'BootJumps' = 'BootJumps', + 'ShieldBeltCount' = 'ShieldBeltCount', + 'ArmorVestCount' = 'ArmorVestCount', + 'ArmorPadsCount' = 'ArmorPadsCount', + 'HelmetCount' = 'HelmetCount', + 'KegCount' = 'KegCount', + + //Weapons + 'Accuracy' = 'Accuracy', + 'ImpactHammerKills' = 'ImpactHammerKills', + 'ImpactHammerDeaths' = 'ImpactHammerDeaths', + + 'EnforcerKills' = 'EnforcerKills', + 'EnforcerDeaths' = 'EnforcerDeaths', + 'EnforcerShots' = 'EnforcerShots', + 'EnforcerHits' = 'EnforcerHits', + + 'BioRifleKills' = 'BioRifleKills', + 'BioRifleDeaths' = 'BioRifleDeaths', + 'BioRifleShots' = 'BioRifleShots', + 'BioRifleHits' = 'BioRifleHits', + + 'BioLauncherKills' = 'BioLauncherKills', + 'BioLauncherDeaths' = 'BioLauncherDeaths', + 'BioLauncherShots' = 'BioLauncherShots', + 'BioLauncherHits' = 'BioLauncherHits', + + 'ShockBeamKills' = 'ShockBeamKills', + 'ShockBeamDeaths' = 'ShockBeamDeaths', + 'ShockCoreKills' = 'ShockCoreKills', + 'ShockCoreDeaths' = 'ShockCoreDeaths', + 'ShockComboKills' = 'ShockComboKills', + 'ShockComboDeaths' = 'ShockComboDeaths', + 'ShockRifleShots' = 'ShockRifleShots', + 'ShockRifleHits' = 'ShockRifleHits', + + 'LinkKills' = 'LinkKills', + 'LinkDeaths' = 'LinkDeaths', + 'LinkBeamKills' = 'LinkBeamKills', + 'LinkBeamDeaths' = 'LinkBeamDeaths', + 'LinkShots' = 'LinkShots', + 'LinkHits' = 'LinkHits', + + 'MinigunKills' = 'MinigunKills', + 'MinigunDeaths' = 'MinigunDeaths', + 'MinigunShardKills' = 'MinigunShardKills', + 'MinigunShardDeaths' = 'MinigunShardDeaths', + 'MinigunShots' = 'MinigunShots', + 'MinigunHits' = 'MinigunHits', + + 'FlakShardKills' = 'FlakShardKills', + 'FlakShardDeaths' = 'FlakShardDeaths', + 'FlakShellKills' = 'FlakShellKills', + 'FlakShellDeaths' = 'FlakShellDeaths', + 'FlakShots' = 'FlakShots', + 'FlakHits' = 'FlakHits', + + 'RocketKills' = 'RocketKills', + 'RocketDeaths' = 'RocketDeaths', + 'RocketShots' = 'RocketShots', + 'RocketHits' = 'RocketHits', + + 'SniperKills' = 'SniperKills', + 'SniperDeaths' = 'SniperDeaths', + 'SniperHeadshotKills' = 'SniperHeadshotKills', + 'SniperHeadshotDeaths' = 'SniperHeadshotDeaths', + 'SniperShots' = 'SniperShots', + 'SniperHits' = 'SniperHits', + + 'LightningRiflePrimaryKills' = 'LightningRiflePrimaryKills', + 'LightningRiflePrimaryDeaths' = 'LightningRiflePrimaryDeaths', + 'LightningRifleSecondaryKills' = 'LightningRifleSecondaryKills', + 'LightningRifleSecondaryDeaths' = 'LightningRifleSecondaryDeaths', + 'LightningRifleShots' = 'LightningRifleShots', + 'LightningRifleHits' = 'LightningRifleHits', + + 'RedeemerKills' = 'RedeemerKills', + 'RedeemerDeaths' = 'RedeemerDeaths', + 'RedeemerShots' = 'RedeemerShots', + 'RedeemerHits' = 'RedeemerHits', + + 'InstagibKills' = 'InstagibKills', + 'InstagibDeaths' = 'InstagibDeaths', + 'InstagibShots' = 'InstagibShots', + 'InstagibHits' = 'InstagibHits', + + 'TelefragKills' = 'TelefragKills', + 'TelefragDeaths' = 'TelefragDeaths', + + // Movement + 'RunDist' = 'RunDist', + 'SprintDist' = 'SprintDist', + 'InAirDist' = 'InAirDist', + 'SwimDist' = 'SwimDist', + 'TranslocDist' = 'TranslocDist', + 'NumDodges' = 'NumDodges', + 'NumWallDodges' = 'NumWallDodges', + 'NumJumps' = 'NumJumps', + 'NumLiftJumps' = 'NumLiftJumps', + 'NumFloorSlides' = 'NumFloorSlides', + 'NumWallRuns' = 'NumWallRuns', + 'NumImpactJumps' = 'NumImpactJumps', + 'NumRocketJumps' = 'NumRocketJumps', + 'SlideDist' = 'SlideDist', + 'WallRunDist' = 'WallRunDist', + + // CTF + 'FlagCaptures' = 'FlagCaptures', + 'FlagReturns' = 'FlagReturns', + 'FlagAssists' = 'FlagAssists', + 'FlagHeldDeny' = 'FlagHeldDeny', + 'FlagHeldDenyTime' = 'FlagHeldDenyTime', + 'FlagHeldTime' = 'FlagHeldTime', + 'FlagReturnPoints' = 'FlagReturnPoints', + 'CarryAssist' = 'CarryAssist', + 'CarryAssistPoints' = 'CarryAssistPoints', + 'FlagCapPoints' = 'FlagCapPoints', + 'DefendAssist' = 'DefendAssist', + 'DefendAssistPoints' = 'DefendAssistPoints', + 'ReturnAssist' = 'ReturnAssist', + 'ReturnAssistPoints' = 'ReturnAssistPoints', + 'TeamCapPoints' = 'TeamCapPoints', + 'EnemyFCDamage' = 'EnemyFCDamage', + 'FCKills' = 'FCKills', + 'FCKillPoints' = 'FCKillPoints', + 'FlagSupportKills' = 'FlagSupportKills', + 'FlagSupportKillPoints' = 'FlagSupportKillPoints', + 'RegularKillPoints' = 'RegularKillPoints', + 'FlagGrabs' = 'FlagGrabs', + 'AttackerScore' = 'AttackerScore', + 'DefenderScore' = 'DefenderScore', + 'SupporterScore' = 'SupporterScore', + 'TeamKills' = 'TeamKills' } diff --git a/UT4MasterServer.Web/src/globals.d.ts b/UT4MasterServer.Web/src/globals.d.ts index 6e77500e..1983200d 100644 --- a/UT4MasterServer.Web/src/globals.d.ts +++ b/UT4MasterServer.Web/src/globals.d.ts @@ -2,6 +2,6 @@ export {}; declare global { - const __BACKEND_URL: string; - const __RECAPTCHA_SITE_KEY: string; + const __BACKEND_URL: string; + const __RECAPTCHA_SITE_KEY: string; } diff --git a/UT4MasterServer.Web/src/hooks/use-paging.hook.ts b/UT4MasterServer.Web/src/hooks/use-paging.hook.ts index 53f972c3..7c6574bb 100644 --- a/UT4MasterServer.Web/src/hooks/use-paging.hook.ts +++ b/UT4MasterServer.Web/src/hooks/use-paging.hook.ts @@ -1,21 +1,21 @@ import { shallowRef } from 'vue'; export function usePaging(pageSize = 10) { - const pageStart = shallowRef(0); - const pageEnd = shallowRef(pageSize); - const currentPage = shallowRef(0); + const pageStart = shallowRef(0); + const pageEnd = shallowRef(pageSize); + const currentPage = shallowRef(0); - function handlePagingUpdate(start: number, end: number, page: number) { - pageStart.value = start; - pageEnd.value = end; - currentPage.value = page; - } + function handlePagingUpdate(start: number, end: number, page: number) { + pageStart.value = start; + pageEnd.value = end; + currentPage.value = page; + } - return { - pageSize, - pageStart, - pageEnd, - currentPage, - handlePagingUpdate - }; + return { + pageSize, + pageStart, + pageEnd, + currentPage, + handlePagingUpdate + }; } diff --git a/UT4MasterServer.Web/src/main.ts b/UT4MasterServer.Web/src/main.ts index 35f850ec..3882a2fd 100644 --- a/UT4MasterServer.Web/src/main.ts +++ b/UT4MasterServer.Web/src/main.ts @@ -5,17 +5,17 @@ import { library } from '@fortawesome/fontawesome-svg-core'; import { faCopy, faPenToSquare } from '@fortawesome/free-regular-svg-icons'; import { faGithub, faDiscord } from '@fortawesome/free-brands-svg-icons'; import { - faCheck, - faCertificate, - faTrashCan, - faPlus, - faChevronUp, - faChevronDown, - faChevronLeft, - faChevronRight, - faArrowsRotate, - faShare, - faU + faCheck, + faCertificate, + faTrashCan, + faPlus, + faChevronUp, + faChevronDown, + faChevronLeft, + faChevronRight, + faArrowsRotate, + faShare, + faU } from '@fortawesome/free-solid-svg-icons'; library.add(faCopy); diff --git a/UT4MasterServer.Web/src/pages/Admin/Accounts/Accounts.vue b/UT4MasterServer.Web/src/pages/Admin/Accounts/Accounts.vue index 90b47ed6..b7e1b9e9 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Accounts/Accounts.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Accounts/Accounts.vue @@ -1,80 +1,80 @@ @@ -97,7 +97,7 @@ import RoleMultiSelect from './components/RoleMultiSelect.vue'; import { debounce } from 'ts-debounce'; interface IGridAccount extends IAccountWithRoles { - editing?: boolean; + editing?: boolean; } const accountService = new AccountService(); @@ -111,58 +111,58 @@ const filterRoles = shallowRef([]); const { pageSize, pageStart, pageEnd, handlePagingUpdate } = usePaging(); async function searchAccounts() { - try { - status.value = AsyncStatus.BUSY; - const response = await accountService.searchAccounts( - filterText.value, - pageStart.value, - pageEnd.value, - true, - filterRoles.value - ); - accounts.value = response.accounts; - totalAccounts.value = response.count; - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error loading accounts', err); - } + try { + status.value = AsyncStatus.BUSY; + const response = await accountService.searchAccounts( + filterText.value, + pageStart.value, + pageEnd.value, + true, + filterRoles.value + ); + accounts.value = response.accounts; + totalAccounts.value = response.count; + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error loading accounts', err); + } } function canDelete(account: IGridAccount) { - const accountIsUser = AccountStore.account?.id === account.id; - const accountIsAdmin = account.roles?.includes(Role.Admin); - const accountIsModerator = account.roles?.includes(Role.Moderator); - const userIsModerator = AccountStore.account?.roles?.includes(Role.Moderator); + const accountIsUser = AccountStore.account?.id === account.id; + const accountIsAdmin = account.roles?.includes(Role.Admin); + const accountIsModerator = account.roles?.includes(Role.Moderator); + const userIsModerator = AccountStore.account?.roles?.includes(Role.Moderator); - return ( - !accountIsUser && - !accountIsAdmin && - !(userIsModerator && (accountIsAdmin || accountIsModerator)) - ); + return ( + !accountIsUser && + !accountIsAdmin && + !(userIsModerator && (accountIsAdmin || accountIsModerator)) + ); } async function handleDelete(account: IGridAccount) { - // TODO: something less hideous than browser confirm dialog - const confirmDelete = confirm( - `Are you sure you want to delete account ${account.username}?` - ); - if (confirmDelete) { - try { - status.value = AsyncStatus.BUSY; - await adminService.deleteAccount(account.id); - searchAccounts(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error deleting account', err); - } - } + // TODO: something less hideous than browser confirm dialog + const confirmDelete = confirm( + `Are you sure you want to delete account ${account.username}?` + ); + if (confirmDelete) { + try { + status.value = AsyncStatus.BUSY; + await adminService.deleteAccount(account.id); + searchAccounts(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error deleting account', err); + } + } } function handleUpdated(account: IGridAccount) { - account.editing = false; - searchAccounts(); + account.editing = false; + searchAccounts(); } const filtersUpdated = debounce(searchAccounts, 500); diff --git a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/ChangePassword.vue b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/ChangePassword.vue index 68216011..1ae53522 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/ChangePassword.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/ChangePassword.vue @@ -1,82 +1,82 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/EditAccount.vue b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/EditAccount.vue index 64365375..9c0ff27f 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/EditAccount.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/EditAccount.vue @@ -1,7 +1,7 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/RoleMultiSelect.vue b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/RoleMultiSelect.vue index 5a31f59a..9a01b9a3 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Accounts/components/RoleMultiSelect.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Accounts/components/RoleMultiSelect.vue @@ -1,10 +1,10 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/Accounts/types/admin-change-password-request.ts b/UT4MasterServer.Web/src/pages/Admin/Accounts/types/admin-change-password-request.ts index 495825bf..81bfe9e9 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Accounts/types/admin-change-password-request.ts +++ b/UT4MasterServer.Web/src/pages/Admin/Accounts/types/admin-change-password-request.ts @@ -1,5 +1,5 @@ export interface IAdminChangePasswordRequest { - newPassword: string; - email: string; - iAmSure: boolean; + newPassword: string; + email: string; + iAmSure: boolean; } diff --git a/UT4MasterServer.Web/src/pages/Admin/Clients/Clients.vue b/UT4MasterServer.Web/src/pages/Admin/Clients/Clients.vue index d3489145..c56c7cbc 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Clients/Clients.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Clients/Clients.vue @@ -1,86 +1,86 @@ @@ -100,7 +100,7 @@ import { usePaging } from '@/hooks/use-paging.hook'; import { useClientOptions } from './hooks/use-client-options.hook'; interface IGridClient extends IClient { - editing?: boolean; + editing?: boolean; } const adminService = new AdminService(); @@ -108,48 +108,48 @@ const clients = ref([]); const status = shallowRef(AsyncStatus.OK); const filterText = shallowRef(''); const filteredClients = computed(() => - clients.value.filter((c) => - c.name.toLocaleLowerCase().includes(filterText.value.toLocaleLowerCase()) - ) + clients.value.filter((c) => + c.name.toLocaleLowerCase().includes(filterText.value.toLocaleLowerCase()) + ) ); const { pageSize, pageStart, pageEnd, handlePagingUpdate } = usePaging(); const { isReservedClient } = useClientOptions(); async function loadClients() { - try { - status.value = AsyncStatus.BUSY; - clients.value = await adminService.getClients(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error loading clients', err); - } + try { + status.value = AsyncStatus.BUSY; + clients.value = await adminService.getClients(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error loading clients', err); + } } function canDelete(client: IGridClient) { - return !isReservedClient(client); + return !isReservedClient(client); } function handleUpdated(client: IGridClient) { - client.editing = false; - loadClients(); + client.editing = false; + loadClients(); } async function handleDelete(client: IGridClient) { - const confirmDelete = confirm( - `Are you sure you want to delete client ${client.name}?` - ); - if (confirmDelete) { - try { - status.value = AsyncStatus.BUSY; - await adminService.deleteClient(client.id); - loadClients(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error deleting client', err); - } - } + const confirmDelete = confirm( + `Are you sure you want to delete client ${client.name}?` + ); + if (confirmDelete) { + try { + status.value = AsyncStatus.BUSY; + await adminService.deleteClient(client.id); + loadClients(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error deleting client', err); + } + } } diff --git a/UT4MasterServer.Web/src/pages/Admin/Clients/components/AddClient.vue b/UT4MasterServer.Web/src/pages/Admin/Clients/components/AddClient.vue index 763a0103..8b221856 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Clients/components/AddClient.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Clients/components/AddClient.vue @@ -1,40 +1,40 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/Clients/components/EditClient.vue b/UT4MasterServer.Web/src/pages/Admin/Clients/components/EditClient.vue index 81a73da5..297eca86 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Clients/components/EditClient.vue +++ b/UT4MasterServer.Web/src/pages/Admin/Clients/components/EditClient.vue @@ -1,56 +1,56 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/Clients/hooks/use-client-options.hook.ts b/UT4MasterServer.Web/src/pages/Admin/Clients/hooks/use-client-options.hook.ts index 732317c0..b9f82471 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Clients/hooks/use-client-options.hook.ts +++ b/UT4MasterServer.Web/src/pages/Admin/Clients/hooks/use-client-options.hook.ts @@ -2,33 +2,33 @@ import { ITrustedGameServer } from '../../TrustedServers/types/trusted-game-serv import { IClient } from '../types/client'; export function useClientOptions() { - // These are hardcoded in ClientIdentification.cs, we could add an endpoint to retrieve them to avoid the duplcated hardcoding at some point, but I don't think these are likely to ever change. - const reservedIds = [ - '34a02cf8f4414e29b15921876da36f9a', - '1252412dc7704a9690f6ea4611bc81ee', - '6ff43e743edc4d1dbac3594877b4bed9' - ]; + // These are hardcoded in ClientIdentification.cs, we could add an endpoint to retrieve them to avoid the duplcated hardcoding at some point, but I don't think these are likely to ever change. + const reservedIds = [ + '34a02cf8f4414e29b15921876da36f9a', + '1252412dc7704a9690f6ea4611bc81ee', + '6ff43e743edc4d1dbac3594877b4bed9' + ]; - function isReservedClient(client: IClient) { - return reservedIds.includes(client.id); - } + function isReservedClient(client: IClient) { + return reservedIds.includes(client.id); + } - function isValidName(name: string, allClients: IClient[]) { - return name.length && !allClients.find((c) => c.name === name); - } + function isValidName(name: string, allClients: IClient[]) { + return name.length && !allClients.find((c) => c.name === name); + } - function getClientOptionsForTrustedServer( - clients: IClient[], - servers: ITrustedGameServer[] - ) { - return clients.filter( - (c) => !isReservedClient(c) && !servers.find((s) => s.id === c.id) - ); - } + function getClientOptionsForTrustedServer( + clients: IClient[], + servers: ITrustedGameServer[] + ) { + return clients.filter( + (c) => !isReservedClient(c) && !servers.find((s) => s.id === c.id) + ); + } - return { - isReservedClient, - isValidName, - getClientOptionsForTrustedServer - }; + return { + isReservedClient, + isValidName, + getClientOptionsForTrustedServer + }; } diff --git a/UT4MasterServer.Web/src/pages/Admin/Clients/types/client.ts b/UT4MasterServer.Web/src/pages/Admin/Clients/types/client.ts index c1fa72ba..955338e7 100644 --- a/UT4MasterServer.Web/src/pages/Admin/Clients/types/client.ts +++ b/UT4MasterServer.Web/src/pages/Admin/Clients/types/client.ts @@ -1,5 +1,5 @@ export interface IClient { - id: string; - secret: string; - name: string; + id: string; + secret: string; + name: string; } diff --git a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/CloudFiles.vue b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/CloudFiles.vue index 7a586dd4..dcb4c90b 100644 --- a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/CloudFiles.vue +++ b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/CloudFiles.vue @@ -1,88 +1,88 @@ @@ -92,8 +92,8 @@ import CrudPage from '@/components/CrudPage.vue'; import LoadingPanel from '@/components/LoadingPanel.vue'; import { AsyncStatus } from '@/types/async-status'; import { - objectHash, - isoDateTimeStringToLocalDateTime + objectHash, + isoDateTimeStringToLocalDateTime } from '@/utils/utilities'; import AdminService from '@/services/admin.service'; import { ICloudFile } from './types/cloud-file'; @@ -104,15 +104,15 @@ import Paging from '@/components/Paging.vue'; import { usePaging } from '@/hooks/use-paging.hook'; interface IGridCloudFile extends ICloudFile { - editing?: boolean; + editing?: boolean; } const restrictedFiles = [ - 'UnrealTournamentOnlineSettings.json', - 'UnrealTournmentMCPAnnouncement.json', - 'UnrealTournmentMCPGameRulesets.json', - 'UnrealTournmentMCPStorage.json', - 'UTMCPPlaylists.json' + 'UnrealTournamentOnlineSettings.json', + 'UnrealTournmentMCPAnnouncement.json', + 'UnrealTournmentMCPGameRulesets.json', + 'UnrealTournmentMCPStorage.json', + 'UTMCPPlaylists.json' ]; const adminService = new AdminService(); @@ -120,56 +120,56 @@ const files = ref([]); const status = shallowRef(AsyncStatus.OK); const filterText = shallowRef(''); const filteredFiles = computed(() => - files.value.filter((c) => - c.filename - .toLocaleLowerCase() - .includes(filterText.value.toLocaleLowerCase()) - ) + files.value.filter((c) => + c.filename + .toLocaleLowerCase() + .includes(filterText.value.toLocaleLowerCase()) + ) ); const { pageSize, pageStart, pageEnd, handlePagingUpdate } = usePaging(); function getFileSize(fileLength: number) { - if (fileLength < 1024) { - return `${fileLength} B`; - } - return `${Math.round(fileLength / 1024)} KB`; + if (fileLength < 1024) { + return `${fileLength} B`; + } + return `${Math.round(fileLength / 1024)} KB`; } async function loadFiles() { - try { - status.value = AsyncStatus.BUSY; - files.value = await adminService.getCloudFiles(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error loading files', err); - } + try { + status.value = AsyncStatus.BUSY; + files.value = await adminService.getCloudFiles(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error loading files', err); + } } function canDelete(file: IGridCloudFile) { - return !restrictedFiles.includes(file.filename); + return !restrictedFiles.includes(file.filename); } function handleUpdated(file: IGridCloudFile) { - file.editing = false; - loadFiles(); + file.editing = false; + loadFiles(); } async function handleDelete(file: IGridCloudFile) { - const confirmDelete = confirm( - `Are you sure you want to delete file ${file.filename}?` - ); - if (confirmDelete) { - try { - status.value = AsyncStatus.BUSY; - await adminService.deleteCloudFile(file.filename); - loadFiles(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error deleting file', err); - } - } + const confirmDelete = confirm( + `Are you sure you want to delete file ${file.filename}?` + ); + if (confirmDelete) { + try { + status.value = AsyncStatus.BUSY; + await adminService.deleteCloudFile(file.filename); + loadFiles(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error deleting file', err); + } + } } diff --git a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/AddCloudFile.vue b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/AddCloudFile.vue index f18b7bd5..9c169c47 100644 --- a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/AddCloudFile.vue +++ b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/AddCloudFile.vue @@ -1,40 +1,40 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/EditCloudFile.vue b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/EditCloudFile.vue index 6bb39131..00170a8e 100644 --- a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/EditCloudFile.vue +++ b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/components/EditCloudFile.vue @@ -1,44 +1,44 @@ diff --git a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/types/cloud-file.ts b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/types/cloud-file.ts index e5841f90..5e8e8640 100644 --- a/UT4MasterServer.Web/src/pages/Admin/CloudFiles/types/cloud-file.ts +++ b/UT4MasterServer.Web/src/pages/Admin/CloudFiles/types/cloud-file.ts @@ -1,9 +1,9 @@ export interface ICloudFile { - accountID: string; - filename: string; - hash: string; - hash256: string; - uploadedAt: string; - rawContent: string; - length: number; + accountID: string; + filename: string; + hash: string; + hash256: string; + uploadedAt: string; + rawContent: string; + length: number; } diff --git a/UT4MasterServer.Web/src/pages/Admin/TrustedServers/TrustedServers.vue b/UT4MasterServer.Web/src/pages/Admin/TrustedServers/TrustedServers.vue index a26671ff..12482aed 100644 --- a/UT4MasterServer.Web/src/pages/Admin/TrustedServers/TrustedServers.vue +++ b/UT4MasterServer.Web/src/pages/Admin/TrustedServers/TrustedServers.vue @@ -1,96 +1,96 @@ @@ -115,53 +115,53 @@ const trustedServers = ref([]); const status = shallowRef(AsyncStatus.OK); const filterText = shallowRef(''); const filteredTrustedServers = computed(() => - trustedServers.value.filter( - (c) => - !c.client || - c.client?.name - .toLocaleLowerCase() - .includes(filterText.value.toLocaleLowerCase()) - ) + trustedServers.value.filter( + (c) => + !c.client || + c.client?.name + .toLocaleLowerCase() + .includes(filterText.value.toLocaleLowerCase()) + ) ); const allClients = shallowRef([]); const { pageSize, pageStart, pageEnd, handlePagingUpdate } = usePaging(); async function loadTrustedServers() { - try { - status.value = AsyncStatus.BUSY; - const [clients, servers] = await Promise.all([ - adminService.getClients(), - adminService.getTrustedServers() - ]); - allClients.value = clients; - trustedServers.value = servers; - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error loading trustedServers', err); - } + try { + status.value = AsyncStatus.BUSY; + const [clients, servers] = await Promise.all([ + adminService.getClients(), + adminService.getTrustedServers() + ]); + allClients.value = clients; + trustedServers.value = servers; + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error loading trustedServers', err); + } } function handleUpdated(trustedServer: IGridTrustedServer) { - trustedServer.editing = false; - loadTrustedServers(); + trustedServer.editing = false; + loadTrustedServers(); } async function handleDelete(trustedServer: IGridTrustedServer) { - const confirmDelete = confirm( - `Are you sure you want to delete server ${trustedServer.client?.name}?` - ); - if (confirmDelete) { - try { - status.value = AsyncStatus.BUSY; - await adminService.deleteTrustedServer(trustedServer.id); - loadTrustedServers(); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error('Error deleting trustedServer', err); - } - } + const confirmDelete = confirm( + `Are you sure you want to delete server ${trustedServer.client?.name}?` + ); + if (confirmDelete) { + try { + status.value = AsyncStatus.BUSY; + await adminService.deleteTrustedServer(trustedServer.id); + loadTrustedServers(); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error('Error deleting trustedServer', err); + } + } } diff --git a/UT4MasterServer.Web/src/pages/Admin/TrustedServers/components/AddTrustedServer.vue b/UT4MasterServer.Web/src/pages/Admin/TrustedServers/components/AddTrustedServer.vue index 0a451619..e6d91611 100644 --- a/UT4MasterServer.Web/src/pages/Admin/TrustedServers/components/AddTrustedServer.vue +++ b/UT4MasterServer.Web/src/pages/Admin/TrustedServers/components/AddTrustedServer.vue @@ -1,82 +1,82 @@ diff --git a/UT4MasterServer.Web/src/pages/NotFound.vue b/UT4MasterServer.Web/src/pages/NotFound.vue index f30f36f2..cfb4c956 100644 --- a/UT4MasterServer.Web/src/pages/NotFound.vue +++ b/UT4MasterServer.Web/src/pages/NotFound.vue @@ -1,4 +1,4 @@ diff --git a/UT4MasterServer.Web/src/pages/Profile/ChangeEmail.vue b/UT4MasterServer.Web/src/pages/Profile/ChangeEmail.vue index d13a4b66..378db277 100644 --- a/UT4MasterServer.Web/src/pages/Profile/ChangeEmail.vue +++ b/UT4MasterServer.Web/src/pages/Profile/ChangeEmail.vue @@ -1,55 +1,55 @@ diff --git a/UT4MasterServer.Web/src/pages/Profile/ChangePassword.vue b/UT4MasterServer.Web/src/pages/Profile/ChangePassword.vue index 123a74e6..c68a666e 100644 --- a/UT4MasterServer.Web/src/pages/Profile/ChangePassword.vue +++ b/UT4MasterServer.Web/src/pages/Profile/ChangePassword.vue @@ -1,88 +1,88 @@ diff --git a/UT4MasterServer.Web/src/pages/Profile/ChangeUsername.vue b/UT4MasterServer.Web/src/pages/Profile/ChangeUsername.vue index 2b8e744f..67204fab 100644 --- a/UT4MasterServer.Web/src/pages/Profile/ChangeUsername.vue +++ b/UT4MasterServer.Web/src/pages/Profile/ChangeUsername.vue @@ -1,55 +1,55 @@ diff --git a/UT4MasterServer.Web/src/pages/Profile/PlayerCard.vue b/UT4MasterServer.Web/src/pages/Profile/PlayerCard.vue index 9c7e96c1..ccfa6e95 100644 --- a/UT4MasterServer.Web/src/pages/Profile/PlayerCard.vue +++ b/UT4MasterServer.Web/src/pages/Profile/PlayerCard.vue @@ -3,73 +3,73 @@ https://www.epicgames.com/unrealtournament/en-US/playerCard?playerId=0b0f09b400854b9b98932dd9e5abe7c5 --> diff --git a/UT4MasterServer.Web/src/pages/Profile/Profile.vue b/UT4MasterServer.Web/src/pages/Profile/Profile.vue index 98240aef..4437b0a6 100644 --- a/UT4MasterServer.Web/src/pages/Profile/Profile.vue +++ b/UT4MasterServer.Web/src/pages/Profile/Profile.vue @@ -1,3 +1,3 @@ diff --git a/UT4MasterServer.Web/src/pages/Rankings/Rankings.vue b/UT4MasterServer.Web/src/pages/Rankings/Rankings.vue index c90dde14..4463fbb5 100644 --- a/UT4MasterServer.Web/src/pages/Rankings/Rankings.vue +++ b/UT4MasterServer.Web/src/pages/Rankings/Rankings.vue @@ -1,81 +1,81 @@ @@ -92,16 +92,16 @@ import Ranking from './components/Ranking.vue'; import { useRoute, useRouter } from 'vue-router'; import { SessionStore } from '@/stores/session-store'; import { - getRouteParamNumberValue, - getRouteParamStringValue + getRouteParamNumberValue, + getRouteParamStringValue } from '@/utils/utilities'; const route = useRoute(); const router = useRouter(); const typeParam = getRouteParamStringValue( - route.params, - 'type', - RatingType.DMSkillRating + route.params, + 'type', + RatingType.DMSkillRating ) as RatingType; const pageParam = getRouteParamNumberValue(route.params, 'page', 1); const { pageSize, pageStart, currentPage, handlePagingUpdate } = usePaging(); @@ -115,105 +115,105 @@ const rankingsCount = shallowRef(0); const selectedRanking = shallowRef(undefined); const showSelectedRanking = computed( - () => - selectedRanking.value && - !rankings.value.find( - (r) => r.accountID === selectedRanking.value?.accountID - ) + () => + selectedRanking.value && + !rankings.value.find( + (r) => r.accountID === selectedRanking.value?.accountID + ) ); const showAbove = computed( - () => - showSelectedRanking.value && - selectedRanking.value && - selectedRanking.value.rank < rankings.value[0].rank + () => + showSelectedRanking.value && + selectedRanking.value && + selectedRanking.value.rank < rankings.value[0].rank ); const showBelow = computed( - () => - showSelectedRanking.value && - selectedRanking.value && - selectedRanking.value.rank > rankings.value[rankings.value.length - 1].rank + () => + showSelectedRanking.value && + selectedRanking.value && + selectedRanking.value.rank > rankings.value[rankings.value.length - 1].rank ); const ratingService = new RankingsService(); const ratingTypeOptions = [ - { text: 'Deathmatch', value: RatingType.DMSkillRating }, - { text: 'Duel', value: RatingType.SkillRating }, - { text: 'Team Deathmatch', value: RatingType.TDMSkillRating }, - { text: 'Capture the Flag', value: RatingType.CTFSkillRating }, - { text: 'Showdown', value: RatingType.ShowdownSkillRating }, - { text: 'Blitz', value: RatingType.FlagRunSkillRating } + { text: 'Deathmatch', value: RatingType.DMSkillRating }, + { text: 'Duel', value: RatingType.SkillRating }, + { text: 'Team Deathmatch', value: RatingType.TDMSkillRating }, + { text: 'Capture the Flag', value: RatingType.CTFSkillRating }, + { text: 'Showdown', value: RatingType.ShowdownSkillRating }, + { text: 'Blitz', value: RatingType.FlagRunSkillRating } ]; async function loadRankings() { - if (!ratingType.value) { - return; - } - - try { - status.value = AsyncStatus.BUSY; - const response = await ratingService.getRankings( - ratingType.value, - pageStart.value, - pageSize - ); - rankings.value = response.data; - rankingsCount.value = response.count; - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error(err); - } + if (!ratingType.value) { + return; + } + + try { + status.value = AsyncStatus.BUSY; + const response = await ratingService.getRankings( + ratingType.value, + pageStart.value, + pageSize + ); + rankings.value = response.data; + rankingsCount.value = response.count; + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error(err); + } } async function loadSelectedRanking() { - if (!ratingType.value || !SessionStore.session?.account_id) { - return; - } - - try { - selectedRanking.value = await ratingService.getSelectedRanking( - ratingType.value, - SessionStore.session?.account_id - ); - } catch (err: unknown) { - //Do nothing - } + if (!ratingType.value || !SessionStore.session?.account_id) { + return; + } + + try { + selectedRanking.value = await ratingService.getSelectedRanking( + ratingType.value, + SessionStore.session?.account_id + ); + } catch (err: unknown) { + //Do nothing + } } async function loadData() { - try { - status.value = AsyncStatus.BUSY; - await Promise.all([loadRankings(), loadSelectedRanking()]); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - console.error(err); - } + try { + status.value = AsyncStatus.BUSY; + await Promise.all([loadRankings(), loadSelectedRanking()]); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + console.error(err); + } } function handleRatingTypeChange() { - if (!ratingType.value) { - return; - } - handleSetPage(0); + if (!ratingType.value) { + return; + } + handleSetPage(0); } function handleSetPage(page: number) { - pagingKey.value++; - setPage.value = page; - router.push({ - name: 'Rankings', - params: { type: ratingType.value, page: page + 1 } - }); + pagingKey.value++; + setPage.value = page; + router.push({ + name: 'Rankings', + params: { type: ratingType.value, page: page + 1 } + }); } watch(currentPage, () => { - router.push({ - name: 'Rankings', - params: { type: ratingType.value, page: currentPage.value + 1 } - }); + router.push({ + name: 'Rankings', + params: { type: ratingType.value, page: currentPage.value + 1 } + }); }); diff --git a/UT4MasterServer.Web/src/pages/Rankings/components/Ranking.vue b/UT4MasterServer.Web/src/pages/Rankings/components/Ranking.vue index 96acdc92..1e1c0155 100644 --- a/UT4MasterServer.Web/src/pages/Rankings/components/Ranking.vue +++ b/UT4MasterServer.Web/src/pages/Rankings/components/Ranking.vue @@ -1,39 +1,39 @@ diff --git a/UT4MasterServer.Web/src/pages/Register.vue b/UT4MasterServer.Web/src/pages/Register.vue index cfb44e44..a8b761df 100644 --- a/UT4MasterServer.Web/src/pages/Register.vue +++ b/UT4MasterServer.Web/src/pages/Register.vue @@ -1,91 +1,91 @@ diff --git a/UT4MasterServer.Web/src/pages/Servers/Servers.vue b/UT4MasterServer.Web/src/pages/Servers/Servers.vue index de34f83a..e04b940d 100644 --- a/UT4MasterServer.Web/src/pages/Servers/Servers.vue +++ b/UT4MasterServer.Web/src/pages/Servers/Servers.vue @@ -1,126 +1,126 @@ diff --git a/UT4MasterServer.Web/src/pages/Servers/components/Hub.vue b/UT4MasterServer.Web/src/pages/Servers/components/Hub.vue index e8897d75..fcc24ce4 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/Hub.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/Hub.vue @@ -1,59 +1,59 @@ @@ -65,16 +65,16 @@ import { IHub } from '../types/hub'; import MatchList from './MatchList.vue'; const props = defineProps({ - hub: { - type: Object as PropType, - required: true - } + hub: { + type: Object as PropType, + required: true + } }); const showMatches = shallowRef(false); const trustedHub = computed( - () => props.hub.serverTrustLevel !== GameServerTrust.Untrusted + () => props.hub.serverTrustLevel !== GameServerTrust.Untrusted ); const ut4uu = computed(() => props.hub.uuInstalled); diff --git a/UT4MasterServer.Web/src/pages/Servers/components/HubList.vue b/UT4MasterServer.Web/src/pages/Servers/components/HubList.vue index 5137c9b7..f0a588ee 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/HubList.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/HubList.vue @@ -1,23 +1,23 @@ diff --git a/UT4MasterServer.Web/src/pages/Servers/components/Match.vue b/UT4MasterServer.Web/src/pages/Servers/components/Match.vue index e6cef577..f980d153 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/Match.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/Match.vue @@ -1,62 +1,62 @@ @@ -69,32 +69,32 @@ import { IMatch } from '../types/match'; import { IHub } from '../types/hub'; const props = defineProps({ - match: { - type: Object as PropType, - required: true - }, - hub: { - type: Object as PropType, - required: true - } + match: { + type: Object as PropType, + required: true + }, + hub: { + type: Object as PropType, + required: true + } }); const playersVisible = shallowRef(false); const mutators = computed(() => { - // Union of match mutators and forced mutators - const matchMutators = Array.from( - new Set([...props.match.mutators, ...props.match.forcedMutators]) - ); - // excluding the hub's forced mutators because they are already shown at the hub level - return matchMutators.filter((m) => !props.hub.forcedMutators.includes(m)); + // Union of match mutators and forced mutators + const matchMutators = Array.from( + new Set([...props.match.mutators, ...props.match.forcedMutators]) + ); + // excluding the hub's forced mutators because they are already shown at the hub level + return matchMutators.filter((m) => !props.hub.forcedMutators.includes(m)); }); function toggleShowPlayers() { - if (!SessionStore.isAuthenticated) { - playersVisible.value = false; - return; - } - playersVisible.value = !playersVisible.value; + if (!SessionStore.isAuthenticated) { + playersVisible.value = false; + return; + } + playersVisible.value = !playersVisible.value; } diff --git a/UT4MasterServer.Web/src/pages/Servers/components/MatchList.vue b/UT4MasterServer.Web/src/pages/Servers/components/MatchList.vue index c19d88bf..cdbb0c4d 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/MatchList.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/MatchList.vue @@ -1,29 +1,29 @@ @@ -33,9 +33,9 @@ import { IHub } from '../types/hub'; import Match from './Match.vue'; defineProps({ - hub: { - type: Object as PropType, - required: true - } + hub: { + type: Object as PropType, + required: true + } }); diff --git a/UT4MasterServer.Web/src/pages/Servers/components/PlayersInMatch.vue b/UT4MasterServer.Web/src/pages/Servers/components/PlayersInMatch.vue index 684e7ddd..621aba39 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/PlayersInMatch.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/PlayersInMatch.vue @@ -1,27 +1,27 @@ @@ -32,26 +32,26 @@ import { IAccount } from '@/types/account'; import AccountService from '@/services/account.service'; const props = defineProps({ - playerIds: { - type: Array as PropType, - default: undefined - } + playerIds: { + type: Array as PropType, + default: undefined + } }); const accountService = new AccountService(); const status = shallowRef(AsyncStatus.OK); const players = shallowRef([]); async function getPlayers() { - if (!props.playerIds?.length) { - return; - } - try { - status.value = AsyncStatus.BUSY; - players.value = await accountService.getAccountsByIds(props.playerIds); - status.value = AsyncStatus.OK; - } catch (err: unknown) { - status.value = AsyncStatus.ERROR; - } + if (!props.playerIds?.length) { + return; + } + try { + status.value = AsyncStatus.BUSY; + players.value = await accountService.getAccountsByIds(props.playerIds); + status.value = AsyncStatus.OK; + } catch (err: unknown) { + status.value = AsyncStatus.ERROR; + } } watch(() => props.playerIds, getPlayers); diff --git a/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayList.vue b/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayList.vue index 0ee41663..30583edf 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayList.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayList.vue @@ -1,33 +1,33 @@ diff --git a/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayServer.vue b/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayServer.vue index 23f6c021..09f9e1ec 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayServer.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/QuickPlayServer.vue @@ -1,26 +1,26 @@ @@ -29,9 +29,9 @@ import { PropType } from 'vue'; import { IQuickPlayServer } from '../types/quick-play-server'; defineProps({ - server: { - type: Object as PropType, - required: true - } + server: { + type: Object as PropType, + required: true + } }); diff --git a/UT4MasterServer.Web/src/pages/Servers/components/Server.vue b/UT4MasterServer.Web/src/pages/Servers/components/Server.vue index c6d8280a..e22b76db 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/Server.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/Server.vue @@ -1,34 +1,34 @@ @@ -40,19 +40,19 @@ import { SessionStore } from '@/stores/session-store'; import { IServer } from '../types/server'; defineProps({ - server: { - type: Object as PropType, - required: true - } + server: { + type: Object as PropType, + required: true + } }); const playersVisible = shallowRef(false); function toggleShowPlayers() { - if (!SessionStore.isAuthenticated) { - playersVisible.value = false; - return; - } - playersVisible.value = !playersVisible.value; + if (!SessionStore.isAuthenticated) { + playersVisible.value = false; + return; + } + playersVisible.value = !playersVisible.value; } diff --git a/UT4MasterServer.Web/src/pages/Servers/components/ServerList.vue b/UT4MasterServer.Web/src/pages/Servers/components/ServerList.vue index ad3aa20c..d1a05d06 100644 --- a/UT4MasterServer.Web/src/pages/Servers/components/ServerList.vue +++ b/UT4MasterServer.Web/src/pages/Servers/components/ServerList.vue @@ -1,30 +1,30 @@ diff --git a/UT4MasterServer.Web/src/pages/Servers/data/game-mode-map.ts b/UT4MasterServer.Web/src/pages/Servers/data/game-mode-map.ts index 1a02f4c0..ed6995e5 100644 --- a/UT4MasterServer.Web/src/pages/Servers/data/game-mode-map.ts +++ b/UT4MasterServer.Web/src/pages/Servers/data/game-mode-map.ts @@ -1,16 +1,16 @@ import { GameMode } from '../enums/game-mode'; export const gameModeMap: Record = { - [GameMode.duel]: 'Duel', - [GameMode.duel2]: 'Duel', - [GameMode.deathmatch]: 'Deathmatch', - [GameMode.ctf]: 'Capture the Flag', - [GameMode.blitz]: 'Blitz', - [GameMode.empty]: 'Empty', - [GameMode.hub]: 'Hub', - [GameMode.siege]: 'Siege', - [GameMode.teamDeathmatch]: 'Team Deathmatch', - [GameMode.showdown]: 'Showdown', - [GameMode.elimination]: 'Elimination', - [GameMode.bunnytrack]: 'Bunny Track' + [GameMode.duel]: 'Duel', + [GameMode.duel2]: 'Duel', + [GameMode.deathmatch]: 'Deathmatch', + [GameMode.ctf]: 'Capture the Flag', + [GameMode.blitz]: 'Blitz', + [GameMode.empty]: 'Empty', + [GameMode.hub]: 'Hub', + [GameMode.siege]: 'Siege', + [GameMode.teamDeathmatch]: 'Team Deathmatch', + [GameMode.showdown]: 'Showdown', + [GameMode.elimination]: 'Elimination', + [GameMode.bunnytrack]: 'Bunny Track' }; diff --git a/UT4MasterServer.Web/src/pages/Servers/data/get-servers-test-response.ts b/UT4MasterServer.Web/src/pages/Servers/data/get-servers-test-response.ts index 48bd4497..91a355b9 100644 --- a/UT4MasterServer.Web/src/pages/Servers/data/get-servers-test-response.ts +++ b/UT4MasterServer.Web/src/pages/Servers/data/get-servers-test-response.ts @@ -1,2212 +1,2212 @@ // Sample response from matchMakingRequest for testing export const getServersTestResponse = [ - { - id: '58b4a81e86f02de9c137e9975065bd45', - ownerId: '016308603903170C0024021D9A4E75BE', - ownerName: '[DS]nickut4host2-5178', - serverName: '[DS]nickut4host2-5178', - serverAddress: '74.91.126.228', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: "Narayana's Sniper Server ", - UT_SERVERMOTD_s: - 'Welcome!\n\nSniper Inn Gang ', - UT_MATCHDURATION_i: 89595, - UT_HUBGUID_s: 'FAE9D5A819E1CC7B41C7496A748901FA', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: 'FAE9D5A819E1CC7B41C7496A748901FA', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 5, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:10.218Z', - started: true - }, - { - id: 'f04a794bf2513b8b08e8a7102a577803', - ownerId: '038C7B5E35030B0C002703D9CE496BAE', - ownerName: '[DS]dallastn-25978', - serverName: '[DS]dallastn-25978', - serverAddress: '192.223.24.243', - serverPort: 8000, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7788, - GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', - MAPNAME_s: 'DM-ASDF', - GAMENAME_s: 'Duel', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Duel on DM-ASDF ', - UT_SERVERMOTD_s: 'ut+ rules promode drools ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0165388E24090A09002A023A8E99A3FF', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '02EEDFA134030B0C0027033DCE37CBE9', - UT_GAMEINSTANCE_i: 1, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 2, - UT_MAXSPECTATORS_i: 3, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:12.838Z', - started: true - }, - { - id: '9e4bdadf1c776fe3b57dd9da255e19b5', - ownerId: '0163142F06030C0B002400C450058AFF', - ownerName: '[DS]zxcvps-2747928', - serverName: '[DS]zxcvps-2747928', - serverAddress: '80.96.156.110', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'unreal enjoyer JP ', - UT_SERVERMOTD_s: 'enjoying every minutes ', - UT_MATCHDURATION_i: 26693, - UT_HUBGUID_s: '01630BFA10031102000A01E817F6B17F', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '01630BFA10031102000A01E817F6B17F', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:21.456Z', - started: true - }, - { - id: '7c56fc099184df9beed4091e67d5a241', - ownerId: '01635B950C03000E00060283A2F11D63', - ownerName: '[DS]dallasepic-333974', - serverName: '[DS]dallasepic-333974', - serverAddress: '145.40.77.37', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERINSTANCEGUID_s: '03474C2E3802171A001F01F82225A807', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: '?Name=Player?VersionCheck=1?Game=Lobby', - UT_MAXPLAYERS_i: 100, - UT_MAXSPECTATORS_i: 7, - UT_SERVERNAME_s: 'Unreal Carnage (Dallas) ', - UT_SERVERMOTD_s: - 'Unreal Carnage\n\n(Dallas)\n\n\nLast Hub Update: 03-12-23\n\nJoin The Unreal Carnage Discord Community!\n\ndiscord.gg/mje6YkJ\n\nAdmins: Maul, Power, Kurrgan, MoxNix\n\n\nUnreal Carnage.com ', - UT_SERVERTRUSTLEVEL_i: 0, - UT_PLAYERONLINE_i: 1, - UU_NUMPLAYERS_i: 10, - UU_CUSTOMMATCHNAMES_s: - "530903AC1403130E002703CF624F09C1:Hurry and Kill Me\n090AFD240A03130E002B02D2141B7F11:HăvØć's Game", - UT_NUMMATCHES_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:24.752Z', - started: true - }, - { - id: '6e055cac38ca57e55ba6cfdee52f712b', - ownerId: '0334F4A10B03160C0022003C945F57CD', - ownerName: '[DS]1076069-ce27489.tmweb.ru-32537', - serverName: '[DS]1076069-ce27489.tmweb.ru-32537', - serverAddress: '85.193.86.224', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', - MAPNAME_s: 'DM-Training-Elite', - GAMENAME_s: 'Duel', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'men.com ', - UT_SERVERMOTD_s: "Let's play on new maps and suck some dicks ", - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '02EBE2AB04060C06001503BDD5E87853', - UT_REDTEAMSIZE_i: 1, - UT_BLUETEAMSIZE_i: 1, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '02EBE2AB04060C06001503BDD5E87853', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 1, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 2, - UT_MAXSPECTATORS_i: 0, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:17.461Z', - started: true - }, - { - id: 'ce83e6105757d53178cf6e112240b29b', - ownerId: '069B31913603060E0010005B2C87E075', - ownerName: '[DS]8de11109-97a0-4ef7-bc93-ee2e7cd7cbd4-13', - serverName: '[DS]8de11109-97a0-4ef7-bc93-ee2e7cd7cbd4-13', - serverAddress: '5.9.117.177', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-Chill', - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Abgematzt ', - UT_SERVERMOTD_s: 'Denk Euch was schickes aus ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0698E2AF1203140C000001A95FE3F12B', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0698E2AF1203140C000001A95FE3F12B', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 1, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 15, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:27.685Z', - started: true - }, - { - id: '80602dfb1c9f1078d70b4156bcb9c10e', - ownerId: '0163BC450603070E0016037947360AF3', - ownerName: '[DS]gh-ur-178.gamerzhost.net-17909', - serverName: '[DS]gh-ur-178.gamerzhost.net-17909', - serverAddress: '194.26.183.170', - serverPort: 7877, - maxPublicPlayers: 10000, - openPublicPlayers: 9997, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERINSTANCEGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: '?Name=Player?VersionCheck=1?Game=Lobby', - UT_MAXPLAYERS_i: 60, - UT_MAXSPECTATORS_i: 2, - UT_SERVERNAME_s: '[PHX] PHOENIX GERMANY ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\nPHX on Discord, connect to discord.gg/d9akhwz\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\nWe do not accept insults, rage quits or midgame team changes!\nPlayers who not accept the rules will be kicked without warning\nPlay fair and have FUN! ', - UT_SERVERTRUSTLEVEL_i: 1, - UT_PLAYERONLINE_i: 3, - UU_NUMPLAYERS_i: 34, - UU_CUSTOMMATCHNAMES_s: - "636C8FD51003140E002700D26A0F9683:59915170's Game\n5A816BEB2803140E002F00F6801156A2:antorax's Game\n3060470C1903140E0022028958BDF0D1:xxcxx\n097A45F42C03140E002802DC6F56481E:Vo3's Game\n02EEF81B1F03140E002802D16E8FC1C3:59x-'s Game", - UT_NUMMATCHES_i: 5 - }, - publicPlayers: [ - '50b47334f1a6731a3063a31240235228', - '82a1194dd934488ea2b9ddacdf2cc50b', - '6f106b11a66f918a48be1194c96b58b3' - ], - privatePlayers: [], - totalPlayers: 3, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:10.860Z', - started: true - }, - { - id: '54e7baadf2b7a374d0b9c1739d6393ed', - ownerId: '0163A14E3503070E000503B09F3B67C1', - ownerName: '[DS]ut4-vinthill-46694', - serverName: '[DS]ut4-vinthill-46694', - serverAddress: '51.81.57.70', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 9999, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Warehouse Party (Vint Hill, VA) ', - UT_SERVERMOTD_s: - 'Elimination, Instagib, BunnyTrack, and Duel\nBig THANK YOU to all the UT4 content creators!!\nProWeapons, UT+, Instagib mods, and more!\n\nHosted in Vint Hill, VA (Provider=OVHCloud.com)\nAdmin: mat@zavage.net or zavage#2933\n\nConsole Commands:\nmutate hitsounds\nmutate teamskins\nmutate weaponskins\n\nzavage.net/ut4\n\nXeon-E 2274G 4c\\8t 4->4.9GHz, 32G, raid nvme, 1 Gbps, 120 Tick (exp, 108-144) ', - UT_MATCHDURATION_i: 15707, - UT_HUBGUID_s: '0162EA662B090C1A003200A54AE2A951', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 1, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0162EA662B090C1A003200A54AE2A951', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 75, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: ['1f67af2e5f36f70e322cbc27f59594dd'], - privatePlayers: [], - totalPlayers: 1, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:19.349Z', - started: true - }, - { - id: '7a68f94e34511141b56a166fe0ac8536', - ownerId: '0163314D3B030E0E000902EADF95367A', - ownerName: '[DS]vm76429-110985', - serverName: '[DS]vm76429-110985', - serverAddress: '141.95.15.179', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 9999, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'UnrealPUGs - DE3 ', - UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', - UT_MATCHDURATION_i: 415, - UT_HUBGUID_s: '0162BC620E031402000201E904D07841', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 1, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0162BC620E031402000201E904D07841', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 50, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: ['d397de92699aa5200cdadb5027bdcd13'], - privatePlayers: [], - totalPlayers: 1, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:16.382Z', - started: true - }, - { - id: '433af222bb04cf73a3548c21bb58c06a', - ownerId: '881B3FB44C9C8F81DA0BFB84E010D933', - ownerName: '[DS]DESKTOP-4AKGM1D-15004', - serverName: '[DS]DESKTOP-4AKGM1D-15004', - serverAddress: '86.18.156.47', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-Spacer', - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: "te$co's test server ", - UT_SERVERMOTD_s: 'Have fun! ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '70C36843456956B3CEF526A50EA45CDF', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '70C36843456956B3CEF526A50EA45CDF', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 16, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:15.840Z', - started: true - }, - { - id: 'adf44c559689db182623c6855851bf4b', - ownerId: '031024A23303110E000401D050F01D58', - ownerName: '[DS]vm76429-114229', - serverName: '[DS]vm76429-114229', - serverAddress: '141.95.15.179', - serverPort: 8000, - maxPublicPlayers: 10000, - openPublicPlayers: 9998, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7788, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-EraseV2_a07', - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Deathmatch on DM-EraseV2_a07 ', - UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', - UT_MATCHDURATION_i: 1794, - UT_HUBGUID_s: '0162BC620E031402000201E904D07841', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 2, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: 'B3B5B7702C03140E002102273BF7D3F8', - UT_GAMEINSTANCE_i: 1, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 5, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [ - '6ede6517bdc75d0f5784bac05358ac7e', - 'c8285c9eb62f531845079f6baae60cd0' - ], - privatePlayers: [], - totalPlayers: 2, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:14.769Z', - started: true - }, - { - id: 'cc65e5db1599c29e9990087171d37894', - ownerId: '01639B1D10030C0E001D02FBBA909316', - ownerName: '[DS]rodut4-10732', - serverName: '[DS]rodut4-10732', - serverAddress: '74.91.125.4', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Unreal Carnage (Chicago) ', - UT_SERVERMOTD_s: - 'Unreal Carnage\n\n(Chicago)\n\n\nLast Hub Update: 28-Jan-23\n\nJoin The Unreal Carnage Discord Community!\n\ndiscord.gg/mje6YkJ\n\nAdmins: Maul, Power, Kurrgan, MoxNix\n\n\nUnreal Carnage.com ', - UT_MATCHDURATION_i: 0, - UT_MATCHELAPSEDTIME_i: 0, - UT_HUBGUID_s: 'C0DB2594499F03E55FDADDB80886094A', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: 'C0DB2594499F03E55FDADDB80886094A', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 60, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UU_i: 1, - UT_SERVERTRUSTLEVEL_i: 0 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:09.498Z', - started: true - }, - { - id: '444c4a9b9ba1809f30bcdeec489f9efc', - ownerId: '0163A8131003110E002900AE3027AE7E', - ownerName: '[DS]localhost-5652', - serverName: '[DS]localhost-5652', - serverAddress: '172.105.79.12', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 9998, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Unreal-Battles - DE ', - UT_SERVERMOTD_s: - 'Unreal-Battles\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\n ', - UT_MATCHDURATION_i: 6, - UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 2, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '016207950301101C000800E1A3EE2D08', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 3, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [ - 'bc47955d1b842047742c6e8131621efc', - '2e79452d8e5a9f88e8ae8c7c8b4a8666' - ], - privatePlayers: [], - totalPlayers: 2, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:32.550Z', - started: true - }, - { - id: '83dc49bc6eea3b7dab85e9a799c865f2', - ownerId: '038463771003110E003900B626B3B1BD', - ownerName: '[DS]gh-ur-178.gamerzhost.net-27229', - serverName: '[DS]gh-ur-178.gamerzhost.net-27229', - serverAddress: '194.26.183.170', - serverPort: 8003, - maxPublicPlayers: 10000, - openPublicPlayers: 9990, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7790, - UU_i: 1, - GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', - MAPNAME_s: 'DM-DeckTest', - UT_SERVERINSTANCEGUID_s: '636C8FD51003140E002700D26A0F9683', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=10?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?ART=ELI4?HostId=c436b72fd20661adafe8b4a1b70804fe?InstanceID=11?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', - UT_MAXPLAYERS_i: 10, - UT_MAXSPECTATORS_i: 2, - GAMENAME_s: 'Absolute Elimination v1.742', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', - UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-DeckTest ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', - UT_MATCHDURATION_i: 2148, - UT_MATCHELAPSEDTIME_i: 248, - UT_MATCHSTATE_s: 'InProgress', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERTRUSTLEVEL_i: 1, - UU_TEAMSIZES_s: '5,5', - UU_TEAMSCORES_s: '2,1', - UT_PLAYERONLINE_i: 10, - UU_NUMPLAYERS_i: 10, - UT_SPECTATORSONLINE_i: 1 - }, - publicPlayers: [ - '6ec7c6d8be7c0ac6ad7c31df3a6bee4a', - '9ccdc2e4a3088643a22f94316c7f28bb', - '80069bb4a201d0559ac0a6f7e3fa794c', - '8aff4d988de6e1d639dbabc9e7bd6c0e', - '6857310b5b05977b0da33840c9ed4d63', - '62344154159e52b295bb2f120b37c95d', - 'f4e96e0b7ea78a78c64050fd6590404c', - '3bb15543d14ed55322fc4e59fcc51607', - '81ab6baf1e70f21ce4d9be771e72b70c', - '2a42ae2248c4036f86ea0aaa9077611e' - ], - privatePlayers: [], - totalPlayers: 10, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:21.808Z', - started: true - }, - { - id: '01dfc17c83d5cbb1763342b517e57654', - ownerId: '016687271F030D0E000C012C55361328', - ownerName: '[DS]utpugatl-124395', - serverName: '[DS]utpugatl-124395', - serverAddress: '104.153.105.63', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-EntryRank', - UT_SERVERNAME_s: 'UTPugs Chicago ', - UT_SERVERMOTD_s: 'ut+ rules promode drools ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0165F43010091209002C00834925F66B', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0165F43010091209002C00834925F66B', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:15.693Z', - started: true - }, - { - id: '135dd04ffcf7ed6cdd64623c16987a10', - ownerId: '016649F507030A0E001600DC7789EEA0', - ownerName: '[DS]utwest1-407676', - serverName: '[DS]utwest1-407676', - serverAddress: '162.248.94.209', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-EntryRank', - UT_SERVERNAME_s: 'Fragworx Seattle ', - UT_SERVERMOTD_s: - 'Elim & duel. UTpugs.us for competitive gameplay. ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '01627EF62C010013002500EAD8C49F27', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '01627EF62C010013002500EAD8C49F27', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:14.914Z', - started: true - }, - { - id: '447fddebceb4ba91a7d698988ae74b3d', - ownerId: '043642100403110E001B01E8D9E52CC7', - ownerName: '[DS]localhost-1719906', - serverName: '[DS]localhost-1719906', - serverAddress: '139.177.177.71', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', - MAPNAME_s: 'FR-MeltDown', - GAMENAME_s: 'Blitz', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: "Fairlight's Classic Blitz 24/7 ", - UT_SERVERMOTD_s: "Fairlight's Classic Blitz 24/7 ", - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '043013872502141B003B003EC1C0143D', - UT_REDTEAMSIZE_i: 3, - UT_BLUETEAMSIZE_i: 3, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '043013872502141B003B003EC1C0143D', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 10, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:23.231Z', - started: true - }, - { - id: '0f19a11db6401706e4dbca26d6d5b014', - ownerId: '0163F3372E03110E001E002BA503E1F7', - ownerName: '[DS]localhost-3263', - serverName: '[DS]localhost-3263', - serverAddress: '139.162.207.208', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Unreal-Battles - UK ', - UT_SERVERMOTD_s: - 'Unreal-Battles\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\n ', - UT_MATCHDURATION_i: 3147, - UT_MATCHELAPSEDTIME_i: 5119, - UT_HUBGUID_s: '0164D4CE2B0A020D001E02F090D151AF', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0164D4CE2B0A020D001E02F090D151AF', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UU_i: 1, - UT_SERVERTRUSTLEVEL_i: 0, - UU_NUMPLAYERS_i: 1, - UU_CUSTOMMATCHNAMES_s: "04F177DF2F03120E001101723EA0892F:SkywalkeR's Game" - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:09.209Z', - started: true - }, - { - id: 'd18377946b4e92040c12cb3189f6ca04', - ownerId: '77342CDC45B38F8B6083FB9071ED6D80', - ownerName: '[DS]Kasus-Server-8384', - serverName: '[DS]Kasus-Server-8384', - serverAddress: '82.155.204.100', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: '< K H U B > ', - UT_SERVERMOTD_s: - 'HUB running 24h!(for now)\nMore gamemodes/mutators available under costum match. \n\n\nAny problem, bug or request please refer to\nK.asus#5462 or discord.gg/h46HRG5 server\n\nHf ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: 'B3A64C7C4BAC1C05B20429AE01B7AB45', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: 'B3A64C7C4BAC1C05B20429AE01B7AB45', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:09.659Z', - started: true - }, - { - id: '8d71f57d3d7f448fc2d4928d02a09bfb', - ownerId: '02D69E6C1E03120E002B000DC3FFC04A', - ownerName: '[DS]gh-ur-178.gamerzhost.net-27830', - serverName: '[DS]gh-ur-178.gamerzhost.net-27830', - serverAddress: '194.26.183.170', - serverPort: 8004, - maxPublicPlayers: 10000, - openPublicPlayers: 9996, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7790, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-DeckTest', - UT_SERVERINSTANCEGUID_s: '5A816BEB2803140E002F00F6801156A2', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=5?TimeLimit=10?GoalScore=0?ForceNoBots=1?ART=?MaxSpectators=0?HostId=efba4604a9e313d18d64f8038875a743?InstanceID=13?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', - UT_MAXPLAYERS_i: 5, - UT_MAXSPECTATORS_i: 0, - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', - UT_SERVERNAME_s: 'Deathmatch on DM-DeckTest ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', - UT_MATCHDURATION_i: 0, - UT_MATCHELAPSEDTIME_i: 0, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERTRUSTLEVEL_i: 1, - UT_PLAYERONLINE_i: 4, - UU_NUMPLAYERS_i: 4, - UU_SOLOSCORES_s: '1,1,1,1' - }, - publicPlayers: [ - '7f1b74f6e68f96bf1fc460bb031af22a', - '48015af75b34707c9ff2a5d722959a91', - '7af19de56bd0637fde6a51371b7ca72a', - 'b4be1e4e572e98aacf0b9300538b2b3a' - ], - privatePlayers: [], - totalPlayers: 4, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:37.805Z', - started: true - }, - { - id: '74d7be52b5a68af122074b1204e26579', - ownerId: '049D5F762303120E0039008341150648', - ownerName: '[DS]localhost-6876', - serverName: '[DS]localhost-6876', - serverAddress: '172.105.79.12', - serverPort: 8001, - maxPublicPlayers: 10000, - openPublicPlayers: 9992, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7788, - GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', - MAPNAME_s: 'FR-Nexus_WIP1', - GAMENAME_s: 'Blitz', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Blitz on FR-Nexus_WIP1 ', - UT_SERVERMOTD_s: - 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', - UT_REDTEAMSIZE_i: 3, - UT_BLUETEAMSIZE_i: 5, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 8, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '32B026893903140E00310166D2F33ECD', - UT_GAMEINSTANCE_i: 1, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 22, - UT_MAXSPECTATORS_i: 3, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [ - '160e800e3d341cbad58e2a840ae70a75', - '2729f93563125a5507e6690ec340747d', - '222f5dea1e33da662d989a0750055910', - '47b64bd6b8245bb8aa540c32a33c2310', - '4f4ce22c7fb4ff6c92e1f0277f3dfb9c', - '21bc5a58badf8fcfa0101f25eee5871a', - '7600b7a9f9b33d6bed824c2cb700c7f6', - 'b065937fdb68afce487a27ecec7115f9' - ], - privatePlayers: [], - totalPlayers: 8, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:26.313Z', - started: true - }, - { - id: '8407b0626e65aa1754b2eb44f48d5c98', - ownerId: '038471A02C03130E000C01A4349B2437', - ownerName: '[DS]gh-ur-178.gamerzhost.net-28312', - serverName: '[DS]gh-ur-178.gamerzhost.net-28312', - serverAddress: '194.26.183.170', - serverPort: 8006, - maxPublicPlayers: 10000, - openPublicPlayers: 9992, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7791, - UU_i: 1, - GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', - MAPNAME_s: 'DM-Rankin-LE', - UT_SERVERINSTANCEGUID_s: '3060470C1903140E0022028958BDF0D1', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=8?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?ART=ELI3?HostId=aee6a6ffcc0b46c9692613aa6fe785b4?InstanceID=15?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', - UT_MAXPLAYERS_i: 8, - UT_MAXSPECTATORS_i: 2, - GAMENAME_s: 'Absolute Elimination v1.742', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', - UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-Rankin-LE ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', - UT_MATCHDURATION_i: 0, - UT_MATCHELAPSEDTIME_i: 0, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERTRUSTLEVEL_i: 1, - UU_TEAMSIZES_s: '4,4', - UU_TEAMSCORES_s: '0,0', - UT_PLAYERONLINE_i: 8, - UU_NUMPLAYERS_i: 8 - }, - publicPlayers: [ - 'c3492087bf962bb01a0f0cb2925625f1', - '5cf5fbc5b2b2022ec61781097df69571', - '9f8ebf118882dad47820ba4d70a7b9c4', - 'e2e4700f5f1da56f2f491de22e712b35', - '5c87e248a8e9ea34e8ac6715a4e1e641', - '1c86eedba5fd9680bf7111e3f24ab148', - '448496e1a8021dd6807a176838d11f15', - 'adc181511726d932a541641d9f3ddf6f' - ], - privatePlayers: [], - totalPlayers: 8, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:14.289Z', - started: true - }, - { - id: '61727a25e89d32a441200c66e569e626', - ownerId: '4351721646233F5D7A7D5783553A9ABA', - ownerName: '[DS]SATURN-150432', - serverName: '[DS]SATURN-150432', - serverAddress: '91.60.27.118', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: '(Unreal Clan Deutschland) UCD UT4 HUB (DE) ', - UT_SERVERMOTD_s: - 'UT4 UCD Gaming Hub\n\nBlitz Wars,Global StatsSQL v2, ESL, Assault + Assault 2.0 , Monthly Leaque, ELI, PRO Leaque, Match Creation Elapsed Time 120-140 s\n\nContact for Questions or other on Discord "https://discord.gg/Az4wXD5" ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '083F7A914B29C2CB0D11CBBF47D78524', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '083F7A914B29C2CB0D11CBBF47D78524', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 60, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:32.096Z', - started: true - }, - { - id: '85692add0a5e04c12212805ac7170644', - ownerId: 'DF16B41F442D347B2F525EA14043943D', - ownerName: '[DS]StLouis-W-792-E-9704', - serverName: '[DS]StLouis-W-792-E-9704', - serverAddress: '148.72.144.198', - serverPort: 18011, - maxPublicPlayers: 10000, - openPublicPlayers: 9999, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Area51 (St. Louis) - Donate @ a51stl.com ', - UT_SERVERMOTD_s: - "Area51\n\nIf you want this hub to stay online, donate securely at a51stl.com. Hub will go offline when money runs out.\nMore info & discord links @ a51stl.com\n\nHave fun. Be kind.\n\nMembers: Blimpo, ConX5, Cuzkey, de'pain, DREW-TANg, Numb, Ricochet, $ev, synister, tonyrayo, vulva ", - UT_MATCHDURATION_i: 355, - UT_HUBGUID_s: '1CB1BA3C486FADC79718CB98FF51E199', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 1, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '1CB1BA3C486FADC79718CB98FF51E199', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 30, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: ['b9fbd978111b0967155174e24599087f'], - privatePlayers: [], - totalPlayers: 1, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:22.319Z', - started: true - }, - { - id: '14110ff725e902953b0b92ac566bf8ac', - ownerId: '016306480D030E0E001B01AA675029BA', - ownerName: '[DS]DUSTSERVER-3188611', - serverName: '[DS]DUSTSERVER-3188611', - serverAddress: '64.255.105.84', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Bunnytracks NA ', - UT_SERVERMOTD_s: - 'NA Bunnytracks\nAdmin: Ransom\nBT Website & Discord: www.ut4bt.tk ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0162454019050408002702F5E8414A7E', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0162454019050408002702F5E8414A7E', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 100, - UT_MAXSPECTATORS_i: 32, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:15.666Z', - started: true - }, - { - id: '01d6b67b34c94c29283da86856a08556', - ownerId: '0166CF750403130E0028027DEA32D852', - ownerName: '[DS]vs-game1-13697', - serverName: '[DS]vs-game1-13697', - serverAddress: '51.15.146.0', - serverPort: 6777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: '[FBC & P!xs] - FR - Blitz and Assault ', - UT_SERVERMOTD_s: - 'P!xs & FBC\n\nAssault / Blitz customs maps available !\n\nLocated in Paris - Made with <3\n\nNeed assistance ? Looking for Lumo_FR or e_fr ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '02BD3FC52B080A18000D028CB163F105', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '02BD3FC52B080A18000D028CB163F105', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:18.680Z', - started: true - }, - { - id: '81d2d6e57b116b889e581f6a2f8bb90a', - ownerId: '0712789E0903120E002F0034A7A1B54B', - ownerName: '[DS]dallasepic-357850', - serverName: '[DS]dallasepic-357850', - serverAddress: '145.40.77.37', - serverPort: 8000, - maxPublicPlayers: 10000, - openPublicPlayers: 9993, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7791, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-Deck8_20180305', - UT_SERVERINSTANCEGUID_s: '530903AC1403130E002703CF624F09C1', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=12?MaxPlayerWait=80?TimeLimit=10?GoalScore=0?WTR=/Game/RestrictedAssets/Weapons/Minigun/BP_Minigun.BP_Minigun_C:/Game/ArmasUNG/Minigun/StingerMinigun-Elite.StingerMinigun-Elite_C,/Game/RestrictedAssets/Weapons/GrenadeLauncher/BP_GrenadeLauncher.BP_GrenadeLauncher_C:/Game/RestrictedAssets/Weapons/BioRifle/BP_BioRifle.BP_BioRifle_C?Mutator=WeaponReplacement,UTPlus,AntiCheatV2,UTPlusMovement?Difficulty=1?ART=UC_DM_HS?HostId=7b2117d70a609b4ae3a09232bfd66090?InstanceID=23?HostPort=14000?HubGUID=03474C2E3802171A001F01F82225A807?NextMap=1', - UT_MAXPLAYERS_i: 12, - UT_MAXSPECTATORS_i: 7, - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: - 'Global_StatSQL-v2,MutHitsounds,MutTeamSkins,NoWarmupHostKick,HiddenWeaponsUTPL,hostcommands,SetNetSpeed,Mut_LogoSplash_V2', - UT_SERVERNAME_s: 'Deathmatch on DM-Deck8_20180305 ', - UT_SERVERMOTD_s: - 'Unreal Carnage\\n\\n(Dallas)\\n\\n\\nLast Hub Update: 03-12-23\\n\\nJoin The Unreal Carnage Discord Community!\\n\\ndiscord.gg/mje6YkJ\\n\\nAdmins: Maul, Power, Kurrgan, MoxNix\\n\\n\\nUnreal Carnage.com ', - UT_MATCHDURATION_i: 736, - UT_MATCHELAPSEDTIME_i: 420, - UT_MATCHSTATE_s: 'InProgress', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '03474C2E3802171A001F01F82225A807', - UT_SERVERTRUSTLEVEL_i: 0, - UU_SOLOSCORES_s: '1,1,1,1,1,1,1,1', - UT_PLAYERONLINE_i: 7, - UU_NUMPLAYERS_i: 7 - }, - publicPlayers: [ - 'bf99c48ce3dc288e946a3e87cc4df98d', - '38837d6053ca0b51c5c666a1ae61fe52', - '055cfc6defeee4bf83e9d34ff95f1163', - '849d2f849dd96ba86478671464c5f442', - '50134cdb095ca10c331d9c77aeebf288', - '5b8738d3ad66a5b17edb582bc5292dc3', - '6ff45dbad00f8cc43b70e5c3ce1ac04d' - ], - privatePlayers: [], - totalPlayers: 7, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:24.746Z', - started: true - }, - { - id: '180e3298e48f1850acd1e0c75859775d', - ownerId: '0166DA6007030D0E003003BCAB2487F8', - ownerName: '[DS]utchi1-217931', - serverName: '[DS]utchi1-217931', - serverAddress: '74.91.115.195', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-EntryRank', - UT_SERVERNAME_s: 'Fragworx CHI ', - UT_SERVERMOTD_s: - 'Fragworx CHI\n\nElim and duels. UTpugs.us for competitive gameplay. ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '016526531A011118000901505ACE61EA', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '016526531A011118000901505ACE61EA', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 25, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:22.625Z', - started: true - }, - { - id: '9681e01f3283d516673731bb1cd99d00', - ownerId: '085A83351703130E00310145FA584007', - ownerName: '[DS]localhost-8168', - serverName: '[DS]localhost-8168', - serverAddress: '172.105.79.12', - serverPort: 8002, - maxPublicPlayers: 10000, - openPublicPlayers: 9996, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7789, - GAMEMODE_s: '/Script/UnrealTournament.UTCTFGameMode', - MAPNAME_s: 'CTF-Face', - GAMENAME_s: 'Capture the Flag', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Capture the Flag on CTF-Face ', - UT_SERVERMOTD_s: - 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', - UT_MATCHDURATION_i: 1811, - UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', - UT_REDTEAMSIZE_i: 4, - UT_BLUETEAMSIZE_i: 3, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 4, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0C2859A12403140E001A01A17F72892D', - UT_GAMEINSTANCE_i: 1, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 8, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [ - '60d9add85b717dcf9d4fdf5fa7444172', - 'e5e9e926f74e5b277cb504fcfd31c160', - '474940d2ab4955fa733e253262777b82', - '40272ea54aab34dcf7a702275b7d2e1f' - ], - privatePlayers: [], - totalPlayers: 4, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:27.394Z', - started: true - }, - { - id: '9fb57195a99eaa96a432d9e7b2a79b14', - ownerId: '0163EE370A03080F000202C97BF47623', - ownerName: '[DS]nz.gibblets.com-1566474', - serverName: '[DS]nz.gibblets.com-1566474', - serverAddress: '121.99.241.203', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Gibblets.com ~Shock and Rockets~ :) ', - UT_SERVERMOTD_s: - 'Gibblets\nUT4 NZ Hub\n "FragNights" every wednesday night, \n Join us on Discord @ Gibblets.com ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0162747830080F0E002C0349AD75FDEF', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0162747830080F0E002C0349AD75FDEF', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:12.253Z', - started: true - }, - { - id: '4516c6552f838648f2f8e1f8ede4074a', - ownerId: '0163267819030D0E00140074DBF8274A', - ownerName: '[DS]ut4-fremont.zavage.net-595072', - serverName: '[DS]ut4-fremont.zavage.net-595072', - serverAddress: '45.79.101.208', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Warehouse Party (Fremont, CA) ', - UT_SERVERMOTD_s: - 'Elimination, Instagib, BunnyTrack, and Duel\nBig THANK YOU to all the UT4 content creators!!\nProWeapons, UT+, Instagib mods, and more!\n\nHosted in Fremont, CA (Provider=Linode.com)\nAdmin: mat@zavage.net or zavage#2933\n\nConsole Commands:\nmutate hitsounds\nmutate teamskins\nmutate weaponskins\nmutate hidegun/showgun\n\nzavage.net/ut4\n\nShared EPYC 7501 2c 2->3GHz, 4G, 4 Gbps UL, 108 Tick (exp, 108-144) ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0162010804030B08002A00F9058B4E93', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0162010804030B08002A00F9058B4E93', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 75, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:25.400Z', - started: true - }, - { - id: '6f0deed28b575642329e816a4f217db0', - ownerId: '03846F660F03140E001600BD2D340219', - ownerName: '[DS]gh-ur-178.gamerzhost.net-29393', - serverName: '[DS]gh-ur-178.gamerzhost.net-29393', - serverAddress: '194.26.183.170', - serverPort: 8005, - maxPublicPlayers: 10000, - openPublicPlayers: 9992, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7791, - UU_i: 1, - GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', - MAPNAME_s: 'DM-EraseV2_a07', - UT_SERVERINSTANCEGUID_s: '097A45F42C03140E002802DC6F56481E', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=8?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?Difficulty=3?ART=ELI3?HostId=4bc6d64a3b8e2fc86b4335d44cd36302?InstanceID=18?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', - UT_MAXPLAYERS_i: 8, - UT_MAXSPECTATORS_i: 2, - GAMENAME_s: 'Absolute Elimination v1.742', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', - UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-EraseV2_a07 ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', - UT_MATCHDURATION_i: 2334, - UT_MATCHELAPSEDTIME_i: 22, - UT_MATCHSTATE_s: 'InProgress', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERTRUSTLEVEL_i: 1, - UU_TEAMSIZES_s: '4,4', - UU_TEAMSCORES_s: '0,0', - UT_PLAYERONLINE_i: 8, - UU_NUMPLAYERS_i: 8 - }, - publicPlayers: [ - 'aee6a6ffcc0b46c9692613aa6fe785b4', - '4bc6d64a3b8e2fc86b4335d44cd36302', - '40ac0567a1063f3698709e5d9179e48c', - '2f2ca93ceb7f56c14b855888fbb4713e', - '081081aaad4ed765c01dbb1e36f204f3', - '7383265b36b66cc7e32dbc5212b58135', - '5d39bf122fa53d82e439b96cb1bfbc0e', - '094bd4cfb2f20da9435592e4c1666f5b' - ], - privatePlayers: [], - totalPlayers: 8, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:19.133Z', - started: true - }, - { - id: '5b62e6f85dae8d5b4230dd363cdc5d85', - ownerId: '045CBCD40D03130E001B019BDB0C08B9', - ownerName: '[DS]dallasepic-358453', - serverName: '[DS]dallasepic-358453', - serverAddress: '145.40.77.37', - serverPort: 8001, - maxPublicPlayers: 10000, - openPublicPlayers: 9997, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7792, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', - MAPNAME_s: 'DM-1on1-Roughinery', - UT_SERVERINSTANCEGUID_s: '090AFD240A03130E002B02D2141B7F11', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=6?TimeLimit=10?GoalScore=0?WTR=/Game/RestrictedAssets/Weapons/Sniper/BP_Sniper.BP_Sniper_C:/Game/ArmasUNG/Sniper/Sniper-Elite.Sniper-Elite_C,/Game/RestrictedAssets/Weapons/ImpactHammer/BP_ImpactHammer.BP_ImpactHammer_C:/Game/ALTS/ALTSDummyWeapon.ALTSDummyWeapon_C,/Game/RestrictedAssets/Weapons/Flak/BP_FlakCannon.BP_FlakCannon_C:/Game/Proctf/Weapons/Proctf/Weapons/bp2_Orig_FlakCannon.bp2_Orig_FlakCannon_C,/Game/RestrictedAssets/Weapons/RocketLauncher/BP_RocketLauncher.BP_RocketLauncher_C:/Game/ProMode/Weapons/Pro_RocketLauncher.Pro_RocketLauncher_C?mutator=UTPlusMovement,MutAddVotingMod,AntiCheatV2,HWIDChecker,WeaponReplacement?ForceNoBots=1?ART=?HostId=f0be4ab0a6220bf56e41048c7349677a?InstanceID=24?HostPort=14000?HubGUID=03474C2E3802171A001F01F82225A807?NextMap=1', - UT_MAXPLAYERS_i: 6, - UT_MAXSPECTATORS_i: 7, - GAMENAME_s: 'Deathmatch', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: - 'Global_StatSQL-v2,MutHitsounds,MutTeamSkins,NoWarmupHostKick,HiddenWeaponsUTPL,hostcommands,SetNetSpeed,Mut_LogoSplash_V2', - UT_SERVERNAME_s: 'Deathmatch on DM-1on1-Roughinery ', - UT_SERVERMOTD_s: - 'Unreal Carnage\\n\\n(Dallas)\\n\\n\\nLast Hub Update: 03-12-23\\n\\nJoin The Unreal Carnage Discord Community!\\n\\ndiscord.gg/mje6YkJ\\n\\nAdmins: Maul, Power, Kurrgan, MoxNix\\n\\n\\nUnreal Carnage.com ', - UT_MATCHDURATION_i: 0, - UT_MATCHELAPSEDTIME_i: 0, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '03474C2E3802171A001F01F82225A807', - UT_SERVERTRUSTLEVEL_i: 0, - UT_PLAYERONLINE_i: 3, - UU_NUMPLAYERS_i: 3, - UU_SOLOSCORES_s: '1,1,1' - }, - publicPlayers: [ - 'b0de838267bf93e58faf6bb52c064996', - 'f0be4ab0a6220bf56e41048c7349677a', - 'c6d83e8aa5a58f9ff6a9cc17bb1181d3' - ], - privatePlayers: [], - totalPlayers: 3, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:30.630Z', - started: true - }, - { - id: 'a2f0ee06bf90694196dc3e6276b33cd0', - ownerId: '022E157613030C0E001E01F8BE4DE9D8', - ownerName: '[DS]rodut4-10755', - serverName: '[DS]rodut4-10755', - serverAddress: '74.91.125.4', - serverPort: 7778, - maxPublicPlayers: 10, - openPublicPlayers: 10, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - REGION_s: 'NA', - UT_RANKED_i: 1, - GAMEMODE_s: 'EMPTY', - QOS_i: 1, - BEACONPORT_i: 7788, - UT_SERVERTRUSTLEVEL_i: 0 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: false, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:14.919Z', - started: false - }, - { - id: '1029bb3819c90451f58955dec0faa076', - ownerId: '022EFF9619030C0E001E003EBEA2B8E5', - ownerName: '[DS]rodut4-10767', - serverName: '[DS]rodut4-10767', - serverAddress: '74.91.125.4', - serverPort: 7779, - maxPublicPlayers: 10, - openPublicPlayers: 10, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - REGION_s: 'NA', - UT_RANKED_i: 1, - GAMEMODE_s: 'EMPTY', - QOS_i: 1, - BEACONPORT_i: 7789, - UT_SERVERTRUSTLEVEL_i: 0 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: false, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:22.301Z', - started: false - }, - { - id: '14783d4a237a5e3944a645abe7c2d26b', - ownerId: '499FB180470A23D09D4715BDC2667554', - ownerName: '[DS]BOOTCAMP-Jason-9184', - serverName: '[DS]BOOTCAMP-Jason-9184', - serverAddress: '42.2.158.18', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'Unreal Spielen (Hong Kong) ', - UT_SERVERMOTD_s: - 'Hong Kong (Asia) Hub featuring UT+! Hosted by Jwells uh huh (Discord: Jeroos#5365) \nDownload all content -> bit.ly/unrealpak ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '8817C877410383C971FF11B221DAB8F8', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '8817C877410383C971FF11B221DAB8F8', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 2 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:16.109Z', - started: true - }, - { - id: '460da4abd60430f2c8ed017e412c5baa', - ownerId: '0166B71E0F030F0E00220370501FADE3', - ownerName: '[DS]dallastn-32358', - serverName: '[DS]dallastn-32358', - serverAddress: '192.223.24.243', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-EntryRank', - UT_SERVERNAME_s: 'UTPugs NYC ', - UT_SERVERMOTD_s: 'ut+ rules promode drools ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '0165388E24090A09002A023A8E99A3FF', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '0165388E24090A09002A023A8E99A3FF', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 200, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:31.855Z', - started: true - }, - { - id: '932edd0bbe52682b3534d19e5d5a81b0', - ownerId: '01630F183403140E00240363597B1CBC', - ownerName: '[DS]lvps83-169-37-51.dedicated.hosteurope.de-1961', - serverName: '[DS]lvps83-169-37-51.dedicated.hosteurope.de-1961', - serverAddress: '83.169.37.51', - serverPort: 7777, - maxPublicPlayers: 10000, - openPublicPlayers: 10000, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7787, - GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', - MAPNAME_s: 'UT-Entry', - UT_SERVERNAME_s: 'UnrealPUGs - DE2 ', - UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', - UT_MATCHDURATION_i: 0, - UT_HUBGUID_s: '01627F081E020D1A000300F9269E1268', - UT_REDTEAMSIZE_i: 0, - UT_BLUETEAMSIZE_i: 0, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 0, - UT_SPECTATORSONLINE_i: 0, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '01627F081E020D1A000300F9269E1268', - UT_GAMEINSTANCE_i: 0, - UT_SERVERFLAGS_i: 0, - UT_NUMMATCHES_i: 0, - UT_MAXPLAYERS_i: 30, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:17.688Z', - started: true - }, - { - id: '2465cf78c19c19ff470513e6c651bb14', - ownerId: '04775A4D2B03140E002701C8AE5BD308', - ownerName: '[DS]localhost-10194', - serverName: '[DS]localhost-10194', - serverAddress: '172.105.79.12', - serverPort: 8003, - maxPublicPlayers: 10000, - openPublicPlayers: 9989, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7790, - GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', - MAPNAME_s: 'FR-Heist', - GAMENAME_s: 'Blitz', - UT_MATCHELO_i: 0, - UT_SERVERNAME_s: 'Blitz on FR-Heist ', - UT_SERVERMOTD_s: - 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', - UT_MATCHDURATION_i: 509, - UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', - UT_REDTEAMSIZE_i: 5, - UT_BLUETEAMSIZE_i: 5, - UT_TRAININGGROUND_b: false, - UT_MINELO_i: 0, - UT_MAXELO_i: 0, - UT_PLAYERONLINE_i: 10, - UT_SPECTATORSONLINE_i: 1, - UT_SERVERVERSION_s: '3525360', - UT_SERVERINSTANCEGUID_s: '045F73B62B03140E002700C3AE57D14C', - UT_GAMEINSTANCE_i: 1, - UT_SERVERFLAGS_i: 1, - UT_NUMMATCHES_i: 1, - UT_MAXPLAYERS_i: 10, - UT_MAXSPECTATORS_i: 7, - UT_MATCHSTATE_s: 'InProgress', - UT_SERVERTRUSTLEVEL_i: 1 - }, - publicPlayers: [ - '11fa8eb51fd360e99426ac8ada3d8d23', - 'bd1c1e11a4a4929d8eb49107f489b37f', - 'ca499ac65b73c4dabc71dd7559b760bc', - 'b868a180354e98b87d5d2719d0c65c75', - 'ae8c9922fde698b205025bb270c6483e', - '430b5fe7c785800970355f15cb1190c8', - '1ea5cc2f2b717c56371b91317665c553', - 'e232d8e4a70e1d67e2c09632696d4f80', - '5631182438812d9eb15d176e463f4a9d', - 'd3be12a627ec591f2cb6a5aef1f44f7c', - 'f6c149d9092b924b9080f7cd8708fd05' - ], - privatePlayers: [], - totalPlayers: 11, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:13.710Z', - started: true - }, - { - id: '9d6de6d3e8431edef761ba99b6b8dfea', - ownerId: '022EFBB20F03000E0007006BA6AA309C', - ownerName: '[DS]dallasepic-334001', - serverName: '[DS]dallasepic-334001', - serverAddress: '145.40.77.37', - serverPort: 7778, - maxPublicPlayers: 10, - openPublicPlayers: 10, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - REGION_s: 'NA', - UT_RANKED_i: 1, - GAMEMODE_s: 'EMPTY', - QOS_i: 1, - BEACONPORT_i: 7788, - UT_SERVERTRUSTLEVEL_i: 0 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: false, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:31.100Z', - started: false - }, - { - id: 'a1181b8f20a78e01f8843103d64eadff', - ownerId: '022EBC2D1303000E0007038002D88C6D', - ownerName: '[DS]dallasepic-334015', - serverName: '[DS]dallasepic-334015', - serverAddress: '145.40.77.37', - serverPort: 7779, - maxPublicPlayers: 10, - openPublicPlayers: 10, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - REGION_s: 'NA', - UT_RANKED_i: 1, - GAMEMODE_s: 'EMPTY', - QOS_i: 1, - BEACONPORT_i: 7789, - UT_SERVERTRUSTLEVEL_i: 0 - }, - publicPlayers: [], - privatePlayers: [], - totalPlayers: 0, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: false, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:31.656Z', - started: false - }, - { - id: 'f70a76ad7e118017b16b89074e1b2770', - ownerId: '0370016B2003140E002800566E955DFF', - ownerName: '[DS]gh-ur-178.gamerzhost.net-29670', - serverName: '[DS]gh-ur-178.gamerzhost.net-29670', - serverAddress: '194.26.183.170', - serverPort: 8007, - maxPublicPlayers: 10000, - openPublicPlayers: 9999, - maxPrivatePlayers: 0, - openPrivatePlayers: 0, - attributes: { - BEACONPORT_i: 7792, - UU_i: 1, - GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', - MAPNAME_s: 'DM-ASDF', - UT_SERVERINSTANCEGUID_s: '02EEF81B1F03140E002802D16E8FC1C3', - UT_SERVERVERSION_s: '3525360', - UU_GAMEOPTIONS_s: - '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDuelGame?MaxPlayers=2?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=0?TimeLimit=10?WTR=/Game/RestrictedAssets/Weapons/GrenadeLauncher/BP_GrenadeLauncher.BP_GrenadeLauncher_C:/Game/RestrictedAssets/Weapons/BioRifle/BP_BioRifle.BP_BioRifle_C?mutator=WeaponReplacement,WeaponsStayOff,FriendlyFire,NoSpawnProtectionMutator,NoPickupTimerMutator,AddImpactHammer,MutHitsounds,MutTeamSkins,CustomHUD,CompetitivePickups,HiddenWeaponsUTPL,UTPLArmour,AutoPause,WarmupPlus?ForceRespawn=1?BalanceTeams=false?ForceNoBots=1?RequireFull=1?MaxSpectators=3?Difficulty=7?ART=UTPL1?HostId=9e54eb7b3f7d1967c9762e4614c054e1?InstanceID=19?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069', - UT_MAXPLAYERS_i: 2, - UT_MAXSPECTATORS_i: 3, - GAMENAME_s: 'Duel', - UT_MATCHELO_i: 0, - UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', - UT_SERVERNAME_s: 'Duel on DM-ASDF ', - UT_SERVERMOTD_s: - 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', - UT_MATCHDURATION_i: 0, - UT_MATCHELAPSEDTIME_i: 0, - UT_MATCHSTATE_s: 'WaitingToStart', - UT_GAMEINSTANCE_i: 1, - UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', - UT_SERVERTRUSTLEVEL_i: 1, - UU_TEAMSIZES_s: '1,0', - UU_TEAMSCORES_s: '0,0', - UT_PLAYERONLINE_i: 1, - UU_NUMPLAYERS_i: 1 - }, - publicPlayers: ['9e54eb7b3f7d1967c9762e4614c054e1'], - privatePlayers: [], - totalPlayers: 1, - allowJoinInProgress: true, - shouldAdvertise: true, - isDedicated: true, - usesStats: false, - allowInvites: true, - usesPresence: false, - allowJoinViaPresence: true, - allowJoinViaPresenceFriendsOnly: false, - buildUniqueId: '256652735', - lastUpdated: '2023-03-14T19:50:12.357Z', - started: true - } + { + id: '58b4a81e86f02de9c137e9975065bd45', + ownerId: '016308603903170C0024021D9A4E75BE', + ownerName: '[DS]nickut4host2-5178', + serverName: '[DS]nickut4host2-5178', + serverAddress: '74.91.126.228', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: "Narayana's Sniper Server ", + UT_SERVERMOTD_s: + 'Welcome!\n\nSniper Inn Gang ', + UT_MATCHDURATION_i: 89595, + UT_HUBGUID_s: 'FAE9D5A819E1CC7B41C7496A748901FA', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: 'FAE9D5A819E1CC7B41C7496A748901FA', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 5, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:10.218Z', + started: true + }, + { + id: 'f04a794bf2513b8b08e8a7102a577803', + ownerId: '038C7B5E35030B0C002703D9CE496BAE', + ownerName: '[DS]dallastn-25978', + serverName: '[DS]dallastn-25978', + serverAddress: '192.223.24.243', + serverPort: 8000, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7788, + GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', + MAPNAME_s: 'DM-ASDF', + GAMENAME_s: 'Duel', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Duel on DM-ASDF ', + UT_SERVERMOTD_s: 'ut+ rules promode drools ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0165388E24090A09002A023A8E99A3FF', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '02EEDFA134030B0C0027033DCE37CBE9', + UT_GAMEINSTANCE_i: 1, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 2, + UT_MAXSPECTATORS_i: 3, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:12.838Z', + started: true + }, + { + id: '9e4bdadf1c776fe3b57dd9da255e19b5', + ownerId: '0163142F06030C0B002400C450058AFF', + ownerName: '[DS]zxcvps-2747928', + serverName: '[DS]zxcvps-2747928', + serverAddress: '80.96.156.110', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'unreal enjoyer JP ', + UT_SERVERMOTD_s: 'enjoying every minutes ', + UT_MATCHDURATION_i: 26693, + UT_HUBGUID_s: '01630BFA10031102000A01E817F6B17F', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '01630BFA10031102000A01E817F6B17F', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:21.456Z', + started: true + }, + { + id: '7c56fc099184df9beed4091e67d5a241', + ownerId: '01635B950C03000E00060283A2F11D63', + ownerName: '[DS]dallasepic-333974', + serverName: '[DS]dallasepic-333974', + serverAddress: '145.40.77.37', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERINSTANCEGUID_s: '03474C2E3802171A001F01F82225A807', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: '?Name=Player?VersionCheck=1?Game=Lobby', + UT_MAXPLAYERS_i: 100, + UT_MAXSPECTATORS_i: 7, + UT_SERVERNAME_s: 'Unreal Carnage (Dallas) ', + UT_SERVERMOTD_s: + 'Unreal Carnage\n\n(Dallas)\n\n\nLast Hub Update: 03-12-23\n\nJoin The Unreal Carnage Discord Community!\n\ndiscord.gg/mje6YkJ\n\nAdmins: Maul, Power, Kurrgan, MoxNix\n\n\nUnreal Carnage.com ', + UT_SERVERTRUSTLEVEL_i: 0, + UT_PLAYERONLINE_i: 1, + UU_NUMPLAYERS_i: 10, + UU_CUSTOMMATCHNAMES_s: + "530903AC1403130E002703CF624F09C1:Hurry and Kill Me\n090AFD240A03130E002B02D2141B7F11:HăvØć's Game", + UT_NUMMATCHES_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:24.752Z', + started: true + }, + { + id: '6e055cac38ca57e55ba6cfdee52f712b', + ownerId: '0334F4A10B03160C0022003C945F57CD', + ownerName: '[DS]1076069-ce27489.tmweb.ru-32537', + serverName: '[DS]1076069-ce27489.tmweb.ru-32537', + serverAddress: '85.193.86.224', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', + MAPNAME_s: 'DM-Training-Elite', + GAMENAME_s: 'Duel', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'men.com ', + UT_SERVERMOTD_s: "Let's play on new maps and suck some dicks ", + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '02EBE2AB04060C06001503BDD5E87853', + UT_REDTEAMSIZE_i: 1, + UT_BLUETEAMSIZE_i: 1, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '02EBE2AB04060C06001503BDD5E87853', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 1, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 2, + UT_MAXSPECTATORS_i: 0, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:17.461Z', + started: true + }, + { + id: 'ce83e6105757d53178cf6e112240b29b', + ownerId: '069B31913603060E0010005B2C87E075', + ownerName: '[DS]8de11109-97a0-4ef7-bc93-ee2e7cd7cbd4-13', + serverName: '[DS]8de11109-97a0-4ef7-bc93-ee2e7cd7cbd4-13', + serverAddress: '5.9.117.177', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-Chill', + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Abgematzt ', + UT_SERVERMOTD_s: 'Denk Euch was schickes aus ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0698E2AF1203140C000001A95FE3F12B', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0698E2AF1203140C000001A95FE3F12B', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 1, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 15, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:27.685Z', + started: true + }, + { + id: '80602dfb1c9f1078d70b4156bcb9c10e', + ownerId: '0163BC450603070E0016037947360AF3', + ownerName: '[DS]gh-ur-178.gamerzhost.net-17909', + serverName: '[DS]gh-ur-178.gamerzhost.net-17909', + serverAddress: '194.26.183.170', + serverPort: 7877, + maxPublicPlayers: 10000, + openPublicPlayers: 9997, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERINSTANCEGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: '?Name=Player?VersionCheck=1?Game=Lobby', + UT_MAXPLAYERS_i: 60, + UT_MAXSPECTATORS_i: 2, + UT_SERVERNAME_s: '[PHX] PHOENIX GERMANY ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\nPHX on Discord, connect to discord.gg/d9akhwz\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\nWe do not accept insults, rage quits or midgame team changes!\nPlayers who not accept the rules will be kicked without warning\nPlay fair and have FUN! ', + UT_SERVERTRUSTLEVEL_i: 1, + UT_PLAYERONLINE_i: 3, + UU_NUMPLAYERS_i: 34, + UU_CUSTOMMATCHNAMES_s: + "636C8FD51003140E002700D26A0F9683:59915170's Game\n5A816BEB2803140E002F00F6801156A2:antorax's Game\n3060470C1903140E0022028958BDF0D1:xxcxx\n097A45F42C03140E002802DC6F56481E:Vo3's Game\n02EEF81B1F03140E002802D16E8FC1C3:59x-'s Game", + UT_NUMMATCHES_i: 5 + }, + publicPlayers: [ + '50b47334f1a6731a3063a31240235228', + '82a1194dd934488ea2b9ddacdf2cc50b', + '6f106b11a66f918a48be1194c96b58b3' + ], + privatePlayers: [], + totalPlayers: 3, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:10.860Z', + started: true + }, + { + id: '54e7baadf2b7a374d0b9c1739d6393ed', + ownerId: '0163A14E3503070E000503B09F3B67C1', + ownerName: '[DS]ut4-vinthill-46694', + serverName: '[DS]ut4-vinthill-46694', + serverAddress: '51.81.57.70', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 9999, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Warehouse Party (Vint Hill, VA) ', + UT_SERVERMOTD_s: + 'Elimination, Instagib, BunnyTrack, and Duel\nBig THANK YOU to all the UT4 content creators!!\nProWeapons, UT+, Instagib mods, and more!\n\nHosted in Vint Hill, VA (Provider=OVHCloud.com)\nAdmin: mat@zavage.net or zavage#2933\n\nConsole Commands:\nmutate hitsounds\nmutate teamskins\nmutate weaponskins\n\nzavage.net/ut4\n\nXeon-E 2274G 4c\\8t 4->4.9GHz, 32G, raid nvme, 1 Gbps, 120 Tick (exp, 108-144) ', + UT_MATCHDURATION_i: 15707, + UT_HUBGUID_s: '0162EA662B090C1A003200A54AE2A951', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 1, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0162EA662B090C1A003200A54AE2A951', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 75, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: ['1f67af2e5f36f70e322cbc27f59594dd'], + privatePlayers: [], + totalPlayers: 1, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:19.349Z', + started: true + }, + { + id: '7a68f94e34511141b56a166fe0ac8536', + ownerId: '0163314D3B030E0E000902EADF95367A', + ownerName: '[DS]vm76429-110985', + serverName: '[DS]vm76429-110985', + serverAddress: '141.95.15.179', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 9999, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'UnrealPUGs - DE3 ', + UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', + UT_MATCHDURATION_i: 415, + UT_HUBGUID_s: '0162BC620E031402000201E904D07841', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 1, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0162BC620E031402000201E904D07841', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 50, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: ['d397de92699aa5200cdadb5027bdcd13'], + privatePlayers: [], + totalPlayers: 1, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:16.382Z', + started: true + }, + { + id: '433af222bb04cf73a3548c21bb58c06a', + ownerId: '881B3FB44C9C8F81DA0BFB84E010D933', + ownerName: '[DS]DESKTOP-4AKGM1D-15004', + serverName: '[DS]DESKTOP-4AKGM1D-15004', + serverAddress: '86.18.156.47', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-Spacer', + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: "te$co's test server ", + UT_SERVERMOTD_s: 'Have fun! ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '70C36843456956B3CEF526A50EA45CDF', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '70C36843456956B3CEF526A50EA45CDF', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 16, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:15.840Z', + started: true + }, + { + id: 'adf44c559689db182623c6855851bf4b', + ownerId: '031024A23303110E000401D050F01D58', + ownerName: '[DS]vm76429-114229', + serverName: '[DS]vm76429-114229', + serverAddress: '141.95.15.179', + serverPort: 8000, + maxPublicPlayers: 10000, + openPublicPlayers: 9998, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7788, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-EraseV2_a07', + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Deathmatch on DM-EraseV2_a07 ', + UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', + UT_MATCHDURATION_i: 1794, + UT_HUBGUID_s: '0162BC620E031402000201E904D07841', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 2, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: 'B3B5B7702C03140E002102273BF7D3F8', + UT_GAMEINSTANCE_i: 1, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 5, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [ + '6ede6517bdc75d0f5784bac05358ac7e', + 'c8285c9eb62f531845079f6baae60cd0' + ], + privatePlayers: [], + totalPlayers: 2, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:14.769Z', + started: true + }, + { + id: 'cc65e5db1599c29e9990087171d37894', + ownerId: '01639B1D10030C0E001D02FBBA909316', + ownerName: '[DS]rodut4-10732', + serverName: '[DS]rodut4-10732', + serverAddress: '74.91.125.4', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Unreal Carnage (Chicago) ', + UT_SERVERMOTD_s: + 'Unreal Carnage\n\n(Chicago)\n\n\nLast Hub Update: 28-Jan-23\n\nJoin The Unreal Carnage Discord Community!\n\ndiscord.gg/mje6YkJ\n\nAdmins: Maul, Power, Kurrgan, MoxNix\n\n\nUnreal Carnage.com ', + UT_MATCHDURATION_i: 0, + UT_MATCHELAPSEDTIME_i: 0, + UT_HUBGUID_s: 'C0DB2594499F03E55FDADDB80886094A', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: 'C0DB2594499F03E55FDADDB80886094A', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 60, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UU_i: 1, + UT_SERVERTRUSTLEVEL_i: 0 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:09.498Z', + started: true + }, + { + id: '444c4a9b9ba1809f30bcdeec489f9efc', + ownerId: '0163A8131003110E002900AE3027AE7E', + ownerName: '[DS]localhost-5652', + serverName: '[DS]localhost-5652', + serverAddress: '172.105.79.12', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 9998, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Unreal-Battles - DE ', + UT_SERVERMOTD_s: + 'Unreal-Battles\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\n ', + UT_MATCHDURATION_i: 6, + UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 2, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '016207950301101C000800E1A3EE2D08', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 3, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [ + 'bc47955d1b842047742c6e8131621efc', + '2e79452d8e5a9f88e8ae8c7c8b4a8666' + ], + privatePlayers: [], + totalPlayers: 2, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:32.550Z', + started: true + }, + { + id: '83dc49bc6eea3b7dab85e9a799c865f2', + ownerId: '038463771003110E003900B626B3B1BD', + ownerName: '[DS]gh-ur-178.gamerzhost.net-27229', + serverName: '[DS]gh-ur-178.gamerzhost.net-27229', + serverAddress: '194.26.183.170', + serverPort: 8003, + maxPublicPlayers: 10000, + openPublicPlayers: 9990, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7790, + UU_i: 1, + GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', + MAPNAME_s: 'DM-DeckTest', + UT_SERVERINSTANCEGUID_s: '636C8FD51003140E002700D26A0F9683', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=10?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?ART=ELI4?HostId=c436b72fd20661adafe8b4a1b70804fe?InstanceID=11?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', + UT_MAXPLAYERS_i: 10, + UT_MAXSPECTATORS_i: 2, + GAMENAME_s: 'Absolute Elimination v1.742', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', + UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-DeckTest ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', + UT_MATCHDURATION_i: 2148, + UT_MATCHELAPSEDTIME_i: 248, + UT_MATCHSTATE_s: 'InProgress', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERTRUSTLEVEL_i: 1, + UU_TEAMSIZES_s: '5,5', + UU_TEAMSCORES_s: '2,1', + UT_PLAYERONLINE_i: 10, + UU_NUMPLAYERS_i: 10, + UT_SPECTATORSONLINE_i: 1 + }, + publicPlayers: [ + '6ec7c6d8be7c0ac6ad7c31df3a6bee4a', + '9ccdc2e4a3088643a22f94316c7f28bb', + '80069bb4a201d0559ac0a6f7e3fa794c', + '8aff4d988de6e1d639dbabc9e7bd6c0e', + '6857310b5b05977b0da33840c9ed4d63', + '62344154159e52b295bb2f120b37c95d', + 'f4e96e0b7ea78a78c64050fd6590404c', + '3bb15543d14ed55322fc4e59fcc51607', + '81ab6baf1e70f21ce4d9be771e72b70c', + '2a42ae2248c4036f86ea0aaa9077611e' + ], + privatePlayers: [], + totalPlayers: 10, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:21.808Z', + started: true + }, + { + id: '01dfc17c83d5cbb1763342b517e57654', + ownerId: '016687271F030D0E000C012C55361328', + ownerName: '[DS]utpugatl-124395', + serverName: '[DS]utpugatl-124395', + serverAddress: '104.153.105.63', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-EntryRank', + UT_SERVERNAME_s: 'UTPugs Chicago ', + UT_SERVERMOTD_s: 'ut+ rules promode drools ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0165F43010091209002C00834925F66B', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0165F43010091209002C00834925F66B', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:15.693Z', + started: true + }, + { + id: '135dd04ffcf7ed6cdd64623c16987a10', + ownerId: '016649F507030A0E001600DC7789EEA0', + ownerName: '[DS]utwest1-407676', + serverName: '[DS]utwest1-407676', + serverAddress: '162.248.94.209', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-EntryRank', + UT_SERVERNAME_s: 'Fragworx Seattle ', + UT_SERVERMOTD_s: + 'Elim & duel. UTpugs.us for competitive gameplay. ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '01627EF62C010013002500EAD8C49F27', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '01627EF62C010013002500EAD8C49F27', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:14.914Z', + started: true + }, + { + id: '447fddebceb4ba91a7d698988ae74b3d', + ownerId: '043642100403110E001B01E8D9E52CC7', + ownerName: '[DS]localhost-1719906', + serverName: '[DS]localhost-1719906', + serverAddress: '139.177.177.71', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', + MAPNAME_s: 'FR-MeltDown', + GAMENAME_s: 'Blitz', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: "Fairlight's Classic Blitz 24/7 ", + UT_SERVERMOTD_s: "Fairlight's Classic Blitz 24/7 ", + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '043013872502141B003B003EC1C0143D', + UT_REDTEAMSIZE_i: 3, + UT_BLUETEAMSIZE_i: 3, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '043013872502141B003B003EC1C0143D', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 10, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:23.231Z', + started: true + }, + { + id: '0f19a11db6401706e4dbca26d6d5b014', + ownerId: '0163F3372E03110E001E002BA503E1F7', + ownerName: '[DS]localhost-3263', + serverName: '[DS]localhost-3263', + serverAddress: '139.162.207.208', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Unreal-Battles - UK ', + UT_SERVERMOTD_s: + 'Unreal-Battles\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\n ', + UT_MATCHDURATION_i: 3147, + UT_MATCHELAPSEDTIME_i: 5119, + UT_HUBGUID_s: '0164D4CE2B0A020D001E02F090D151AF', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0164D4CE2B0A020D001E02F090D151AF', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UU_i: 1, + UT_SERVERTRUSTLEVEL_i: 0, + UU_NUMPLAYERS_i: 1, + UU_CUSTOMMATCHNAMES_s: "04F177DF2F03120E001101723EA0892F:SkywalkeR's Game" + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:09.209Z', + started: true + }, + { + id: 'd18377946b4e92040c12cb3189f6ca04', + ownerId: '77342CDC45B38F8B6083FB9071ED6D80', + ownerName: '[DS]Kasus-Server-8384', + serverName: '[DS]Kasus-Server-8384', + serverAddress: '82.155.204.100', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: '< K H U B > ', + UT_SERVERMOTD_s: + 'HUB running 24h!(for now)\nMore gamemodes/mutators available under costum match. \n\n\nAny problem, bug or request please refer to\nK.asus#5462 or discord.gg/h46HRG5 server\n\nHf ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: 'B3A64C7C4BAC1C05B20429AE01B7AB45', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: 'B3A64C7C4BAC1C05B20429AE01B7AB45', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:09.659Z', + started: true + }, + { + id: '8d71f57d3d7f448fc2d4928d02a09bfb', + ownerId: '02D69E6C1E03120E002B000DC3FFC04A', + ownerName: '[DS]gh-ur-178.gamerzhost.net-27830', + serverName: '[DS]gh-ur-178.gamerzhost.net-27830', + serverAddress: '194.26.183.170', + serverPort: 8004, + maxPublicPlayers: 10000, + openPublicPlayers: 9996, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7790, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-DeckTest', + UT_SERVERINSTANCEGUID_s: '5A816BEB2803140E002F00F6801156A2', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=5?TimeLimit=10?GoalScore=0?ForceNoBots=1?ART=?MaxSpectators=0?HostId=efba4604a9e313d18d64f8038875a743?InstanceID=13?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', + UT_MAXPLAYERS_i: 5, + UT_MAXSPECTATORS_i: 0, + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', + UT_SERVERNAME_s: 'Deathmatch on DM-DeckTest ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', + UT_MATCHDURATION_i: 0, + UT_MATCHELAPSEDTIME_i: 0, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERTRUSTLEVEL_i: 1, + UT_PLAYERONLINE_i: 4, + UU_NUMPLAYERS_i: 4, + UU_SOLOSCORES_s: '1,1,1,1' + }, + publicPlayers: [ + '7f1b74f6e68f96bf1fc460bb031af22a', + '48015af75b34707c9ff2a5d722959a91', + '7af19de56bd0637fde6a51371b7ca72a', + 'b4be1e4e572e98aacf0b9300538b2b3a' + ], + privatePlayers: [], + totalPlayers: 4, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:37.805Z', + started: true + }, + { + id: '74d7be52b5a68af122074b1204e26579', + ownerId: '049D5F762303120E0039008341150648', + ownerName: '[DS]localhost-6876', + serverName: '[DS]localhost-6876', + serverAddress: '172.105.79.12', + serverPort: 8001, + maxPublicPlayers: 10000, + openPublicPlayers: 9992, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7788, + GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', + MAPNAME_s: 'FR-Nexus_WIP1', + GAMENAME_s: 'Blitz', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Blitz on FR-Nexus_WIP1 ', + UT_SERVERMOTD_s: + 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', + UT_REDTEAMSIZE_i: 3, + UT_BLUETEAMSIZE_i: 5, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 8, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '32B026893903140E00310166D2F33ECD', + UT_GAMEINSTANCE_i: 1, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 22, + UT_MAXSPECTATORS_i: 3, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [ + '160e800e3d341cbad58e2a840ae70a75', + '2729f93563125a5507e6690ec340747d', + '222f5dea1e33da662d989a0750055910', + '47b64bd6b8245bb8aa540c32a33c2310', + '4f4ce22c7fb4ff6c92e1f0277f3dfb9c', + '21bc5a58badf8fcfa0101f25eee5871a', + '7600b7a9f9b33d6bed824c2cb700c7f6', + 'b065937fdb68afce487a27ecec7115f9' + ], + privatePlayers: [], + totalPlayers: 8, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:26.313Z', + started: true + }, + { + id: '8407b0626e65aa1754b2eb44f48d5c98', + ownerId: '038471A02C03130E000C01A4349B2437', + ownerName: '[DS]gh-ur-178.gamerzhost.net-28312', + serverName: '[DS]gh-ur-178.gamerzhost.net-28312', + serverAddress: '194.26.183.170', + serverPort: 8006, + maxPublicPlayers: 10000, + openPublicPlayers: 9992, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7791, + UU_i: 1, + GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', + MAPNAME_s: 'DM-Rankin-LE', + UT_SERVERINSTANCEGUID_s: '3060470C1903140E0022028958BDF0D1', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=8?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?ART=ELI3?HostId=aee6a6ffcc0b46c9692613aa6fe785b4?InstanceID=15?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', + UT_MAXPLAYERS_i: 8, + UT_MAXSPECTATORS_i: 2, + GAMENAME_s: 'Absolute Elimination v1.742', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', + UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-Rankin-LE ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', + UT_MATCHDURATION_i: 0, + UT_MATCHELAPSEDTIME_i: 0, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERTRUSTLEVEL_i: 1, + UU_TEAMSIZES_s: '4,4', + UU_TEAMSCORES_s: '0,0', + UT_PLAYERONLINE_i: 8, + UU_NUMPLAYERS_i: 8 + }, + publicPlayers: [ + 'c3492087bf962bb01a0f0cb2925625f1', + '5cf5fbc5b2b2022ec61781097df69571', + '9f8ebf118882dad47820ba4d70a7b9c4', + 'e2e4700f5f1da56f2f491de22e712b35', + '5c87e248a8e9ea34e8ac6715a4e1e641', + '1c86eedba5fd9680bf7111e3f24ab148', + '448496e1a8021dd6807a176838d11f15', + 'adc181511726d932a541641d9f3ddf6f' + ], + privatePlayers: [], + totalPlayers: 8, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:14.289Z', + started: true + }, + { + id: '61727a25e89d32a441200c66e569e626', + ownerId: '4351721646233F5D7A7D5783553A9ABA', + ownerName: '[DS]SATURN-150432', + serverName: '[DS]SATURN-150432', + serverAddress: '91.60.27.118', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: '(Unreal Clan Deutschland) UCD UT4 HUB (DE) ', + UT_SERVERMOTD_s: + 'UT4 UCD Gaming Hub\n\nBlitz Wars,Global StatsSQL v2, ESL, Assault + Assault 2.0 , Monthly Leaque, ELI, PRO Leaque, Match Creation Elapsed Time 120-140 s\n\nContact for Questions or other on Discord "https://discord.gg/Az4wXD5" ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '083F7A914B29C2CB0D11CBBF47D78524', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '083F7A914B29C2CB0D11CBBF47D78524', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 60, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:32.096Z', + started: true + }, + { + id: '85692add0a5e04c12212805ac7170644', + ownerId: 'DF16B41F442D347B2F525EA14043943D', + ownerName: '[DS]StLouis-W-792-E-9704', + serverName: '[DS]StLouis-W-792-E-9704', + serverAddress: '148.72.144.198', + serverPort: 18011, + maxPublicPlayers: 10000, + openPublicPlayers: 9999, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Area51 (St. Louis) - Donate @ a51stl.com ', + UT_SERVERMOTD_s: + "Area51\n\nIf you want this hub to stay online, donate securely at a51stl.com. Hub will go offline when money runs out.\nMore info & discord links @ a51stl.com\n\nHave fun. Be kind.\n\nMembers: Blimpo, ConX5, Cuzkey, de'pain, DREW-TANg, Numb, Ricochet, $ev, synister, tonyrayo, vulva ", + UT_MATCHDURATION_i: 355, + UT_HUBGUID_s: '1CB1BA3C486FADC79718CB98FF51E199', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 1, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '1CB1BA3C486FADC79718CB98FF51E199', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 30, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: ['b9fbd978111b0967155174e24599087f'], + privatePlayers: [], + totalPlayers: 1, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:22.319Z', + started: true + }, + { + id: '14110ff725e902953b0b92ac566bf8ac', + ownerId: '016306480D030E0E001B01AA675029BA', + ownerName: '[DS]DUSTSERVER-3188611', + serverName: '[DS]DUSTSERVER-3188611', + serverAddress: '64.255.105.84', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Bunnytracks NA ', + UT_SERVERMOTD_s: + 'NA Bunnytracks\nAdmin: Ransom\nBT Website & Discord: www.ut4bt.tk ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0162454019050408002702F5E8414A7E', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0162454019050408002702F5E8414A7E', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 100, + UT_MAXSPECTATORS_i: 32, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:15.666Z', + started: true + }, + { + id: '01d6b67b34c94c29283da86856a08556', + ownerId: '0166CF750403130E0028027DEA32D852', + ownerName: '[DS]vs-game1-13697', + serverName: '[DS]vs-game1-13697', + serverAddress: '51.15.146.0', + serverPort: 6777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: '[FBC & P!xs] - FR - Blitz and Assault ', + UT_SERVERMOTD_s: + 'P!xs & FBC\n\nAssault / Blitz customs maps available !\n\nLocated in Paris - Made with <3\n\nNeed assistance ? Looking for Lumo_FR or e_fr ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '02BD3FC52B080A18000D028CB163F105', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '02BD3FC52B080A18000D028CB163F105', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:18.680Z', + started: true + }, + { + id: '81d2d6e57b116b889e581f6a2f8bb90a', + ownerId: '0712789E0903120E002F0034A7A1B54B', + ownerName: '[DS]dallasepic-357850', + serverName: '[DS]dallasepic-357850', + serverAddress: '145.40.77.37', + serverPort: 8000, + maxPublicPlayers: 10000, + openPublicPlayers: 9993, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7791, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-Deck8_20180305', + UT_SERVERINSTANCEGUID_s: '530903AC1403130E002703CF624F09C1', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=12?MaxPlayerWait=80?TimeLimit=10?GoalScore=0?WTR=/Game/RestrictedAssets/Weapons/Minigun/BP_Minigun.BP_Minigun_C:/Game/ArmasUNG/Minigun/StingerMinigun-Elite.StingerMinigun-Elite_C,/Game/RestrictedAssets/Weapons/GrenadeLauncher/BP_GrenadeLauncher.BP_GrenadeLauncher_C:/Game/RestrictedAssets/Weapons/BioRifle/BP_BioRifle.BP_BioRifle_C?Mutator=WeaponReplacement,UTPlus,AntiCheatV2,UTPlusMovement?Difficulty=1?ART=UC_DM_HS?HostId=7b2117d70a609b4ae3a09232bfd66090?InstanceID=23?HostPort=14000?HubGUID=03474C2E3802171A001F01F82225A807?NextMap=1', + UT_MAXPLAYERS_i: 12, + UT_MAXSPECTATORS_i: 7, + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: + 'Global_StatSQL-v2,MutHitsounds,MutTeamSkins,NoWarmupHostKick,HiddenWeaponsUTPL,hostcommands,SetNetSpeed,Mut_LogoSplash_V2', + UT_SERVERNAME_s: 'Deathmatch on DM-Deck8_20180305 ', + UT_SERVERMOTD_s: + 'Unreal Carnage\\n\\n(Dallas)\\n\\n\\nLast Hub Update: 03-12-23\\n\\nJoin The Unreal Carnage Discord Community!\\n\\ndiscord.gg/mje6YkJ\\n\\nAdmins: Maul, Power, Kurrgan, MoxNix\\n\\n\\nUnreal Carnage.com ', + UT_MATCHDURATION_i: 736, + UT_MATCHELAPSEDTIME_i: 420, + UT_MATCHSTATE_s: 'InProgress', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '03474C2E3802171A001F01F82225A807', + UT_SERVERTRUSTLEVEL_i: 0, + UU_SOLOSCORES_s: '1,1,1,1,1,1,1,1', + UT_PLAYERONLINE_i: 7, + UU_NUMPLAYERS_i: 7 + }, + publicPlayers: [ + 'bf99c48ce3dc288e946a3e87cc4df98d', + '38837d6053ca0b51c5c666a1ae61fe52', + '055cfc6defeee4bf83e9d34ff95f1163', + '849d2f849dd96ba86478671464c5f442', + '50134cdb095ca10c331d9c77aeebf288', + '5b8738d3ad66a5b17edb582bc5292dc3', + '6ff45dbad00f8cc43b70e5c3ce1ac04d' + ], + privatePlayers: [], + totalPlayers: 7, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:24.746Z', + started: true + }, + { + id: '180e3298e48f1850acd1e0c75859775d', + ownerId: '0166DA6007030D0E003003BCAB2487F8', + ownerName: '[DS]utchi1-217931', + serverName: '[DS]utchi1-217931', + serverAddress: '74.91.115.195', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-EntryRank', + UT_SERVERNAME_s: 'Fragworx CHI ', + UT_SERVERMOTD_s: + 'Fragworx CHI\n\nElim and duels. UTpugs.us for competitive gameplay. ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '016526531A011118000901505ACE61EA', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '016526531A011118000901505ACE61EA', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 25, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:22.625Z', + started: true + }, + { + id: '9681e01f3283d516673731bb1cd99d00', + ownerId: '085A83351703130E00310145FA584007', + ownerName: '[DS]localhost-8168', + serverName: '[DS]localhost-8168', + serverAddress: '172.105.79.12', + serverPort: 8002, + maxPublicPlayers: 10000, + openPublicPlayers: 9996, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7789, + GAMEMODE_s: '/Script/UnrealTournament.UTCTFGameMode', + MAPNAME_s: 'CTF-Face', + GAMENAME_s: 'Capture the Flag', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Capture the Flag on CTF-Face ', + UT_SERVERMOTD_s: + 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', + UT_MATCHDURATION_i: 1811, + UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', + UT_REDTEAMSIZE_i: 4, + UT_BLUETEAMSIZE_i: 3, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 4, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0C2859A12403140E001A01A17F72892D', + UT_GAMEINSTANCE_i: 1, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 8, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [ + '60d9add85b717dcf9d4fdf5fa7444172', + 'e5e9e926f74e5b277cb504fcfd31c160', + '474940d2ab4955fa733e253262777b82', + '40272ea54aab34dcf7a702275b7d2e1f' + ], + privatePlayers: [], + totalPlayers: 4, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:27.394Z', + started: true + }, + { + id: '9fb57195a99eaa96a432d9e7b2a79b14', + ownerId: '0163EE370A03080F000202C97BF47623', + ownerName: '[DS]nz.gibblets.com-1566474', + serverName: '[DS]nz.gibblets.com-1566474', + serverAddress: '121.99.241.203', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Gibblets.com ~Shock and Rockets~ :) ', + UT_SERVERMOTD_s: + 'Gibblets\nUT4 NZ Hub\n "FragNights" every wednesday night, \n Join us on Discord @ Gibblets.com ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0162747830080F0E002C0349AD75FDEF', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0162747830080F0E002C0349AD75FDEF', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:12.253Z', + started: true + }, + { + id: '4516c6552f838648f2f8e1f8ede4074a', + ownerId: '0163267819030D0E00140074DBF8274A', + ownerName: '[DS]ut4-fremont.zavage.net-595072', + serverName: '[DS]ut4-fremont.zavage.net-595072', + serverAddress: '45.79.101.208', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Warehouse Party (Fremont, CA) ', + UT_SERVERMOTD_s: + 'Elimination, Instagib, BunnyTrack, and Duel\nBig THANK YOU to all the UT4 content creators!!\nProWeapons, UT+, Instagib mods, and more!\n\nHosted in Fremont, CA (Provider=Linode.com)\nAdmin: mat@zavage.net or zavage#2933\n\nConsole Commands:\nmutate hitsounds\nmutate teamskins\nmutate weaponskins\nmutate hidegun/showgun\n\nzavage.net/ut4\n\nShared EPYC 7501 2c 2->3GHz, 4G, 4 Gbps UL, 108 Tick (exp, 108-144) ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0162010804030B08002A00F9058B4E93', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0162010804030B08002A00F9058B4E93', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 75, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:25.400Z', + started: true + }, + { + id: '6f0deed28b575642329e816a4f217db0', + ownerId: '03846F660F03140E001600BD2D340219', + ownerName: '[DS]gh-ur-178.gamerzhost.net-29393', + serverName: '[DS]gh-ur-178.gamerzhost.net-29393', + serverAddress: '194.26.183.170', + serverPort: 8005, + maxPublicPlayers: 10000, + openPublicPlayers: 9992, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7791, + UU_i: 1, + GAMEMODE_s: '/Game/ALTS/Elimination_113.Elimination_113_C', + MAPNAME_s: 'DM-EraseV2_a07', + UT_SERVERINSTANCEGUID_s: '097A45F42C03140E002802DC6F56481E', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Game/ALTS/Elimination_113.Elimination_113_C?MaxPlayers=8?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=10?TimeLimit=30?mutator=MutHitsounds,UT4XKickIdlers,ReverseFF,MutKickVoting,MutTeamSkins,MutAddVotingMod,ProSwitch,HiddenWeaponsUTPL?ForceRespawn=1?BalanceTeams=true?MapLockoutDuration=7?RandomSubsetSize=0?ForceNoBots=1?MaxSpectators=2?Difficulty=3?ART=ELI3?HostId=4bc6d64a3b8e2fc86b4335d44cd36302?InstanceID=18?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069?NextMap=1', + UT_MAXPLAYERS_i: 8, + UT_MAXSPECTATORS_i: 2, + GAMENAME_s: 'Absolute Elimination v1.742', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', + UT_SERVERNAME_s: 'Absolute Elimination v1.742 on DM-EraseV2_a07 ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', + UT_MATCHDURATION_i: 2334, + UT_MATCHELAPSEDTIME_i: 22, + UT_MATCHSTATE_s: 'InProgress', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERTRUSTLEVEL_i: 1, + UU_TEAMSIZES_s: '4,4', + UU_TEAMSCORES_s: '0,0', + UT_PLAYERONLINE_i: 8, + UU_NUMPLAYERS_i: 8 + }, + publicPlayers: [ + 'aee6a6ffcc0b46c9692613aa6fe785b4', + '4bc6d64a3b8e2fc86b4335d44cd36302', + '40ac0567a1063f3698709e5d9179e48c', + '2f2ca93ceb7f56c14b855888fbb4713e', + '081081aaad4ed765c01dbb1e36f204f3', + '7383265b36b66cc7e32dbc5212b58135', + '5d39bf122fa53d82e439b96cb1bfbc0e', + '094bd4cfb2f20da9435592e4c1666f5b' + ], + privatePlayers: [], + totalPlayers: 8, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:19.133Z', + started: true + }, + { + id: '5b62e6f85dae8d5b4230dd363cdc5d85', + ownerId: '045CBCD40D03130E001B019BDB0C08B9', + ownerName: '[DS]dallasepic-358453', + serverName: '[DS]dallasepic-358453', + serverAddress: '145.40.77.37', + serverPort: 8001, + maxPublicPlayers: 10000, + openPublicPlayers: 9997, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7792, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTDMGameMode', + MAPNAME_s: 'DM-1on1-Roughinery', + UT_SERVERINSTANCEGUID_s: '090AFD240A03130E002B02D2141B7F11', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDMGameMode?MaxPlayers=6?TimeLimit=10?GoalScore=0?WTR=/Game/RestrictedAssets/Weapons/Sniper/BP_Sniper.BP_Sniper_C:/Game/ArmasUNG/Sniper/Sniper-Elite.Sniper-Elite_C,/Game/RestrictedAssets/Weapons/ImpactHammer/BP_ImpactHammer.BP_ImpactHammer_C:/Game/ALTS/ALTSDummyWeapon.ALTSDummyWeapon_C,/Game/RestrictedAssets/Weapons/Flak/BP_FlakCannon.BP_FlakCannon_C:/Game/Proctf/Weapons/Proctf/Weapons/bp2_Orig_FlakCannon.bp2_Orig_FlakCannon_C,/Game/RestrictedAssets/Weapons/RocketLauncher/BP_RocketLauncher.BP_RocketLauncher_C:/Game/ProMode/Weapons/Pro_RocketLauncher.Pro_RocketLauncher_C?mutator=UTPlusMovement,MutAddVotingMod,AntiCheatV2,HWIDChecker,WeaponReplacement?ForceNoBots=1?ART=?HostId=f0be4ab0a6220bf56e41048c7349677a?InstanceID=24?HostPort=14000?HubGUID=03474C2E3802171A001F01F82225A807?NextMap=1', + UT_MAXPLAYERS_i: 6, + UT_MAXSPECTATORS_i: 7, + GAMENAME_s: 'Deathmatch', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: + 'Global_StatSQL-v2,MutHitsounds,MutTeamSkins,NoWarmupHostKick,HiddenWeaponsUTPL,hostcommands,SetNetSpeed,Mut_LogoSplash_V2', + UT_SERVERNAME_s: 'Deathmatch on DM-1on1-Roughinery ', + UT_SERVERMOTD_s: + 'Unreal Carnage\\n\\n(Dallas)\\n\\n\\nLast Hub Update: 03-12-23\\n\\nJoin The Unreal Carnage Discord Community!\\n\\ndiscord.gg/mje6YkJ\\n\\nAdmins: Maul, Power, Kurrgan, MoxNix\\n\\n\\nUnreal Carnage.com ', + UT_MATCHDURATION_i: 0, + UT_MATCHELAPSEDTIME_i: 0, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '03474C2E3802171A001F01F82225A807', + UT_SERVERTRUSTLEVEL_i: 0, + UT_PLAYERONLINE_i: 3, + UU_NUMPLAYERS_i: 3, + UU_SOLOSCORES_s: '1,1,1' + }, + publicPlayers: [ + 'b0de838267bf93e58faf6bb52c064996', + 'f0be4ab0a6220bf56e41048c7349677a', + 'c6d83e8aa5a58f9ff6a9cc17bb1181d3' + ], + privatePlayers: [], + totalPlayers: 3, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:30.630Z', + started: true + }, + { + id: 'a2f0ee06bf90694196dc3e6276b33cd0', + ownerId: '022E157613030C0E001E01F8BE4DE9D8', + ownerName: '[DS]rodut4-10755', + serverName: '[DS]rodut4-10755', + serverAddress: '74.91.125.4', + serverPort: 7778, + maxPublicPlayers: 10, + openPublicPlayers: 10, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + REGION_s: 'NA', + UT_RANKED_i: 1, + GAMEMODE_s: 'EMPTY', + QOS_i: 1, + BEACONPORT_i: 7788, + UT_SERVERTRUSTLEVEL_i: 0 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: false, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:14.919Z', + started: false + }, + { + id: '1029bb3819c90451f58955dec0faa076', + ownerId: '022EFF9619030C0E001E003EBEA2B8E5', + ownerName: '[DS]rodut4-10767', + serverName: '[DS]rodut4-10767', + serverAddress: '74.91.125.4', + serverPort: 7779, + maxPublicPlayers: 10, + openPublicPlayers: 10, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + REGION_s: 'NA', + UT_RANKED_i: 1, + GAMEMODE_s: 'EMPTY', + QOS_i: 1, + BEACONPORT_i: 7789, + UT_SERVERTRUSTLEVEL_i: 0 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: false, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:22.301Z', + started: false + }, + { + id: '14783d4a237a5e3944a645abe7c2d26b', + ownerId: '499FB180470A23D09D4715BDC2667554', + ownerName: '[DS]BOOTCAMP-Jason-9184', + serverName: '[DS]BOOTCAMP-Jason-9184', + serverAddress: '42.2.158.18', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'Unreal Spielen (Hong Kong) ', + UT_SERVERMOTD_s: + 'Hong Kong (Asia) Hub featuring UT+! Hosted by Jwells uh huh (Discord: Jeroos#5365) \nDownload all content -> bit.ly/unrealpak ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '8817C877410383C971FF11B221DAB8F8', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '8817C877410383C971FF11B221DAB8F8', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 2 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:16.109Z', + started: true + }, + { + id: '460da4abd60430f2c8ed017e412c5baa', + ownerId: '0166B71E0F030F0E00220370501FADE3', + ownerName: '[DS]dallastn-32358', + serverName: '[DS]dallastn-32358', + serverAddress: '192.223.24.243', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-EntryRank', + UT_SERVERNAME_s: 'UTPugs NYC ', + UT_SERVERMOTD_s: 'ut+ rules promode drools ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '0165388E24090A09002A023A8E99A3FF', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '0165388E24090A09002A023A8E99A3FF', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 200, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:31.855Z', + started: true + }, + { + id: '932edd0bbe52682b3534d19e5d5a81b0', + ownerId: '01630F183403140E00240363597B1CBC', + ownerName: '[DS]lvps83-169-37-51.dedicated.hosteurope.de-1961', + serverName: '[DS]lvps83-169-37-51.dedicated.hosteurope.de-1961', + serverAddress: '83.169.37.51', + serverPort: 7777, + maxPublicPlayers: 10000, + openPublicPlayers: 10000, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7787, + GAMEMODE_s: '/Script/UnrealTournament.UTLobbyGameMode', + MAPNAME_s: 'UT-Entry', + UT_SERVERNAME_s: 'UnrealPUGs - DE2 ', + UT_SERVERMOTD_s: 'discord.gg/unrealpugs ', + UT_MATCHDURATION_i: 0, + UT_HUBGUID_s: '01627F081E020D1A000300F9269E1268', + UT_REDTEAMSIZE_i: 0, + UT_BLUETEAMSIZE_i: 0, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 0, + UT_SPECTATORSONLINE_i: 0, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '01627F081E020D1A000300F9269E1268', + UT_GAMEINSTANCE_i: 0, + UT_SERVERFLAGS_i: 0, + UT_NUMMATCHES_i: 0, + UT_MAXPLAYERS_i: 30, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:17.688Z', + started: true + }, + { + id: '2465cf78c19c19ff470513e6c651bb14', + ownerId: '04775A4D2B03140E002701C8AE5BD308', + ownerName: '[DS]localhost-10194', + serverName: '[DS]localhost-10194', + serverAddress: '172.105.79.12', + serverPort: 8003, + maxPublicPlayers: 10000, + openPublicPlayers: 9989, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7790, + GAMEMODE_s: '/Script/UnrealTournament.UTFlagRunGame', + MAPNAME_s: 'FR-Heist', + GAMENAME_s: 'Blitz', + UT_MATCHELO_i: 0, + UT_SERVERNAME_s: 'Blitz on FR-Heist ', + UT_SERVERMOTD_s: + 'Unreal-Battles\\nHome of EU Instagib - Join the community on Discord: discord.gg/Jj9MKwfaZ9\\n ', + UT_MATCHDURATION_i: 509, + UT_HUBGUID_s: '016207950301101C000800E1A3EE2D08', + UT_REDTEAMSIZE_i: 5, + UT_BLUETEAMSIZE_i: 5, + UT_TRAININGGROUND_b: false, + UT_MINELO_i: 0, + UT_MAXELO_i: 0, + UT_PLAYERONLINE_i: 10, + UT_SPECTATORSONLINE_i: 1, + UT_SERVERVERSION_s: '3525360', + UT_SERVERINSTANCEGUID_s: '045F73B62B03140E002700C3AE57D14C', + UT_GAMEINSTANCE_i: 1, + UT_SERVERFLAGS_i: 1, + UT_NUMMATCHES_i: 1, + UT_MAXPLAYERS_i: 10, + UT_MAXSPECTATORS_i: 7, + UT_MATCHSTATE_s: 'InProgress', + UT_SERVERTRUSTLEVEL_i: 1 + }, + publicPlayers: [ + '11fa8eb51fd360e99426ac8ada3d8d23', + 'bd1c1e11a4a4929d8eb49107f489b37f', + 'ca499ac65b73c4dabc71dd7559b760bc', + 'b868a180354e98b87d5d2719d0c65c75', + 'ae8c9922fde698b205025bb270c6483e', + '430b5fe7c785800970355f15cb1190c8', + '1ea5cc2f2b717c56371b91317665c553', + 'e232d8e4a70e1d67e2c09632696d4f80', + '5631182438812d9eb15d176e463f4a9d', + 'd3be12a627ec591f2cb6a5aef1f44f7c', + 'f6c149d9092b924b9080f7cd8708fd05' + ], + privatePlayers: [], + totalPlayers: 11, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:13.710Z', + started: true + }, + { + id: '9d6de6d3e8431edef761ba99b6b8dfea', + ownerId: '022EFBB20F03000E0007006BA6AA309C', + ownerName: '[DS]dallasepic-334001', + serverName: '[DS]dallasepic-334001', + serverAddress: '145.40.77.37', + serverPort: 7778, + maxPublicPlayers: 10, + openPublicPlayers: 10, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + REGION_s: 'NA', + UT_RANKED_i: 1, + GAMEMODE_s: 'EMPTY', + QOS_i: 1, + BEACONPORT_i: 7788, + UT_SERVERTRUSTLEVEL_i: 0 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: false, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:31.100Z', + started: false + }, + { + id: 'a1181b8f20a78e01f8843103d64eadff', + ownerId: '022EBC2D1303000E0007038002D88C6D', + ownerName: '[DS]dallasepic-334015', + serverName: '[DS]dallasepic-334015', + serverAddress: '145.40.77.37', + serverPort: 7779, + maxPublicPlayers: 10, + openPublicPlayers: 10, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + REGION_s: 'NA', + UT_RANKED_i: 1, + GAMEMODE_s: 'EMPTY', + QOS_i: 1, + BEACONPORT_i: 7789, + UT_SERVERTRUSTLEVEL_i: 0 + }, + publicPlayers: [], + privatePlayers: [], + totalPlayers: 0, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: false, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:31.656Z', + started: false + }, + { + id: 'f70a76ad7e118017b16b89074e1b2770', + ownerId: '0370016B2003140E002800566E955DFF', + ownerName: '[DS]gh-ur-178.gamerzhost.net-29670', + serverName: '[DS]gh-ur-178.gamerzhost.net-29670', + serverAddress: '194.26.183.170', + serverPort: 8007, + maxPublicPlayers: 10000, + openPublicPlayers: 9999, + maxPrivatePlayers: 0, + openPrivatePlayers: 0, + attributes: { + BEACONPORT_i: 7792, + UU_i: 1, + GAMEMODE_s: '/Script/UnrealTournament.UTDuelGame', + MAPNAME_s: 'DM-ASDF', + UT_SERVERINSTANCEGUID_s: '02EEF81B1F03140E002802D16E8FC1C3', + UT_SERVERVERSION_s: '3525360', + UU_GAMEOPTIONS_s: + '?Name=Player?VersionCheck=1?Game=/Script/UnrealTournament.UTDuelGame?MaxPlayers=2?MaxReadyWait=60?MaxPlayerWait=60?GoalScore=0?TimeLimit=10?WTR=/Game/RestrictedAssets/Weapons/GrenadeLauncher/BP_GrenadeLauncher.BP_GrenadeLauncher_C:/Game/RestrictedAssets/Weapons/BioRifle/BP_BioRifle.BP_BioRifle_C?mutator=WeaponReplacement,WeaponsStayOff,FriendlyFire,NoSpawnProtectionMutator,NoPickupTimerMutator,AddImpactHammer,MutHitsounds,MutTeamSkins,CustomHUD,CompetitivePickups,HiddenWeaponsUTPL,UTPLArmour,AutoPause,WarmupPlus?ForceRespawn=1?BalanceTeams=false?ForceNoBots=1?RequireFull=1?MaxSpectators=3?Difficulty=7?ART=UTPL1?HostId=9e54eb7b3f7d1967c9762e4614c054e1?InstanceID=19?HostPort=14000?HubGUID=005FE17F0D0905110007020E6C59A069', + UT_MAXPLAYERS_i: 2, + UT_MAXSPECTATORS_i: 3, + GAMENAME_s: 'Duel', + UT_MATCHELO_i: 0, + UU_FORCEDMUTATORS_s: 'AntiCheatV2,SetNetSpeed,Global_StatSQL-v2', + UT_SERVERNAME_s: 'Duel on DM-ASDF ', + UT_SERVERMOTD_s: + 'The real PHOENIX Clan ---Fun Gaming since 1994---\\nPHX on Discord, connect to discord.gg/d9akhwz\\nRemember, the Pickups from Elimination are for the KILLER, unless he says it can be used by others!\\nWe do not accept insults, rage quits or midgame team changes!\\nPlayers who not accept the rules will be kicked without warning\\nPlay fair and have FUN! ', + UT_MATCHDURATION_i: 0, + UT_MATCHELAPSEDTIME_i: 0, + UT_MATCHSTATE_s: 'WaitingToStart', + UT_GAMEINSTANCE_i: 1, + UT_HUBGUID_s: '005FE17F0D0905110007020E6C59A069', + UT_SERVERTRUSTLEVEL_i: 1, + UU_TEAMSIZES_s: '1,0', + UU_TEAMSCORES_s: '0,0', + UT_PLAYERONLINE_i: 1, + UU_NUMPLAYERS_i: 1 + }, + publicPlayers: ['9e54eb7b3f7d1967c9762e4614c054e1'], + privatePlayers: [], + totalPlayers: 1, + allowJoinInProgress: true, + shouldAdvertise: true, + isDedicated: true, + usesStats: false, + allowInvites: true, + usesPresence: false, + allowJoinViaPresence: true, + allowJoinViaPresenceFriendsOnly: false, + buildUniqueId: '256652735', + lastUpdated: '2023-03-14T19:50:12.357Z', + started: true + } ]; diff --git a/UT4MasterServer.Web/src/pages/Servers/data/match-state-map.ts b/UT4MasterServer.Web/src/pages/Servers/data/match-state-map.ts index bc227e5e..22d472cf 100644 --- a/UT4MasterServer.Web/src/pages/Servers/data/match-state-map.ts +++ b/UT4MasterServer.Web/src/pages/Servers/data/match-state-map.ts @@ -1,19 +1,19 @@ import { MatchState } from '../enums/match-state'; export const matchStateMap: Record = { - [MatchState.playerIntro]: 'Player Intro', - [MatchState.countdown]: 'Countdown to Begin', - [MatchState.enteringOvertime]: 'Entering Overtime', - [MatchState.overtime]: 'Match in Overtime', - [MatchState.mapVote]: 'Map Vote Happening', - [MatchState.intermission]: 'Match Intermission', - [MatchState.exitingIntermission]: 'Match Exiting Intermission', - [MatchState.rankedAbandon]: 'Ranked Match Abandoned', - [MatchState.waitingTravel]: 'Waiting Travel', - [MatchState.enteringMap]: 'Entering Map', - [MatchState.waiting]: 'Waiting to Start', - [MatchState.inProgress]: 'In Progress', - [MatchState.waitingPostMatch]: 'Waiting Post Match', - [MatchState.leavingMap]: 'Leaving Map', - [MatchState.aborted]: 'Aborted' + [MatchState.playerIntro]: 'Player Intro', + [MatchState.countdown]: 'Countdown to Begin', + [MatchState.enteringOvertime]: 'Entering Overtime', + [MatchState.overtime]: 'Match in Overtime', + [MatchState.mapVote]: 'Map Vote Happening', + [MatchState.intermission]: 'Match Intermission', + [MatchState.exitingIntermission]: 'Match Exiting Intermission', + [MatchState.rankedAbandon]: 'Ranked Match Abandoned', + [MatchState.waitingTravel]: 'Waiting Travel', + [MatchState.enteringMap]: 'Entering Map', + [MatchState.waiting]: 'Waiting to Start', + [MatchState.inProgress]: 'In Progress', + [MatchState.waitingPostMatch]: 'Waiting Post Match', + [MatchState.leavingMap]: 'Leaving Map', + [MatchState.aborted]: 'Aborted' }; diff --git a/UT4MasterServer.Web/src/pages/Servers/enums/game-mode.ts b/UT4MasterServer.Web/src/pages/Servers/enums/game-mode.ts index 7f1724bb..7b963ce7 100644 --- a/UT4MasterServer.Web/src/pages/Servers/enums/game-mode.ts +++ b/UT4MasterServer.Web/src/pages/Servers/enums/game-mode.ts @@ -1,14 +1,14 @@ export enum GameMode { - duel = '/Script/UnrealTournament.UTDuelGameMode', - duel2 = '/Script/UnrealTournament.UTDuelGame', - deathmatch = '/Script/UnrealTournament.UTDMGameMode', - ctf = '/Script/UnrealTournament.UTCTFGameMode', - blitz = '/Script/UnrealTournament.UTFlagRunGame', - empty = 'EMPTY', - hub = '/Script/UnrealTournament.UTLobbyGameMode', - siege = '/Script/UnrealTournament.UTFlagRunPvEGame', - teamDeathmatch = '/Script/UnrealTournament.UTTeamDMGameMode', - showdown = '/Script/UnrealTournament.UTShowdownGame', - elimination = '/Game/ALTS/Elimination_113.Elimination_113_C', - bunnytrack = '/Game/BT/Gamemode/BT_Game.BT_Game_C' + duel = '/Script/UnrealTournament.UTDuelGameMode', + duel2 = '/Script/UnrealTournament.UTDuelGame', + deathmatch = '/Script/UnrealTournament.UTDMGameMode', + ctf = '/Script/UnrealTournament.UTCTFGameMode', + blitz = '/Script/UnrealTournament.UTFlagRunGame', + empty = 'EMPTY', + hub = '/Script/UnrealTournament.UTLobbyGameMode', + siege = '/Script/UnrealTournament.UTFlagRunPvEGame', + teamDeathmatch = '/Script/UnrealTournament.UTTeamDMGameMode', + showdown = '/Script/UnrealTournament.UTShowdownGame', + elimination = '/Game/ALTS/Elimination_113.Elimination_113_C', + bunnytrack = '/Game/BT/Gamemode/BT_Game.BT_Game_C' } diff --git a/UT4MasterServer.Web/src/pages/Servers/enums/match-state.ts b/UT4MasterServer.Web/src/pages/Servers/enums/match-state.ts index bb3dda3e..a22ab639 100644 --- a/UT4MasterServer.Web/src/pages/Servers/enums/match-state.ts +++ b/UT4MasterServer.Web/src/pages/Servers/enums/match-state.ts @@ -1,17 +1,17 @@ export enum MatchState { - playerIntro = 'PlayerIntro', - countdown = 'CountdownToBegin', - enteringOvertime = 'MatchEnteringOvertime', - overtime = 'MatchIsInOvertime', - mapVote = 'MapVoteHappening', - intermission = 'MatchIntermission', - exitingIntermission = 'MatchExitingIntermission', - rankedAbandon = 'MatchRankedAbandon', - waitingTravel = 'WaitingTravel', - enteringMap = 'EnteringMap', - waiting = 'WaitingToStart', - inProgress = 'InProgress', - waitingPostMatch = 'WaitingPostMatch', - leavingMap = 'LeavingMap', - aborted = 'Aborted' + playerIntro = 'PlayerIntro', + countdown = 'CountdownToBegin', + enteringOvertime = 'MatchEnteringOvertime', + overtime = 'MatchIsInOvertime', + mapVote = 'MapVoteHappening', + intermission = 'MatchIntermission', + exitingIntermission = 'MatchExitingIntermission', + rankedAbandon = 'MatchRankedAbandon', + waitingTravel = 'WaitingTravel', + enteringMap = 'EnteringMap', + waiting = 'WaitingToStart', + inProgress = 'InProgress', + waitingPostMatch = 'WaitingPostMatch', + leavingMap = 'LeavingMap', + aborted = 'Aborted' } diff --git a/UT4MasterServer.Web/src/pages/Servers/enums/server-attribute.ts b/UT4MasterServer.Web/src/pages/Servers/enums/server-attribute.ts index ec864a78..8e16e337 100644 --- a/UT4MasterServer.Web/src/pages/Servers/enums/server-attribute.ts +++ b/UT4MasterServer.Web/src/pages/Servers/enums/server-attribute.ts @@ -1,33 +1,33 @@ export enum ServerAttribute { - hubGuid = 'UT_HUBGUID_s', - serverInstanceGuid = 'UT_SERVERINSTANCEGUID_s', - serverName = 'UT_SERVERNAME_s', - serverMotd = 'UT_SERVERMOTD_s', - playersOnline = 'UT_PLAYERONLINE_i', - spectatorsOnline = 'UT_SPECTATORSONLINE_i', - maxPlayers = 'UT_MAXPLAYERS_i', - gameMode = 'GAMEMODE_s', - gameType = 'GAMENAME_s', - mapName = 'MAPNAME_s', - matchState = 'UT_MATCHSTATE_s', - matchDuration = 'UT_MATCHDURATION_i', - serverTrustLevel = 'UT_SERVERTRUSTLEVEL_i', - gameInstance = 'UT_GAMEINSTANCE_i', - serverVersion = 'UT_SERVERVERSION_s', - ranked = 'UT_RANKED_i', - dcid = 'DCID_s', - needs = 'NEEDS_i', - playlist = 'PLAYLISTID_i', - region = 'REGION_s', - targetElo = 'TEAMELO_i', - mutators = 'UU_MUTATORS_s', - customMatchNames = 'UU_CUSTOMMATCHNAMES_s', - elapsedTime = 'UT_MATCHELAPSEDTIME_i', - uu = 'UU_i', - uuGameOptions = 'UU_GAMEOPTIONS_s', - uuForcedMutators = 'UU_FORCEDMUTATORS_s', - uuTeamSizes = 'UU_TEAMSIZES_s', - uuTeamScores = 'UU_TEAMSCORES_s', - uuServerFlags = 'UT_SERVERFLAGS_i', - uuSoloScores = 'UU_SOLOSCORES_s' + hubGuid = 'UT_HUBGUID_s', + serverInstanceGuid = 'UT_SERVERINSTANCEGUID_s', + serverName = 'UT_SERVERNAME_s', + serverMotd = 'UT_SERVERMOTD_s', + playersOnline = 'UT_PLAYERONLINE_i', + spectatorsOnline = 'UT_SPECTATORSONLINE_i', + maxPlayers = 'UT_MAXPLAYERS_i', + gameMode = 'GAMEMODE_s', + gameType = 'GAMENAME_s', + mapName = 'MAPNAME_s', + matchState = 'UT_MATCHSTATE_s', + matchDuration = 'UT_MATCHDURATION_i', + serverTrustLevel = 'UT_SERVERTRUSTLEVEL_i', + gameInstance = 'UT_GAMEINSTANCE_i', + serverVersion = 'UT_SERVERVERSION_s', + ranked = 'UT_RANKED_i', + dcid = 'DCID_s', + needs = 'NEEDS_i', + playlist = 'PLAYLISTID_i', + region = 'REGION_s', + targetElo = 'TEAMELO_i', + mutators = 'UU_MUTATORS_s', + customMatchNames = 'UU_CUSTOMMATCHNAMES_s', + elapsedTime = 'UT_MATCHELAPSEDTIME_i', + uu = 'UU_i', + uuGameOptions = 'UU_GAMEOPTIONS_s', + uuForcedMutators = 'UU_FORCEDMUTATORS_s', + uuTeamSizes = 'UU_TEAMSIZES_s', + uuTeamScores = 'UU_TEAMSCORES_s', + uuServerFlags = 'UT_SERVERFLAGS_i', + uuSoloScores = 'UU_SOLOSCORES_s' } diff --git a/UT4MasterServer.Web/src/pages/Servers/hooks/use-hubs.hook.ts b/UT4MasterServer.Web/src/pages/Servers/hooks/use-hubs.hook.ts index 0c6f5673..64851f63 100644 --- a/UT4MasterServer.Web/src/pages/Servers/hooks/use-hubs.hook.ts +++ b/UT4MasterServer.Web/src/pages/Servers/hooks/use-hubs.hook.ts @@ -9,86 +9,86 @@ import { useMatch } from './use-match.hook'; import { intersection } from 'lodash'; export function useHubs() { - const { mapMatch } = useMatch(); + const { mapMatch } = useMatch(); - function hubFilter(r: IMatchmakingResponse) { - const instanceIdReferencedAsHubGuid = ServerStore.allServers.some( - (s) => - r.attributes[ServerAttribute.serverInstanceGuid] === - s.attributes[ServerAttribute.hubGuid] && - r.attributes[ServerAttribute.serverInstanceGuid] !== - r.attributes[ServerAttribute.hubGuid] - ); - return ( - (instanceIdReferencedAsHubGuid || - r.attributes[ServerAttribute.gameMode] === GameMode.hub) && - // not quickplay - !r.attributes[ServerAttribute.ranked] - ); - } + function hubFilter(r: IMatchmakingResponse) { + const instanceIdReferencedAsHubGuid = ServerStore.allServers.some( + (s) => + r.attributes[ServerAttribute.serverInstanceGuid] === + s.attributes[ServerAttribute.hubGuid] && + r.attributes[ServerAttribute.serverInstanceGuid] !== + r.attributes[ServerAttribute.hubGuid] + ); + return ( + (instanceIdReferencedAsHubGuid || + r.attributes[ServerAttribute.gameMode] === GameMode.hub) && + // not quickplay + !r.attributes[ServerAttribute.ranked] + ); + } - function hubMatchFilter(r: IMatchmakingResponse, hubGuid: string) { - return ( - r.attributes[ServerAttribute.gameInstance] === 1 && - r.attributes[ServerAttribute.hubGuid] === hubGuid - ); - } + function hubMatchFilter(r: IMatchmakingResponse, hubGuid: string) { + return ( + r.attributes[ServerAttribute.gameInstance] === 1 && + r.attributes[ServerAttribute.hubGuid] === hubGuid + ); + } - function mapCustomMatchNames(matchNames?: string) { - const matchStrings = matchNames?.split('\n'); - const customMatchNames: Record = {}; - matchStrings?.forEach((s) => { - const parts = s.split(':'); - const guid = parts[0]; - const name = parts[1]; - customMatchNames[guid] = name; - }); - return customMatchNames; - } + function mapCustomMatchNames(matchNames?: string) { + const matchStrings = matchNames?.split('\n'); + const customMatchNames: Record = {}; + matchStrings?.forEach((s) => { + const parts = s.split(':'); + const guid = parts[0]; + const name = parts[1]; + customMatchNames[guid] = name; + }); + return customMatchNames; + } - function mapHub(response: IMatchmakingResponse): IHub { - const serverId = response.attributes[ - ServerAttribute.serverInstanceGuid - ] as string; - const customMatchNamesString = response.attributes[ - ServerAttribute.customMatchNames - ] as string; - const customMatchNames = mapCustomMatchNames(customMatchNamesString); - const matches = ServerStore.allServers - .filter((r) => hubMatchFilter(r, serverId)) - .map((m) => mapMatch(m, customMatchNames)); - const playersInMatches = matches.reduce( - (sum, m) => sum + m.playersOnline, - 0 - ); - const forcedMutators = intersection( - ...matches.map((m) => m.forcedMutators) - ); - return { - id: serverId, - serverName: response.attributes[ServerAttribute.serverName] as string, - serverTrustLevel: response.attributes[ - ServerAttribute.serverTrustLevel - ] as GameServerTrust, - // Hub.totalPlayers is the number of players in the lobby, doesn't include players in matches - totalPlayers: response.totalPlayers + playersInMatches, - matches, - customMatchNames: mapCustomMatchNames(customMatchNamesString), - uuInstalled: (response.attributes[ServerAttribute.uu] as number) === 1, - forcedMutators - }; - } + function mapHub(response: IMatchmakingResponse): IHub { + const serverId = response.attributes[ + ServerAttribute.serverInstanceGuid + ] as string; + const customMatchNamesString = response.attributes[ + ServerAttribute.customMatchNames + ] as string; + const customMatchNames = mapCustomMatchNames(customMatchNamesString); + const matches = ServerStore.allServers + .filter((r) => hubMatchFilter(r, serverId)) + .map((m) => mapMatch(m, customMatchNames)); + const playersInMatches = matches.reduce( + (sum, m) => sum + m.playersOnline, + 0 + ); + const forcedMutators = intersection( + ...matches.map((m) => m.forcedMutators) + ); + return { + id: serverId, + serverName: response.attributes[ServerAttribute.serverName] as string, + serverTrustLevel: response.attributes[ + ServerAttribute.serverTrustLevel + ] as GameServerTrust, + // Hub.totalPlayers is the number of players in the lobby, doesn't include players in matches + totalPlayers: response.totalPlayers + playersInMatches, + matches, + customMatchNames: mapCustomMatchNames(customMatchNamesString), + uuInstalled: (response.attributes[ServerAttribute.uu] as number) === 1, + forcedMutators + }; + } - if (!ServerStore.allServers.length) { - ServerStore.fetchAllServers(); - } + if (!ServerStore.allServers.length) { + ServerStore.fetchAllServers(); + } - const hubs = computed(() => - ServerStore.allServers.filter(hubFilter).map(mapHub) - ); + const hubs = computed(() => + ServerStore.allServers.filter(hubFilter).map(mapHub) + ); - return { - hubs, - hubFilter - }; + return { + hubs, + hubFilter + }; } diff --git a/UT4MasterServer.Web/src/pages/Servers/hooks/use-match.hook.ts b/UT4MasterServer.Web/src/pages/Servers/hooks/use-match.hook.ts index ab6458a7..bacdfcda 100644 --- a/UT4MasterServer.Web/src/pages/Servers/hooks/use-match.hook.ts +++ b/UT4MasterServer.Web/src/pages/Servers/hooks/use-match.hook.ts @@ -7,80 +7,80 @@ import { IMatch } from '../types/match'; import { IMatchmakingResponse } from '../types/matchmaking-response'; export function useMatch() { - function mapGameOptions(optionsString?: string): Record { - if (!optionsString) { - return {}; - } - const params = optionsString.split('?').filter((s) => s.length); - const optionsMap: Record = {}; - params.forEach((p) => { - const kvPair = p.split('='); - const key = kvPair[0]; - const value = kvPair[1]; - optionsMap[key] = value; - }); - return optionsMap; - } + function mapGameOptions(optionsString?: string): Record { + if (!optionsString) { + return {}; + } + const params = optionsString.split('?').filter((s) => s.length); + const optionsMap: Record = {}; + params.forEach((p) => { + const kvPair = p.split('='); + const key = kvPair[0]; + const value = kvPair[1]; + optionsMap[key] = value; + }); + return optionsMap; + } - function mapMatch( - response: IMatchmakingResponse, - customMatchNames: Record - ): IMatch { - const matchState = response.attributes[ - ServerAttribute.matchState - ] as MatchState; + function mapMatch( + response: IMatchmakingResponse, + customMatchNames: Record + ): IMatch { + const matchState = response.attributes[ + ServerAttribute.matchState + ] as MatchState; - const id = response.attributes[ - ServerAttribute.serverInstanceGuid - ] as string; - const gameMode = response.attributes[ServerAttribute.gameMode] as GameMode; - const gameOptions = mapGameOptions( - response.attributes[ServerAttribute.uuGameOptions] as string - ); - const mutators = gameOptions['mutator']?.split(',') ?? []; - const forcedMutatorsString = response.attributes[ - ServerAttribute.uuForcedMutators - ] as string; - const forcedMutators = forcedMutatorsString?.split(',') ?? []; - const elapsedTimeRaw = response.attributes[ - ServerAttribute.elapsedTime - ] as number; - const elapsedTimeAccurate = Math.round( - (Date.now() - - (new Date(response.lastUpdated).getTime() - elapsedTimeRaw * 1000)) / - 1000 - ); - return { - id, - name: - customMatchNames[id] ?? - (response.attributes[ServerAttribute.serverName] as string), - gameType: response.attributes[ServerAttribute.gameType] as string, - map: response.attributes[ServerAttribute.mapName] as string, - matchState: matchState, - matchStateDisplay: matchStateMap[matchState] ?? matchState, - maxPlayers: response.attributes[ServerAttribute.maxPlayers] as number, - playersOnline: response.attributes[ - ServerAttribute.playersOnline - ] as number, - duration: response.attributes[ServerAttribute.matchDuration] as number, - elapsedTime: elapsedTimeRaw > 0 ? elapsedTimeAccurate : elapsedTimeRaw, - publicPlayers: response.publicPlayers, - mutators, - gameMode, - gameModeDisplay: gameModeMap[gameMode] ?? gameMode, - uuInstalled: (response.attributes[ServerAttribute.uu] as number) === 1, - gameOptions, - forcedMutators, - passwordProtected: - (response.attributes[ServerAttribute.uuServerFlags] as number) === 1, - soloScores: response.attributes[ServerAttribute.uuSoloScores] as string, - teamScores: response.attributes[ServerAttribute.uuTeamScores] as string, - teamSizes: response.attributes[ServerAttribute.uuTeamSizes] as string - }; - } + const id = response.attributes[ + ServerAttribute.serverInstanceGuid + ] as string; + const gameMode = response.attributes[ServerAttribute.gameMode] as GameMode; + const gameOptions = mapGameOptions( + response.attributes[ServerAttribute.uuGameOptions] as string + ); + const mutators = gameOptions['mutator']?.split(',') ?? []; + const forcedMutatorsString = response.attributes[ + ServerAttribute.uuForcedMutators + ] as string; + const forcedMutators = forcedMutatorsString?.split(',') ?? []; + const elapsedTimeRaw = response.attributes[ + ServerAttribute.elapsedTime + ] as number; + const elapsedTimeAccurate = Math.round( + (Date.now() - + (new Date(response.lastUpdated).getTime() - elapsedTimeRaw * 1000)) / + 1000 + ); + return { + id, + name: + customMatchNames[id] ?? + (response.attributes[ServerAttribute.serverName] as string), + gameType: response.attributes[ServerAttribute.gameType] as string, + map: response.attributes[ServerAttribute.mapName] as string, + matchState: matchState, + matchStateDisplay: matchStateMap[matchState] ?? matchState, + maxPlayers: response.attributes[ServerAttribute.maxPlayers] as number, + playersOnline: response.attributes[ + ServerAttribute.playersOnline + ] as number, + duration: response.attributes[ServerAttribute.matchDuration] as number, + elapsedTime: elapsedTimeRaw > 0 ? elapsedTimeAccurate : elapsedTimeRaw, + publicPlayers: response.publicPlayers, + mutators, + gameMode, + gameModeDisplay: gameModeMap[gameMode] ?? gameMode, + uuInstalled: (response.attributes[ServerAttribute.uu] as number) === 1, + gameOptions, + forcedMutators, + passwordProtected: + (response.attributes[ServerAttribute.uuServerFlags] as number) === 1, + soloScores: response.attributes[ServerAttribute.uuSoloScores] as string, + teamScores: response.attributes[ServerAttribute.uuTeamScores] as string, + teamSizes: response.attributes[ServerAttribute.uuTeamSizes] as string + }; + } - return { - mapMatch - }; + return { + mapMatch + }; } diff --git a/UT4MasterServer.Web/src/pages/Servers/hooks/use-quick-play.hook.ts b/UT4MasterServer.Web/src/pages/Servers/hooks/use-quick-play.hook.ts index c925ef42..cc38f572 100644 --- a/UT4MasterServer.Web/src/pages/Servers/hooks/use-quick-play.hook.ts +++ b/UT4MasterServer.Web/src/pages/Servers/hooks/use-quick-play.hook.ts @@ -9,36 +9,36 @@ import { IQuickPlayServer } from '../types/quick-play-server'; import { useMatch } from './use-match.hook'; export function useQuickPlay() { - const { mapMatch } = useMatch(); + const { mapMatch } = useMatch(); - function quickPlayFilter(r: IMatchmakingResponse) { - return (r.attributes[ServerAttribute.ranked] as number) > 0; - } + function quickPlayFilter(r: IMatchmakingResponse) { + return (r.attributes[ServerAttribute.ranked] as number) > 0; + } - function mapQuickPlayServer( - response: IMatchmakingResponse - ): IQuickPlayServer { - const gameMode = response.attributes[ServerAttribute.gameMode] as GameMode; - return { - ...mapMatch(response, {}), - id: response.attributes[ServerAttribute.dcid] as string, - gameMode, - gameModeDisplay: gameModeMap[gameMode] ?? gameMode, - region: response.attributes[ServerAttribute.region] as string, - targetElo: - (response.attributes[ServerAttribute.targetElo] as number) ?? undefined - }; - } + function mapQuickPlayServer( + response: IMatchmakingResponse + ): IQuickPlayServer { + const gameMode = response.attributes[ServerAttribute.gameMode] as GameMode; + return { + ...mapMatch(response, {}), + id: response.attributes[ServerAttribute.dcid] as string, + gameMode, + gameModeDisplay: gameModeMap[gameMode] ?? gameMode, + region: response.attributes[ServerAttribute.region] as string, + targetElo: + (response.attributes[ServerAttribute.targetElo] as number) ?? undefined + }; + } - if (!ServerStore.allServers.length) { - ServerStore.fetchAllServers(); - } + if (!ServerStore.allServers.length) { + ServerStore.fetchAllServers(); + } - const quickPlayServers = computed(() => - ServerStore.allServers.filter(quickPlayFilter).map(mapQuickPlayServer) - ); + const quickPlayServers = computed(() => + ServerStore.allServers.filter(quickPlayFilter).map(mapQuickPlayServer) + ); - return { - quickPlayServers - }; + return { + quickPlayServers + }; } diff --git a/UT4MasterServer.Web/src/pages/Servers/hooks/use-servers.hook.ts b/UT4MasterServer.Web/src/pages/Servers/hooks/use-servers.hook.ts index 9e1ab97d..b6482087 100644 --- a/UT4MasterServer.Web/src/pages/Servers/hooks/use-servers.hook.ts +++ b/UT4MasterServer.Web/src/pages/Servers/hooks/use-servers.hook.ts @@ -8,35 +8,35 @@ import { useHubs } from './use-hubs.hook'; import { useMatch } from './use-match.hook'; export function useServers() { - const { mapMatch } = useMatch(); - const { hubFilter } = useHubs(); + const { mapMatch } = useMatch(); + const { hubFilter } = useHubs(); - function serverFilter(r: IMatchmakingResponse) { - return ( - r.attributes[ServerAttribute.gameInstance] !== 1 && - r.attributes[ServerAttribute.gameMode] !== 'EMPTY' && - !hubFilter(r) - ); - } + function serverFilter(r: IMatchmakingResponse) { + return ( + r.attributes[ServerAttribute.gameInstance] !== 1 && + r.attributes[ServerAttribute.gameMode] !== 'EMPTY' && + !hubFilter(r) + ); + } - function mapServer(response: IMatchmakingResponse): IServer { - return { - ...mapMatch(response, {}), - serverTrustLevel: response.attributes[ - ServerAttribute.serverTrustLevel - ] as GameServerTrust - }; - } + function mapServer(response: IMatchmakingResponse): IServer { + return { + ...mapMatch(response, {}), + serverTrustLevel: response.attributes[ + ServerAttribute.serverTrustLevel + ] as GameServerTrust + }; + } - if (!ServerStore.allServers.length) { - ServerStore.fetchAllServers(); - } + if (!ServerStore.allServers.length) { + ServerStore.fetchAllServers(); + } - const servers = computed(() => - ServerStore.allServers.filter(serverFilter).map(mapServer) - ); + const servers = computed(() => + ServerStore.allServers.filter(serverFilter).map(mapServer) + ); - return { - servers - }; + return { + servers + }; } diff --git a/UT4MasterServer.Web/src/pages/Servers/services/servers.service.ts b/UT4MasterServer.Web/src/pages/Servers/services/servers.service.ts index ad95473c..9169c51f 100644 --- a/UT4MasterServer.Web/src/pages/Servers/services/servers.service.ts +++ b/UT4MasterServer.Web/src/pages/Servers/services/servers.service.ts @@ -3,12 +3,12 @@ import HttpService from '@/services//http.service'; import { IMatchmakingResponse } from '../types/matchmaking-response'; export default class ServerService extends HttpService { - private baseUrl = `${__BACKEND_URL}/ut/api/matchmaking/session`; + private baseUrl = `${__BACKEND_URL}/ut/api/matchmaking/session`; - async getAllServers() { - return await this.get( - `${this.baseUrl}/matchMakingRequest` - ); - //return getServersTestResponse; - } + async getAllServers() { + return await this.get( + `${this.baseUrl}/matchMakingRequest` + ); + //return getServersTestResponse; + } } diff --git a/UT4MasterServer.Web/src/pages/Servers/stores/server.store.ts b/UT4MasterServer.Web/src/pages/Servers/stores/server.store.ts index afe6834b..e08ed483 100644 --- a/UT4MasterServer.Web/src/pages/Servers/stores/server.store.ts +++ b/UT4MasterServer.Web/src/pages/Servers/stores/server.store.ts @@ -8,23 +8,23 @@ const _serverService = new ServerService(); const _status = ref(AsyncStatus.OK); export const ServerStore = { - get allServers() { - return _allServers.value; - }, - get status() { - return _status.value; - }, - async fetchAllServers() { - try { - if (_status.value === AsyncStatus.BUSY) { - return; - } - _status.value = AsyncStatus.BUSY; - _allServers.value = await _serverService.getAllServers(); - _status.value = AsyncStatus.OK; - } catch (err: unknown) { - console.error('Error fetching servers:', err); - _status.value = AsyncStatus.ERROR; - } - } + get allServers() { + return _allServers.value; + }, + get status() { + return _status.value; + }, + async fetchAllServers() { + try { + if (_status.value === AsyncStatus.BUSY) { + return; + } + _status.value = AsyncStatus.BUSY; + _allServers.value = await _serverService.getAllServers(); + _status.value = AsyncStatus.OK; + } catch (err: unknown) { + console.error('Error fetching servers:', err); + _status.value = AsyncStatus.ERROR; + } + } }; diff --git a/UT4MasterServer.Web/src/pages/Servers/types/hub.ts b/UT4MasterServer.Web/src/pages/Servers/types/hub.ts index 874b5393..7235ca18 100644 --- a/UT4MasterServer.Web/src/pages/Servers/types/hub.ts +++ b/UT4MasterServer.Web/src/pages/Servers/types/hub.ts @@ -2,12 +2,12 @@ import { GameServerTrust } from '@/enums/game-server-trust'; import { IMatch } from './match'; export interface IHub { - id: string; - serverName: string; - serverTrustLevel: GameServerTrust; - matches: IMatch[]; - totalPlayers: number; - customMatchNames: Record; - uuInstalled: boolean; - forcedMutators: string[]; + id: string; + serverName: string; + serverTrustLevel: GameServerTrust; + matches: IMatch[]; + totalPlayers: number; + customMatchNames: Record; + uuInstalled: boolean; + forcedMutators: string[]; } diff --git a/UT4MasterServer.Web/src/pages/Servers/types/match.ts b/UT4MasterServer.Web/src/pages/Servers/types/match.ts index 3a6dfdda..de5e48a5 100644 --- a/UT4MasterServer.Web/src/pages/Servers/types/match.ts +++ b/UT4MasterServer.Web/src/pages/Servers/types/match.ts @@ -2,25 +2,25 @@ import { GameMode } from '../enums/game-mode'; import { MatchState } from '../enums/match-state'; export interface IMatch { - id: string; - name: string; - gameType: string; - map: string; - duration: number; - elapsedTime: number; - publicPlayers: string[]; - playersOnline: number; - maxPlayers: number; - matchState: MatchState; - matchStateDisplay: string; - gameMode: GameMode; - gameModeDisplay: string; - mutators: string[]; - uuInstalled: boolean; - gameOptions: Record; - forcedMutators: string[]; - passwordProtected: boolean; - teamSizes: string; - teamScores: string; - soloScores: string; + id: string; + name: string; + gameType: string; + map: string; + duration: number; + elapsedTime: number; + publicPlayers: string[]; + playersOnline: number; + maxPlayers: number; + matchState: MatchState; + matchStateDisplay: string; + gameMode: GameMode; + gameModeDisplay: string; + mutators: string[]; + uuInstalled: boolean; + gameOptions: Record; + forcedMutators: string[]; + passwordProtected: boolean; + teamSizes: string; + teamScores: string; + soloScores: string; } diff --git a/UT4MasterServer.Web/src/pages/Servers/types/matchmaking-response.ts b/UT4MasterServer.Web/src/pages/Servers/types/matchmaking-response.ts index 255cf69d..9c6ad68f 100644 --- a/UT4MasterServer.Web/src/pages/Servers/types/matchmaking-response.ts +++ b/UT4MasterServer.Web/src/pages/Servers/types/matchmaking-response.ts @@ -2,29 +2,29 @@ import { SimpleType } from '@/types/simple-type'; import { ServerAttribute } from '../enums/server-attribute'; export interface IMatchmakingResponse { - id: string; - ownerId: string; - ownerName: string; - serverName: string; - serverAddress: string; - serverPort: number; - maxPublicPlayers: number; - openPublicPlayers: number; - maxPrivatePlayers: number; - openPrivatePlayers: number; - attributes: Record; - publicPlayers: string[]; - privatePlayers: string[]; - totalPlayers: number; - allowJoinInProgress: boolean; - shouldAdvertise: boolean; - isDedicated: boolean; - usesStats: boolean; - allowInvites: boolean; - usesPresence: boolean; - allowJoinViaPresence: boolean; - allowJoinViaPresenceFriendsOnly: boolean; - buildUniqueId: string; - lastUpdated: string; - started: boolean; + id: string; + ownerId: string; + ownerName: string; + serverName: string; + serverAddress: string; + serverPort: number; + maxPublicPlayers: number; + openPublicPlayers: number; + maxPrivatePlayers: number; + openPrivatePlayers: number; + attributes: Record; + publicPlayers: string[]; + privatePlayers: string[]; + totalPlayers: number; + allowJoinInProgress: boolean; + shouldAdvertise: boolean; + isDedicated: boolean; + usesStats: boolean; + allowInvites: boolean; + usesPresence: boolean; + allowJoinViaPresence: boolean; + allowJoinViaPresenceFriendsOnly: boolean; + buildUniqueId: string; + lastUpdated: string; + started: boolean; } diff --git a/UT4MasterServer.Web/src/pages/Servers/types/quick-play-server.ts b/UT4MasterServer.Web/src/pages/Servers/types/quick-play-server.ts index 6cec6839..320d803d 100644 --- a/UT4MasterServer.Web/src/pages/Servers/types/quick-play-server.ts +++ b/UT4MasterServer.Web/src/pages/Servers/types/quick-play-server.ts @@ -2,9 +2,9 @@ import { GameMode } from '../enums/game-mode'; import { IMatch } from './match'; export interface IQuickPlayServer extends Partial { - id: string; - region: string; - gameMode: GameMode; - gameModeDisplay: string; - targetElo?: number; + id: string; + region: string; + gameMode: GameMode; + gameModeDisplay: string; + targetElo?: number; } diff --git a/UT4MasterServer.Web/src/pages/Servers/types/server.ts b/UT4MasterServer.Web/src/pages/Servers/types/server.ts index 42ac2441..11370df6 100644 --- a/UT4MasterServer.Web/src/pages/Servers/types/server.ts +++ b/UT4MasterServer.Web/src/pages/Servers/types/server.ts @@ -2,5 +2,5 @@ import { GameServerTrust } from '@/enums/game-server-trust'; import { IMatch } from './match'; export interface IServer extends Partial { - serverTrustLevel: GameServerTrust; + serverTrustLevel: GameServerTrust; } diff --git a/UT4MasterServer.Web/src/pages/Stats/Stats.vue b/UT4MasterServer.Web/src/pages/Stats/Stats.vue index 938ae45a..b59102c7 100644 --- a/UT4MasterServer.Web/src/pages/Stats/Stats.vue +++ b/UT4MasterServer.Web/src/pages/Stats/Stats.vue @@ -1,52 +1,52 @@ diff --git a/UT4MasterServer.Web/src/pages/Stats/components/StatCard.vue b/UT4MasterServer.Web/src/pages/Stats/components/StatCard.vue index 057b2e16..51d3f3d8 100644 --- a/UT4MasterServer.Web/src/pages/Stats/components/StatCard.vue +++ b/UT4MasterServer.Web/src/pages/Stats/components/StatCard.vue @@ -1,42 +1,42 @@ @@ -49,56 +49,56 @@ import { StatisticDisplay } from '@/enums/statistic-display'; import { toHoursMinutesSeconds } from '@/utils/utilities'; const props = defineProps({ - card: { - type: Object as PropType, - required: true - }, - data: { - type: Array as PropType, - default: () => [] - } + card: { + type: Object as PropType, + required: true + }, + data: { + type: Array as PropType, + default: () => [] + } }); const imgIconUrl = new URL( - `../../../assets/weapons/${props.card.headingIcon}`, - import.meta.url + `../../../assets/weapons/${props.card.headingIcon}`, + import.meta.url ).href; function getAccuracy(): string { - const shots = props.card.stats.find((s) => s.includes('Shots')); - const hits = props.card.stats.find((s) => s.includes('Hits')); - if (shots && hits) { - const shotValue = getStatValue(shots); - const hitValue = getStatValue(hits); - if (shotValue > 0) { - return `${((hitValue / shotValue) * 100).toFixed(2)}%`; - } - } - return '0.00%'; + const shots = props.card.stats.find((s) => s.includes('Shots')); + const hits = props.card.stats.find((s) => s.includes('Hits')); + if (shots && hits) { + const shotValue = getStatValue(shots); + const hitValue = getStatValue(hits); + if (shotValue > 0) { + return `${((hitValue / shotValue) * 100).toFixed(2)}%`; + } + } + return '0.00%'; } function getStatValue(stat: Statistic): number { - const matchingStat = props.data.find((d) => d.name === stat); - let value = matchingStat?.value ?? 0; - if (stat.includes('Dist') || stat.includes('Hits')) { - value = value / 100; - } + const matchingStat = props.data.find((d) => d.name === stat); + let value = matchingStat?.value ?? 0; + if (stat.includes('Dist') || stat.includes('Hits')) { + value = value / 100; + } - return value; + return value; } function getStatValueDisplay(stat: Statistic): string { - if (stat === Statistic.Accuracy) { - return getAccuracy(); - } - const value = getStatValue(stat); - if (stat === Statistic.TimePlayed) { - return toHoursMinutesSeconds(value); - } - if (stat.includes('Dist')) { - return `${value}m`; - } + if (stat === Statistic.Accuracy) { + return getAccuracy(); + } + const value = getStatValue(stat); + if (stat === Statistic.TimePlayed) { + return toHoursMinutesSeconds(value); + } + if (stat.includes('Dist')) { + return `${value}m`; + } - return `${value}`; + return `${value}`; } diff --git a/UT4MasterServer.Web/src/pages/Stats/components/StatSection.vue b/UT4MasterServer.Web/src/pages/Stats/components/StatSection.vue index caace564..a7d9982d 100644 --- a/UT4MasterServer.Web/src/pages/Stats/components/StatSection.vue +++ b/UT4MasterServer.Web/src/pages/Stats/components/StatSection.vue @@ -1,22 +1,22 @@ @@ -27,13 +27,13 @@ import { PropType } from 'vue'; import StatCard from './StatCard.vue'; defineProps({ - section: { - type: Object as PropType, - required: true - }, - data: { - type: Array as PropType, - default: () => [] - } + section: { + type: Object as PropType, + required: true + }, + data: { + type: Array as PropType, + default: () => [] + } }); diff --git a/UT4MasterServer.Web/src/pages/Stats/data/statistics-config.ts b/UT4MasterServer.Web/src/pages/Stats/data/statistics-config.ts index bbf77e44..548d1131 100644 --- a/UT4MasterServer.Web/src/pages/Stats/data/statistics-config.ts +++ b/UT4MasterServer.Web/src/pages/Stats/data/statistics-config.ts @@ -2,279 +2,279 @@ import { Statistic } from '@/enums/statistic'; import { IStatisticSection } from '@/types/statistic-config'; export const statSections: IStatisticSection[] = [ - { - heading: 'Overall Stats', - cards: [ - { - heading: 'Quick Look', - stats: [ - Statistic.SkillRating, - Statistic.TDMSkillRating, - Statistic.CTFSkillRating, - Statistic.DMSkillRating, - Statistic.ShowdownSkillRating, - Statistic.MatchesPlayed, - Statistic.MatchesQuit, - Statistic.TimePlayed, - Statistic.Wins, - Statistic.Losses, - Statistic.Kills, - Statistic.Deaths, - Statistic.Suicides - ] - }, - { - heading: 'Kill Achievements', - stats: [ - Statistic.MultiKillLevel0, - Statistic.MultiKillLevel1, - Statistic.MultiKillLevel2, - Statistic.MultiKillLevel3, - Statistic.SpreeKillLevel0, - Statistic.SpreeKillLevel1, - Statistic.SpreeKillLevel2, - Statistic.SpreeKillLevel3, - Statistic.SpreeKillLevel4, - Statistic.BestShockCombo, - Statistic.AmazingCombos, - Statistic.AirRox, - Statistic.FlakShreds, - Statistic.AirSnot - ] - }, - { - heading: 'Power Up Achievements', - stats: [ - Statistic.UDamageTime, - Statistic.BerserkTime, - Statistic.InvisibilityTime, - Statistic.UDamageCount, - Statistic.BerserkCount, - Statistic.InvisibilityCount, - Statistic.BootJumps, - Statistic.ShieldBeltCount, - Statistic.ArmorVestCount, - Statistic.ArmorPadsCount, - Statistic.HelmetCount, - Statistic.KegCount - ] - } - ] - }, - { - heading: 'Weapon Stats', - cards: [ - { - heading: 'Impact Hammer', - headingIcon: 'ih.png', - stats: [Statistic.ImpactHammerKills, Statistic.ImpactHammerDeaths] - }, - { - heading: 'Enforcer', - headingIcon: 'en.png', - stats: [ - Statistic.EnforcerKills, - Statistic.EnforcerDeaths, - Statistic.EnforcerShots, - Statistic.EnforcerHits, - Statistic.Accuracy - ] - }, - { - heading: 'Bio Rifle', - headingIcon: 'br.png', - stats: [ - Statistic.BioRifleKills, - Statistic.BioRifleDeaths, - Statistic.BioRifleShots, - Statistic.BioRifleHits, - Statistic.Accuracy - ] - }, - { - heading: 'Grenade Launcher', - headingIcon: 'br.png', - stats: [ - Statistic.BioLauncherKills, - Statistic.BioLauncherDeaths, - Statistic.BioLauncherShots, - Statistic.BioLauncherHits, - Statistic.Accuracy - ] - }, - { - heading: 'Shock Rifle', - headingIcon: 'sr.png', - stats: [ - Statistic.ShockBeamKills, - Statistic.ShockBeamDeaths, - Statistic.ShockCoreKills, - Statistic.ShockCoreDeaths, - Statistic.ShockComboKills, - Statistic.ShockComboDeaths, - Statistic.ShockRifleShots, - Statistic.ShockRifleHits, - Statistic.Accuracy - ] - }, - { - heading: 'Link Gun', - headingIcon: 'lr.png', - stats: [ - Statistic.LinkKills, - Statistic.LinkDeaths, - Statistic.LinkBeamKills, - Statistic.LinkBeamDeaths, - Statistic.LinkShots, - Statistic.LinkHits, - Statistic.Accuracy - ] - }, - { - heading: 'Minigun', - headingIcon: 'mg.png', - stats: [ - Statistic.MinigunKills, - Statistic.MinigunDeaths, - Statistic.MinigunShardKills, - Statistic.MinigunShardDeaths, - Statistic.MinigunShots, - Statistic.MinigunHits, - Statistic.Accuracy - ] - }, - { - heading: 'Flak Cannon', - headingIcon: 'fc.png', - stats: [ - Statistic.FlakShardKills, - Statistic.FlakShardDeaths, - Statistic.FlakShellKills, - Statistic.FlakShellDeaths, - Statistic.FlakShots, - Statistic.FlakHits, - Statistic.Accuracy - ] - }, - { - heading: 'Rocket Launcher', - headingIcon: 'rl.png', - stats: [ - Statistic.RocketKills, - Statistic.RocketDeaths, - Statistic.RocketShots, - Statistic.RocketHits, - Statistic.Accuracy - ] - }, - { - heading: 'Sniper', - headingIcon: 'snr.png', - stats: [ - Statistic.SniperKills, - Statistic.SniperDeaths, - Statistic.SniperHeadshotKills, - Statistic.SniperHeadshotDeaths, - Statistic.SniperShots, - Statistic.SniperHits, - Statistic.Accuracy - ] - }, - { - heading: 'Lightning Rifle', - headingIcon: 'lightning.png', - stats: [ - Statistic.LightningRiflePrimaryKills, - Statistic.LightningRiflePrimaryDeaths, - Statistic.LightningRifleSecondaryKills, - Statistic.LightningRifleSecondaryDeaths, - Statistic.LightningRifleShots, - Statistic.LightningRifleHits, - Statistic.Accuracy - ] - }, - { - heading: 'Redeemer', - headingIcon: 'rd.png', - stats: [ - Statistic.RedeemerKills, - Statistic.RedeemerDeaths, - Statistic.RedeemerShots, - Statistic.RedeemerHits, - Statistic.Accuracy - ] - }, - { - heading: 'Instagib', - headingIcon: 'sr.png', - stats: [ - Statistic.InstagibKills, - Statistic.InstagibDeaths, - Statistic.InstagibShots, - Statistic.InstagibHits, - Statistic.Accuracy - ] - }, - { - heading: 'Translocator', - headingIcon: 'xloc.png', - stats: [Statistic.TelefragKills, Statistic.TelefragDeaths] - } - ] - }, - { - heading: 'Miscellaneous', - cards: [ - { - heading: 'Movement', - stats: [ - Statistic.RunDist, - Statistic.SprintDist, - Statistic.InAirDist, - Statistic.SwimDist, - Statistic.TranslocDist, - Statistic.NumDodges, - Statistic.NumWallDodges, - Statistic.NumJumps, - Statistic.NumLiftJumps, - Statistic.NumFloorSlides, - Statistic.NumWallRuns, - Statistic.NumImpactJumps, - Statistic.NumRocketJumps, - Statistic.SlideDist, - Statistic.WallRunDist - ] - }, - { - heading: 'Capture the Flag', - stats: [ - Statistic.FlagCaptures, - Statistic.FlagReturns, - Statistic.FlagAssists, - Statistic.FlagHeldDeny, - Statistic.FlagHeldDenyTime, - Statistic.FlagHeldTime, - Statistic.FlagReturnPoints, - Statistic.CarryAssist, - Statistic.CarryAssistPoints, - Statistic.FlagCapPoints, - Statistic.DefendAssist, - Statistic.DefendAssistPoints, - Statistic.ReturnAssist, - Statistic.ReturnAssistPoints, - Statistic.TeamCapPoints, - Statistic.EnemyFCDamage, - Statistic.FCKills, - Statistic.FCKillPoints, - Statistic.FlagSupportKills, - Statistic.FlagSupportKillPoints, - Statistic.RegularKillPoints, - Statistic.FlagGrabs, - Statistic.AttackerScore, - Statistic.DefenderScore, - Statistic.SupporterScore - ] - } - ] - } + { + heading: 'Overall Stats', + cards: [ + { + heading: 'Quick Look', + stats: [ + Statistic.SkillRating, + Statistic.TDMSkillRating, + Statistic.CTFSkillRating, + Statistic.DMSkillRating, + Statistic.ShowdownSkillRating, + Statistic.MatchesPlayed, + Statistic.MatchesQuit, + Statistic.TimePlayed, + Statistic.Wins, + Statistic.Losses, + Statistic.Kills, + Statistic.Deaths, + Statistic.Suicides + ] + }, + { + heading: 'Kill Achievements', + stats: [ + Statistic.MultiKillLevel0, + Statistic.MultiKillLevel1, + Statistic.MultiKillLevel2, + Statistic.MultiKillLevel3, + Statistic.SpreeKillLevel0, + Statistic.SpreeKillLevel1, + Statistic.SpreeKillLevel2, + Statistic.SpreeKillLevel3, + Statistic.SpreeKillLevel4, + Statistic.BestShockCombo, + Statistic.AmazingCombos, + Statistic.AirRox, + Statistic.FlakShreds, + Statistic.AirSnot + ] + }, + { + heading: 'Power Up Achievements', + stats: [ + Statistic.UDamageTime, + Statistic.BerserkTime, + Statistic.InvisibilityTime, + Statistic.UDamageCount, + Statistic.BerserkCount, + Statistic.InvisibilityCount, + Statistic.BootJumps, + Statistic.ShieldBeltCount, + Statistic.ArmorVestCount, + Statistic.ArmorPadsCount, + Statistic.HelmetCount, + Statistic.KegCount + ] + } + ] + }, + { + heading: 'Weapon Stats', + cards: [ + { + heading: 'Impact Hammer', + headingIcon: 'ih.png', + stats: [Statistic.ImpactHammerKills, Statistic.ImpactHammerDeaths] + }, + { + heading: 'Enforcer', + headingIcon: 'en.png', + stats: [ + Statistic.EnforcerKills, + Statistic.EnforcerDeaths, + Statistic.EnforcerShots, + Statistic.EnforcerHits, + Statistic.Accuracy + ] + }, + { + heading: 'Bio Rifle', + headingIcon: 'br.png', + stats: [ + Statistic.BioRifleKills, + Statistic.BioRifleDeaths, + Statistic.BioRifleShots, + Statistic.BioRifleHits, + Statistic.Accuracy + ] + }, + { + heading: 'Grenade Launcher', + headingIcon: 'br.png', + stats: [ + Statistic.BioLauncherKills, + Statistic.BioLauncherDeaths, + Statistic.BioLauncherShots, + Statistic.BioLauncherHits, + Statistic.Accuracy + ] + }, + { + heading: 'Shock Rifle', + headingIcon: 'sr.png', + stats: [ + Statistic.ShockBeamKills, + Statistic.ShockBeamDeaths, + Statistic.ShockCoreKills, + Statistic.ShockCoreDeaths, + Statistic.ShockComboKills, + Statistic.ShockComboDeaths, + Statistic.ShockRifleShots, + Statistic.ShockRifleHits, + Statistic.Accuracy + ] + }, + { + heading: 'Link Gun', + headingIcon: 'lr.png', + stats: [ + Statistic.LinkKills, + Statistic.LinkDeaths, + Statistic.LinkBeamKills, + Statistic.LinkBeamDeaths, + Statistic.LinkShots, + Statistic.LinkHits, + Statistic.Accuracy + ] + }, + { + heading: 'Minigun', + headingIcon: 'mg.png', + stats: [ + Statistic.MinigunKills, + Statistic.MinigunDeaths, + Statistic.MinigunShardKills, + Statistic.MinigunShardDeaths, + Statistic.MinigunShots, + Statistic.MinigunHits, + Statistic.Accuracy + ] + }, + { + heading: 'Flak Cannon', + headingIcon: 'fc.png', + stats: [ + Statistic.FlakShardKills, + Statistic.FlakShardDeaths, + Statistic.FlakShellKills, + Statistic.FlakShellDeaths, + Statistic.FlakShots, + Statistic.FlakHits, + Statistic.Accuracy + ] + }, + { + heading: 'Rocket Launcher', + headingIcon: 'rl.png', + stats: [ + Statistic.RocketKills, + Statistic.RocketDeaths, + Statistic.RocketShots, + Statistic.RocketHits, + Statistic.Accuracy + ] + }, + { + heading: 'Sniper', + headingIcon: 'snr.png', + stats: [ + Statistic.SniperKills, + Statistic.SniperDeaths, + Statistic.SniperHeadshotKills, + Statistic.SniperHeadshotDeaths, + Statistic.SniperShots, + Statistic.SniperHits, + Statistic.Accuracy + ] + }, + { + heading: 'Lightning Rifle', + headingIcon: 'lightning.png', + stats: [ + Statistic.LightningRiflePrimaryKills, + Statistic.LightningRiflePrimaryDeaths, + Statistic.LightningRifleSecondaryKills, + Statistic.LightningRifleSecondaryDeaths, + Statistic.LightningRifleShots, + Statistic.LightningRifleHits, + Statistic.Accuracy + ] + }, + { + heading: 'Redeemer', + headingIcon: 'rd.png', + stats: [ + Statistic.RedeemerKills, + Statistic.RedeemerDeaths, + Statistic.RedeemerShots, + Statistic.RedeemerHits, + Statistic.Accuracy + ] + }, + { + heading: 'Instagib', + headingIcon: 'sr.png', + stats: [ + Statistic.InstagibKills, + Statistic.InstagibDeaths, + Statistic.InstagibShots, + Statistic.InstagibHits, + Statistic.Accuracy + ] + }, + { + heading: 'Translocator', + headingIcon: 'xloc.png', + stats: [Statistic.TelefragKills, Statistic.TelefragDeaths] + } + ] + }, + { + heading: 'Miscellaneous', + cards: [ + { + heading: 'Movement', + stats: [ + Statistic.RunDist, + Statistic.SprintDist, + Statistic.InAirDist, + Statistic.SwimDist, + Statistic.TranslocDist, + Statistic.NumDodges, + Statistic.NumWallDodges, + Statistic.NumJumps, + Statistic.NumLiftJumps, + Statistic.NumFloorSlides, + Statistic.NumWallRuns, + Statistic.NumImpactJumps, + Statistic.NumRocketJumps, + Statistic.SlideDist, + Statistic.WallRunDist + ] + }, + { + heading: 'Capture the Flag', + stats: [ + Statistic.FlagCaptures, + Statistic.FlagReturns, + Statistic.FlagAssists, + Statistic.FlagHeldDeny, + Statistic.FlagHeldDenyTime, + Statistic.FlagHeldTime, + Statistic.FlagReturnPoints, + Statistic.CarryAssist, + Statistic.CarryAssistPoints, + Statistic.FlagCapPoints, + Statistic.DefendAssist, + Statistic.DefendAssistPoints, + Statistic.ReturnAssist, + Statistic.ReturnAssistPoints, + Statistic.TeamCapPoints, + Statistic.EnemyFCDamage, + Statistic.FCKills, + Statistic.FCKillPoints, + Statistic.FlagSupportKills, + Statistic.FlagSupportKillPoints, + Statistic.RegularKillPoints, + Statistic.FlagGrabs, + Statistic.AttackerScore, + Statistic.DefenderScore, + Statistic.SupporterScore + ] + } + ] + } ]; diff --git a/UT4MasterServer.Web/src/route-guards.ts b/UT4MasterServer.Web/src/route-guards.ts index 8fe09895..9f0f25ae 100644 --- a/UT4MasterServer.Web/src/route-guards.ts +++ b/UT4MasterServer.Web/src/route-guards.ts @@ -5,24 +5,24 @@ import { AccountStore } from './stores/account-store'; const authenticationService = new AuthenticationService(); export async function publicGuard() { - if (await authenticationService.checkAuth()) { - return { path: '/Profile' }; - } + if (await authenticationService.checkAuth()) { + return { path: '/Profile' }; + } } export async function privateGuard(to: RouteLocationNormalized) { - // ensure that when entering a private page that the account is loaded - if (AccountStore.account === null) { - AccountStore.fetchUserAccount(); - } - if (!(await authenticationService.checkAuth())) { - return { path: '/Login/', query: { redirect: to.path } }; - } + // ensure that when entering a private page that the account is loaded + if (AccountStore.account === null) { + AccountStore.fetchUserAccount(); + } + if (!(await authenticationService.checkAuth())) { + return { path: '/Login/', query: { redirect: to.path } }; + } } export async function adminGuard() { - if (AccountStore.account === null) { - await AccountStore.fetchUserAccount(); - } - return AccountStore.isAdmin; + if (AccountStore.account === null) { + await AccountStore.fetchUserAccount(); + } + return AccountStore.isAdmin; } diff --git a/UT4MasterServer.Web/src/routes.ts b/UT4MasterServer.Web/src/routes.ts index 41b0fd29..c526ebda 100644 --- a/UT4MasterServer.Web/src/routes.ts +++ b/UT4MasterServer.Web/src/routes.ts @@ -2,120 +2,120 @@ import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; import { adminGuard, privateGuard, publicGuard } from './route-guards'; export const routes: RouteRecordRaw[] = [ - // Secure Pages - { - name: 'Stats', - path: `/Stats/:window?/:accountId?`, - component: async () => import('./pages/Stats/Stats.vue'), - beforeEnter: privateGuard - }, - { - path: `/Profile`, - component: async () => import('./pages/Profile/Profile.vue'), - redirect: '/Profile/PlayerCard', - beforeEnter: privateGuard, - children: [ - { - path: `PlayerCard`, - component: async () => import('./pages/Profile/PlayerCard.vue'), - beforeEnter: privateGuard - }, - { - path: `ChangeUsername`, - component: async () => import('./pages/Profile/ChangeUsername.vue'), - beforeEnter: privateGuard - }, - { - path: `ChangePassword`, - component: async () => import('./pages/Profile/ChangePassword.vue'), - beforeEnter: privateGuard - }, - { - path: `ChangeEmail`, - component: async () => import('./pages/Profile/ChangeEmail.vue'), - beforeEnter: privateGuard - } - ] - }, - // Admin Pages - { - path: `/Admin`, - children: [ - { - path: `Accounts`, - component: async () => import('./pages/Admin/Accounts/Accounts.vue'), - beforeEnter: adminGuard - }, - { - path: `Clients`, - component: async () => import('./pages/Admin/Clients/Clients.vue'), - beforeEnter: adminGuard - }, - { - path: `TrustedServers`, - component: async () => - import('./pages/Admin/TrustedServers/TrustedServers.vue'), - beforeEnter: adminGuard - }, - { - path: `CloudFiles`, - component: async () => - import('./pages/Admin/CloudFiles/CloudFiles.vue'), - beforeEnter: adminGuard - } - ] - }, - // Public Pages - { - path: `/Instructions`, - children: [ - { - path: `StockUT4`, - component: async () => import('./pages/Instructions/StockUT4.vue') - }, - { - path: `UT4UU`, - component: async () => import('./pages/Instructions/UT4UU.vue') - }, - { - path: `HubOwners`, - component: async () => import('./pages/Instructions/HubOwners.vue') - } - ] - }, - { - path: `/Servers`, - component: async () => import('./pages/Servers/Servers.vue') - }, - { - name: 'Rankings', - path: `/Rankings/:type?/:page?`, - component: async () => import('./pages/Rankings/Rankings.vue') - }, - // Public Only Pages - { - path: `/Register`, - component: async () => import('./pages/Register.vue'), - beforeEnter: publicGuard - }, - { - path: `/Login`, - component: async () => import('./pages/Login.vue'), - beforeEnter: publicGuard - }, - { - path: `/`, - redirect: '/Login' - }, - { - path: '/:catchAll(.*)', - component: async () => import('./pages/NotFound.vue') - } + // Secure Pages + { + name: 'Stats', + path: `/Stats/:window?/:accountId?`, + component: async () => import('./pages/Stats/Stats.vue'), + beforeEnter: privateGuard + }, + { + path: `/Profile`, + component: async () => import('./pages/Profile/Profile.vue'), + redirect: '/Profile/PlayerCard', + beforeEnter: privateGuard, + children: [ + { + path: `PlayerCard`, + component: async () => import('./pages/Profile/PlayerCard.vue'), + beforeEnter: privateGuard + }, + { + path: `ChangeUsername`, + component: async () => import('./pages/Profile/ChangeUsername.vue'), + beforeEnter: privateGuard + }, + { + path: `ChangePassword`, + component: async () => import('./pages/Profile/ChangePassword.vue'), + beforeEnter: privateGuard + }, + { + path: `ChangeEmail`, + component: async () => import('./pages/Profile/ChangeEmail.vue'), + beforeEnter: privateGuard + } + ] + }, + // Admin Pages + { + path: `/Admin`, + children: [ + { + path: `Accounts`, + component: async () => import('./pages/Admin/Accounts/Accounts.vue'), + beforeEnter: adminGuard + }, + { + path: `Clients`, + component: async () => import('./pages/Admin/Clients/Clients.vue'), + beforeEnter: adminGuard + }, + { + path: `TrustedServers`, + component: async () => + import('./pages/Admin/TrustedServers/TrustedServers.vue'), + beforeEnter: adminGuard + }, + { + path: `CloudFiles`, + component: async () => + import('./pages/Admin/CloudFiles/CloudFiles.vue'), + beforeEnter: adminGuard + } + ] + }, + // Public Pages + { + path: `/Instructions`, + children: [ + { + path: `StockUT4`, + component: async () => import('./pages/Instructions/StockUT4.vue') + }, + { + path: `UT4UU`, + component: async () => import('./pages/Instructions/UT4UU.vue') + }, + { + path: `HubOwners`, + component: async () => import('./pages/Instructions/HubOwners.vue') + } + ] + }, + { + path: `/Servers`, + component: async () => import('./pages/Servers/Servers.vue') + }, + { + name: 'Rankings', + path: `/Rankings/:type?/:page?`, + component: async () => import('./pages/Rankings/Rankings.vue') + }, + // Public Only Pages + { + path: `/Register`, + component: async () => import('./pages/Register.vue'), + beforeEnter: publicGuard + }, + { + path: `/Login`, + component: async () => import('./pages/Login.vue'), + beforeEnter: publicGuard + }, + { + path: `/`, + redirect: '/Login' + }, + { + path: '/:catchAll(.*)', + component: async () => import('./pages/NotFound.vue') + } ]; const router = createRouter({ - history: createWebHistory(), - routes + history: createWebHistory(), + routes }); export { router }; diff --git a/UT4MasterServer.Web/src/services/account.service.ts b/UT4MasterServer.Web/src/services/account.service.ts index 98281f10..064c49ee 100644 --- a/UT4MasterServer.Web/src/services/account.service.ts +++ b/UT4MasterServer.Web/src/services/account.service.ts @@ -8,62 +8,62 @@ import { ISearchAccountsResponse } from '@/types/search-accounts-response'; import HttpService from './http.service'; export default class AccountService extends HttpService { - private baseUrl = `${__BACKEND_URL}/account/api`; - private personaBaseUrl = `${__BACKEND_URL}/persona/api`; + private baseUrl = `${__BACKEND_URL}/account/api`; + private personaBaseUrl = `${__BACKEND_URL}/persona/api`; - async register(request: IRegisterRequest) { - return await this.post( - `${this.baseUrl}/create/account`, - { body: request } - ); - } + async register(request: IRegisterRequest) { + return await this.post( + `${this.baseUrl}/create/account`, + { body: request } + ); + } - async changeUsername(request: IChangeUsernameRequest) { - return await this.patch( - `${this.baseUrl}/update/username`, - { body: request } - ); - } + async changeUsername(request: IChangeUsernameRequest) { + return await this.patch( + `${this.baseUrl}/update/username`, + { body: request } + ); + } - async changePassword(request: IChangePasswordRequest) { - return await this.patch( - `${this.baseUrl}/update/password`, - { body: request } - ); - } + async changePassword(request: IChangePasswordRequest) { + return await this.patch( + `${this.baseUrl}/update/password`, + { body: request } + ); + } - async changeEmail(request: IChangeEmailRequest) { - return await this.patch( - `${this.baseUrl}/update/email`, - { body: request } - ); - } + async changeEmail(request: IChangeEmailRequest) { + return await this.patch( + `${this.baseUrl}/update/email`, + { body: request } + ); + } - async getAccount(id: string) { - return await this.get( - `${this.personaBaseUrl}/account/${id}` - ); - } + async getAccount(id: string) { + return await this.get( + `${this.personaBaseUrl}/account/${id}` + ); + } - async searchAccounts( - query = '', - skip = 0, - take = 10, - includeRoles = false, - roles: Role[] | null = null - ) { - return await this.post>( - `${this.personaBaseUrl}/accounts/search`, - { body: { query, skip, take, includeRoles, roles } }, - false - ); - } + async searchAccounts( + query = '', + skip = 0, + take = 10, + includeRoles = false, + roles: Role[] | null = null + ) { + return await this.post>( + `${this.personaBaseUrl}/accounts/search`, + { body: { query, skip, take, includeRoles, roles } }, + false + ); + } - async getAccountsByIds(ids: string[]) { - return await this.post( - `${this.personaBaseUrl}/accounts`, - { body: ids }, - false - ); - } + async getAccountsByIds(ids: string[]) { + return await this.post( + `${this.personaBaseUrl}/accounts`, + { body: ids }, + false + ); + } } diff --git a/UT4MasterServer.Web/src/services/admin.service.ts b/UT4MasterServer.Web/src/services/admin.service.ts index 0b32a155..5a430d9c 100644 --- a/UT4MasterServer.Web/src/services/admin.service.ts +++ b/UT4MasterServer.Web/src/services/admin.service.ts @@ -6,103 +6,103 @@ import { ITrustedGameServer } from '@/pages/Admin/TrustedServers/types/trusted-g import HttpService from './http.service'; export default class AdminService extends HttpService { - private baseUrl = `${__BACKEND_URL}/admin`; - - // Account - async getRoleOptions() { - return await this.get(`${this.baseUrl}/flags`); - } - - async getRolesForAccount(id: string) { - return await this.get(`${this.baseUrl}/flags/${id}`); - } - - async setRolesForAccount(id: string, roles: Role[]) { - return await this.put( - `${this.baseUrl}/flags/${id}`, - { body: roles }, - false - ); - } - - async deleteAccount(id: string) { - return await this.delete( - `${this.baseUrl}/account/${id}`, - { body: true }, - false - ); - } - - async changePassword(id: string, request: IAdminChangePasswordRequest) { - return await this.patch( - `${this.baseUrl}/change_password/${id}`, - { body: request }, - false - ); - } - - // Trusted Servers - async getTrustedServers() { - return await this.get( - `${this.baseUrl}/trusted_servers` - ); - } - - async createTrustedServer(request: Partial) { - return await this.post( - `${this.baseUrl}/trusted_servers`, - { body: request }, - false - ); - } - - async updateTrustedServer(id: string, request: ITrustedGameServer) { - return await this.patch( - `${this.baseUrl}/trusted_servers/${id}`, - { body: request }, - false - ); - } - - async deleteTrustedServer(id: string) { - return await this.delete(`${this.baseUrl}/trusted_servers/${id}`); - } - - // Clients - async getClients() { - return await this.get(`${this.baseUrl}/clients`); - } - - async createClient(name: string) { - return await this.post( - `${this.baseUrl}/clients/new`, - { body: name }, - false - ); - } - - async updateClient(id: string, request: IClient) { - return await this.patch( - `${this.baseUrl}/clients/${id}`, - { body: request }, - false - ); - } - - async deleteClient(id: string) { - return await this.delete(`${this.baseUrl}/clients/${id}`); - } - - // Cloud Files - async getCloudFiles() { - return await this.get(`${this.baseUrl}/mcp_files`); - } - - async upsertCloudFile(formData: FormData) { - return await this.post(`${this.baseUrl}/mcp_files`, { formData }); - } - - async deleteCloudFile(name: string) { - return await this.delete(`${this.baseUrl}/mcp_files/${name}`); - } + private baseUrl = `${__BACKEND_URL}/admin`; + + // Account + async getRoleOptions() { + return await this.get(`${this.baseUrl}/flags`); + } + + async getRolesForAccount(id: string) { + return await this.get(`${this.baseUrl}/flags/${id}`); + } + + async setRolesForAccount(id: string, roles: Role[]) { + return await this.put( + `${this.baseUrl}/flags/${id}`, + { body: roles }, + false + ); + } + + async deleteAccount(id: string) { + return await this.delete( + `${this.baseUrl}/account/${id}`, + { body: true }, + false + ); + } + + async changePassword(id: string, request: IAdminChangePasswordRequest) { + return await this.patch( + `${this.baseUrl}/change_password/${id}`, + { body: request }, + false + ); + } + + // Trusted Servers + async getTrustedServers() { + return await this.get( + `${this.baseUrl}/trusted_servers` + ); + } + + async createTrustedServer(request: Partial) { + return await this.post( + `${this.baseUrl}/trusted_servers`, + { body: request }, + false + ); + } + + async updateTrustedServer(id: string, request: ITrustedGameServer) { + return await this.patch( + `${this.baseUrl}/trusted_servers/${id}`, + { body: request }, + false + ); + } + + async deleteTrustedServer(id: string) { + return await this.delete(`${this.baseUrl}/trusted_servers/${id}`); + } + + // Clients + async getClients() { + return await this.get(`${this.baseUrl}/clients`); + } + + async createClient(name: string) { + return await this.post( + `${this.baseUrl}/clients/new`, + { body: name }, + false + ); + } + + async updateClient(id: string, request: IClient) { + return await this.patch( + `${this.baseUrl}/clients/${id}`, + { body: request }, + false + ); + } + + async deleteClient(id: string) { + return await this.delete(`${this.baseUrl}/clients/${id}`); + } + + // Cloud Files + async getCloudFiles() { + return await this.get(`${this.baseUrl}/mcp_files`); + } + + async upsertCloudFile(formData: FormData) { + return await this.post(`${this.baseUrl}/mcp_files`, { formData }); + } + + async deleteCloudFile(name: string) { + return await this.delete(`${this.baseUrl}/mcp_files/${name}`); + } } diff --git a/UT4MasterServer.Web/src/services/authentication.service.ts b/UT4MasterServer.Web/src/services/authentication.service.ts index 5d9ef57e..fd9fa2f6 100644 --- a/UT4MasterServer.Web/src/services/authentication.service.ts +++ b/UT4MasterServer.Web/src/services/authentication.service.ts @@ -8,115 +8,115 @@ import { IAuthCodeResponse } from '@/types/auth-code-response'; import { AccountStore } from '@/stores/account-store'; export default class AuthenticationService extends HttpService { - private baseUrl = `${__BACKEND_URL}/account/api/oauth`; - private webBasicAuth = - 'basic MzRhMDJjZjhmNDQxNGUyOWIxNTkyMTg3NmRhMzZmOWE6ZGFhZmJjY2M3Mzc3NDUwMzlkZmZlNTNkOTRmYzc2Y2Y='; + private baseUrl = `${__BACKEND_URL}/account/api/oauth`; + private webBasicAuth = + 'basic MzRhMDJjZjhmNDQxNGUyOWIxNTkyMTg3NmRhMzZmOWE6ZGFhZmJjY2M3Mzc3NDUwMzlkZmZlNTNkOTRmYzc2Y2Y='; - async passwordLogin(request: ILoginRequest) { - try { - const session = await this.post( - `${this.baseUrl}/token`, - { - body: request, - headers: { - Authorization: `${this.webBasicAuth}` - } - } - ); - SessionStore.session = session; - } catch (err: unknown) { - SessionStore.session = null; - throw err; - } - } + async passwordLogin(request: ILoginRequest) { + try { + const session = await this.post( + `${this.baseUrl}/token`, + { + body: request, + headers: { + Authorization: `${this.webBasicAuth}` + } + } + ); + SessionStore.session = session; + } catch (err: unknown) { + SessionStore.session = null; + throw err; + } + } - async refreshSession(): Promise { - const tokenValid = - SessionStore.session && - SessionStore.session.refresh_token && - new Date() < new Date(SessionStore.session.refresh_expires_at); - if (!tokenValid || !SessionStore.session) { - // Clear stored session if we have no valid refresh token to attempt session refresh - SessionStore.session = null; - return false; - } - try { - const session = await this.post( - `${this.baseUrl}/token`, - { - body: { - refresh_token: SessionStore.session.refresh_token, - grant_type: GrantType.RefreshToken - }, - headers: { - Authorization: `${this.webBasicAuth}` - } - } - ); - SessionStore.session = session; - return true; - } catch (err: unknown) { - SessionStore.session = null; - return false; - } - } + async refreshSession(): Promise { + const tokenValid = + SessionStore.session && + SessionStore.session.refresh_token && + new Date() < new Date(SessionStore.session.refresh_expires_at); + if (!tokenValid || !SessionStore.session) { + // Clear stored session if we have no valid refresh token to attempt session refresh + SessionStore.session = null; + return false; + } + try { + const session = await this.post( + `${this.baseUrl}/token`, + { + body: { + refresh_token: SessionStore.session.refresh_token, + grant_type: GrantType.RefreshToken + }, + headers: { + Authorization: `${this.webBasicAuth}` + } + } + ); + SessionStore.session = session; + return true; + } catch (err: unknown) { + SessionStore.session = null; + return false; + } + } - async checkAuth() { - // No need to verify auth if we know we aren't authenticated - if (!SessionStore.isAuthenticated || !SessionStore.session) { - return false; - } - try { - const verifySession = await this.get( - `${this.baseUrl}/verify` - ); - const session: ISession = { - ...SessionStore.session, - session_id: verifySession.session_id, - access_token: verifySession.token, - account_id: verifySession.account_id, - displayName: verifySession.display_name, - expires_at: verifySession.expires_at - }; - SessionStore.session = session; - } catch (err: unknown) { - this.logOut(); - window.location.href = '/'; - } - const tokenValid = - SessionStore.session && - SessionStore.session.access_token && - new Date() < new Date(SessionStore.session.expires_at); - if (tokenValid) { - return true; - } - // If token expired try and refresh - return await this.refreshSession(); - } + async checkAuth() { + // No need to verify auth if we know we aren't authenticated + if (!SessionStore.isAuthenticated || !SessionStore.session) { + return false; + } + try { + const verifySession = await this.get( + `${this.baseUrl}/verify` + ); + const session: ISession = { + ...SessionStore.session, + session_id: verifySession.session_id, + access_token: verifySession.token, + account_id: verifySession.account_id, + displayName: verifySession.display_name, + expires_at: verifySession.expires_at + }; + SessionStore.session = session; + } catch (err: unknown) { + this.logOut(); + window.location.href = '/'; + } + const tokenValid = + SessionStore.session && + SessionStore.session.access_token && + new Date() < new Date(SessionStore.session.expires_at); + if (tokenValid) { + return true; + } + // If token expired try and refresh + return await this.refreshSession(); + } - async logOut() { - try { - if (SessionStore.session?.session_id) { - await this.delete( - `${this.baseUrl}/sessions/kill/${SessionStore.session.session_id}` - ); - } - } catch (err: unknown) { - console.error('Error killing session', err); - } finally { - this.clearSession(); - } - } + async logOut() { + try { + if (SessionStore.session?.session_id) { + await this.delete( + `${this.baseUrl}/sessions/kill/${SessionStore.session.session_id}` + ); + } + } catch (err: unknown) { + console.error('Error killing session', err); + } finally { + this.clearSession(); + } + } - async getAuthCode() { - const authResponse = await this.get( - `${this.baseUrl}/auth` - ); - return authResponse.authorizationCode; - } + async getAuthCode() { + const authResponse = await this.get( + `${this.baseUrl}/auth` + ); + return authResponse.authorizationCode; + } - private clearSession() { - AccountStore.account = null; - SessionStore.session = null; - } + private clearSession() { + AccountStore.account = null; + SessionStore.session = null; + } } diff --git a/UT4MasterServer.Web/src/services/http.service.ts b/UT4MasterServer.Web/src/services/http.service.ts index 5056a5b6..81b8e86a 100644 --- a/UT4MasterServer.Web/src/services/http.service.ts +++ b/UT4MasterServer.Web/src/services/http.service.ts @@ -3,117 +3,117 @@ import { SessionStore } from '@/stores/session-store'; type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; export interface HttpRequestOptions { - body?: T; - headers?: HeadersInit; - formData?: FormData; + body?: T; + headers?: HeadersInit; + formData?: FormData; } export class HttpError { - code: number; - message: string; + code: number; + message: string; - constructor(code: number, message: string) { - this.code = code; - this.message = message; - } + constructor(code: number, message: string) { + this.code = code; + this.message = message; + } } export default class HttpService { - private formEncode(request: object) { - const form = new URLSearchParams(); - for (const [key, value] of Object.entries(request)) { - form.append(key, value); - } - - return form; - } - - async send( - url: string, - options?: HttpRequestOptions, - method: HttpMethod = 'GET', - form = true - ): Promise { - const fetchOptions: RequestInit = { method }; - if (options?.body) { - fetchOptions.body = form - ? this.formEncode(options.body) - : JSON.stringify(options.body); - } - - if (options?.formData && form) { - fetchOptions.body = options.formData; - } - - const headers: HeadersInit = {}; - headers['SameSite'] = 'Strict'; - if (options?.body) { - headers['Content-Type'] = form - ? 'application/x-www-form-urlencoded' - : 'application/json'; - } - - if (SessionStore.token) { - headers.Authorization = `bearer ${SessionStore.token}`; - } - - fetchOptions.headers = { ...headers, ...options?.headers }; - - const response = await fetch(url, fetchOptions); - - if (!response.ok) { - const errorResponseJson = await response - .json() - .catch(() => console.debug('Unable to parse error response JSON')); - const errorResponseText = await response - .text() - .catch(() => console.debug('Unable to read error body.')); - const errorMessage = errorResponseJson?.errorMessage ?? errorResponseText; - const errorCode = errorResponseJson?.errorCode ?? response.status; - const defaultErrorMessage = `HTTP request error - ${response.status}: ${response.statusText}`; - throw new HttpError(errorCode, errorMessage ?? defaultErrorMessage); - } - - const responseObj = await response.json().catch(() => { - console.debug('Unable to parse json response'); - }); - - return responseObj as K; - } - - async get(url: string, options?: HttpRequestOptions) { - return this.send(url, options, 'GET'); - } - - async post( - url: string, - options?: HttpRequestOptions, - form = true - ) { - return this.send(url, options, 'POST', form); - } - - async put( - url: string, - options?: HttpRequestOptions, - form = true - ) { - return this.send(url, options, 'PUT', form); - } - - async patch( - url: string, - options?: HttpRequestOptions, - form = true - ) { - return this.send(url, options, 'PATCH', form); - } - - async delete( - url: string, - options?: HttpRequestOptions, - form = true - ) { - return this.send(url, options, 'DELETE', form); - } + private formEncode(request: object) { + const form = new URLSearchParams(); + for (const [key, value] of Object.entries(request)) { + form.append(key, value); + } + + return form; + } + + async send( + url: string, + options?: HttpRequestOptions, + method: HttpMethod = 'GET', + form = true + ): Promise { + const fetchOptions: RequestInit = { method }; + if (options?.body) { + fetchOptions.body = form + ? this.formEncode(options.body) + : JSON.stringify(options.body); + } + + if (options?.formData && form) { + fetchOptions.body = options.formData; + } + + const headers: HeadersInit = {}; + headers['SameSite'] = 'Strict'; + if (options?.body) { + headers['Content-Type'] = form + ? 'application/x-www-form-urlencoded' + : 'application/json'; + } + + if (SessionStore.token) { + headers.Authorization = `bearer ${SessionStore.token}`; + } + + fetchOptions.headers = { ...headers, ...options?.headers }; + + const response = await fetch(url, fetchOptions); + + if (!response.ok) { + const errorResponseJson = await response + .json() + .catch(() => console.debug('Unable to parse error response JSON')); + const errorResponseText = await response + .text() + .catch(() => console.debug('Unable to read error body.')); + const errorMessage = errorResponseJson?.errorMessage ?? errorResponseText; + const errorCode = errorResponseJson?.errorCode ?? response.status; + const defaultErrorMessage = `HTTP request error - ${response.status}: ${response.statusText}`; + throw new HttpError(errorCode, errorMessage ?? defaultErrorMessage); + } + + const responseObj = await response.json().catch(() => { + console.debug('Unable to parse json response'); + }); + + return responseObj as K; + } + + async get(url: string, options?: HttpRequestOptions) { + return this.send(url, options, 'GET'); + } + + async post( + url: string, + options?: HttpRequestOptions, + form = true + ) { + return this.send(url, options, 'POST', form); + } + + async put( + url: string, + options?: HttpRequestOptions, + form = true + ) { + return this.send(url, options, 'PUT', form); + } + + async patch( + url: string, + options?: HttpRequestOptions, + form = true + ) { + return this.send(url, options, 'PATCH', form); + } + + async delete( + url: string, + options?: HttpRequestOptions, + form = true + ) { + return this.send(url, options, 'DELETE', form); + } } diff --git a/UT4MasterServer.Web/src/services/rankings.service.ts b/UT4MasterServer.Web/src/services/rankings.service.ts index 2127f395..68c5a7c2 100644 --- a/UT4MasterServer.Web/src/services/rankings.service.ts +++ b/UT4MasterServer.Web/src/services/rankings.service.ts @@ -3,35 +3,35 @@ import { IRanking } from '@/types/ranking'; import HttpService from './http.service'; export class RankingsService extends HttpService { - private baseUrl = `${__BACKEND_URL}/ut/api/game/v2/ratings`; + private baseUrl = `${__BACKEND_URL}/ut/api/game/v2/ratings`; - async getRankings( - ratingType: string, - skip: number, - limit: number - ): Promise> { - const response = await this.get>( - `${this.baseUrl}/rankings?ratingType=${ratingType}&skip=${skip}&limit=${limit}` - ); - const mapped: IPagedResponse = { - count: response.count, - data: response.data.map(this.mapRanking) - }; + async getRankings( + ratingType: string, + skip: number, + limit: number + ): Promise> { + const response = await this.get>( + `${this.baseUrl}/rankings?ratingType=${ratingType}&skip=${skip}&limit=${limit}` + ); + const mapped: IPagedResponse = { + count: response.count, + data: response.data.map(this.mapRanking) + }; - return mapped; - } + return mapped; + } - async getSelectedRanking(ratingType: string, accountId: string) { - const response = await this.get( - `${this.baseUrl}/ranking/${accountId}?ratingType=${ratingType}` - ); - return this.mapRanking(response); - } + async getSelectedRanking(ratingType: string, accountId: string) { + const response = await this.get( + `${this.baseUrl}/ranking/${accountId}?ratingType=${ratingType}` + ); + return this.mapRanking(response); + } - mapRanking(ranking: IRanking): IRanking { - return { - ...ranking, - countryFlag: ranking.countryFlag?.replaceAll('.', ' ') ?? 'Unreal' - }; - } + mapRanking(ranking: IRanking): IRanking { + return { + ...ranking, + countryFlag: ranking.countryFlag?.replaceAll('.', ' ') ?? 'Unreal' + }; + } } diff --git a/UT4MasterServer.Web/src/services/stats.service.ts b/UT4MasterServer.Web/src/services/stats.service.ts index 7a3b3393..80fef404 100644 --- a/UT4MasterServer.Web/src/services/stats.service.ts +++ b/UT4MasterServer.Web/src/services/stats.service.ts @@ -3,9 +3,9 @@ import { StatisticWindow } from '@/enums/statistic-window'; import HttpService from './http.service'; export default class StatsService extends HttpService { - async getStats(accountId: string, window: StatisticWindow) { - return await this.get( - `${__BACKEND_URL}/ut/api/stats/accountId/${accountId}/bulk/window/${window}` - ); - } + async getStats(accountId: string, window: StatisticWindow) { + return await this.get( + `${__BACKEND_URL}/ut/api/stats/accountId/${accountId}/bulk/window/${window}` + ); + } } diff --git a/UT4MasterServer.Web/src/stores/account-store.ts b/UT4MasterServer.Web/src/stores/account-store.ts index 67b14a9a..1a4474ca 100644 --- a/UT4MasterServer.Web/src/stores/account-store.ts +++ b/UT4MasterServer.Web/src/stores/account-store.ts @@ -9,32 +9,32 @@ const _accountService = new AccountService(); const _adminRoles = [Role.Admin, Role.Moderator]; function mapAccount(account: IAccountExtended): IAccountExtended { - return { - ...account, - countryFlag: account.countryFlag.replaceAll('.', ' '), - avatar: account.avatar ?? 'UT.Avatar.0' - }; + return { + ...account, + countryFlag: account.countryFlag.replaceAll('.', ' '), + avatar: account.avatar ?? 'UT.Avatar.0' + }; } export const AccountStore = { - get account() { - return _account.value; - }, - set account(account: IAccountExtended | null) { - _account.value = account; - }, - get isAdmin() { - return _account.value?.roles?.some((r) => _adminRoles.includes(r)); - }, - async fetchUserAccount() { - try { - _account.value = SessionStore.session?.account_id - ? mapAccount( - await _accountService.getAccount(SessionStore.session.account_id) - ) - : null; - } catch (err: unknown) { - console.error('Error fetching user account:', err); - } - } + get account() { + return _account.value; + }, + set account(account: IAccountExtended | null) { + _account.value = account; + }, + get isAdmin() { + return _account.value?.roles?.some((r) => _adminRoles.includes(r)); + }, + async fetchUserAccount() { + try { + _account.value = SessionStore.session?.account_id + ? mapAccount( + await _accountService.getAccount(SessionStore.session.account_id) + ) + : null; + } catch (err: unknown) { + console.error('Error fetching user account:', err); + } + } }; diff --git a/UT4MasterServer.Web/src/stores/session-store.ts b/UT4MasterServer.Web/src/stores/session-store.ts index 91a3d0fa..3d52ee09 100644 --- a/UT4MasterServer.Web/src/stores/session-store.ts +++ b/UT4MasterServer.Web/src/stores/session-store.ts @@ -3,30 +3,30 @@ import { ISession } from '@/types/session'; import { ref } from 'vue'; const _session = ref( - TypedStorage.getItem('session') + TypedStorage.getItem('session') ); export const SessionStore = { - get isAuthenticated() { - return !!_session.value?.access_token; - }, - get saveUsername() { - return TypedStorage.getItem('save_username') === true; - }, - set saveUsername(save: boolean) { - TypedStorage.setItem('save_username', save); - }, - get username() { - return _session.value?.displayName; - }, - get token() { - return _session.value?.access_token; - }, - get session() { - return _session.value; - }, - set session(session: ISession | null) { - _session.value = session; - TypedStorage.setItem('session', session); - } + get isAuthenticated() { + return !!_session.value?.access_token; + }, + get saveUsername() { + return TypedStorage.getItem('save_username') === true; + }, + set saveUsername(save: boolean) { + TypedStorage.setItem('save_username', save); + }, + get username() { + return _session.value?.displayName; + }, + get token() { + return _session.value?.access_token; + }, + get session() { + return _session.value; + }, + set session(session: ISession | null) { + _session.value = session; + TypedStorage.setItem('session', session); + } }; diff --git a/UT4MasterServer.Web/src/styles.scss b/UT4MasterServer.Web/src/styles.scss index bb5e4898..6b8b00ce 100644 --- a/UT4MasterServer.Web/src/styles.scss +++ b/UT4MasterServer.Web/src/styles.scss @@ -1,67 +1,67 @@ body { - background-color: rgba(0, 0, 0, 0.05); + background-color: rgba(0, 0, 0, 0.05); } .main-content { - margin-bottom: 65px; + margin-bottom: 65px; } .form-group { - margin-bottom: 1rem; + margin-bottom: 1rem; } .flex-v-center { - display: flex; - align-items: center; + display: flex; + align-items: center; } .code { - font-family: monospace; - background-color: rgba(0, 0, 0, 0.05); - padding: 2px 4px; - margin: -2px -4px; + font-family: monospace; + background-color: rgba(0, 0, 0, 0.05); + padding: 2px 4px; + margin: -2px -4px; } .codeblock { - margin: 10px 0; - padding: 10px; - position: relative; + margin: 10px 0; + padding: 10px; + position: relative; } .btn { - &.btn-smaller { - padding: 2px 4px; - } + &.btn-smaller { + padding: 2px 4px; + } - &.btn-icon { - padding: 0; - font-size: 1rem; + &.btn-icon { + padding: 0; + font-size: 1rem; - &.btn-lg { - font-size: 1.25rem; - } - } + &.btn-lg { + font-size: 1.25rem; + } + } } .list-group-item { - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; } .visibly-hidden { - position: absolute; - left: -10000px; - height: 0; - width: 0; + position: absolute; + left: -10000px; + height: 0; + width: 0; } .invalid-feedback { - &.show { - display: block; - } + &.show { + display: block; + } } strong { - font-weight: bold; + font-weight: bold; } diff --git a/UT4MasterServer.Web/src/types/account.ts b/UT4MasterServer.Web/src/types/account.ts index 083ce8f9..186bd65b 100644 --- a/UT4MasterServer.Web/src/types/account.ts +++ b/UT4MasterServer.Web/src/types/account.ts @@ -1,25 +1,25 @@ import { Role } from '@/enums/role'; export interface IAccount { - id: string; - username: string; + id: string; + username: string; } export interface IAccountWithRoles extends IAccount { - roles: Role[]; + roles: Role[]; } export interface IAccountExtended extends IAccountWithRoles { - email: string; - createdAt: string; - lastLoginAt: string; - countryFlag: string; - avatar: string; - goldStars: number; - blueStars: number; - xp: number; - lastMatchAt: string; - flags: number; - level: number; - levelStockLimited: number; + email: string; + createdAt: string; + lastLoginAt: string; + countryFlag: string; + avatar: string; + goldStars: number; + blueStars: number; + xp: number; + lastMatchAt: string; + flags: number; + level: number; + levelStockLimited: number; } diff --git a/UT4MasterServer.Web/src/types/async-status.ts b/UT4MasterServer.Web/src/types/async-status.ts index 73a36b83..af21681e 100644 --- a/UT4MasterServer.Web/src/types/async-status.ts +++ b/UT4MasterServer.Web/src/types/async-status.ts @@ -1,5 +1,5 @@ export enum AsyncStatus { - OK = 0, - BUSY = 1, - ERROR = 2 + OK = 0, + BUSY = 1, + ERROR = 2 } diff --git a/UT4MasterServer.Web/src/types/auth-code-response.ts b/UT4MasterServer.Web/src/types/auth-code-response.ts index 7062e7ab..8b631d29 100644 --- a/UT4MasterServer.Web/src/types/auth-code-response.ts +++ b/UT4MasterServer.Web/src/types/auth-code-response.ts @@ -1,5 +1,5 @@ export interface IAuthCodeResponse { - authorizationCode: string | null; - redirectUrl: string | null; - sid: string | null; + authorizationCode: string | null; + redirectUrl: string | null; + sid: string | null; } diff --git a/UT4MasterServer.Web/src/types/change-email-request.ts b/UT4MasterServer.Web/src/types/change-email-request.ts index 0fbf8bf2..24d5f00d 100644 --- a/UT4MasterServer.Web/src/types/change-email-request.ts +++ b/UT4MasterServer.Web/src/types/change-email-request.ts @@ -1,3 +1,3 @@ export interface IChangeEmailRequest { - newEmail: string; + newEmail: string; } diff --git a/UT4MasterServer.Web/src/types/change-password-request.ts b/UT4MasterServer.Web/src/types/change-password-request.ts index 39cece49..d36bb168 100644 --- a/UT4MasterServer.Web/src/types/change-password-request.ts +++ b/UT4MasterServer.Web/src/types/change-password-request.ts @@ -1,4 +1,4 @@ export interface IChangePasswordRequest { - currentPassword: string; - newPassword: string; + currentPassword: string; + newPassword: string; } diff --git a/UT4MasterServer.Web/src/types/change-username-request.ts b/UT4MasterServer.Web/src/types/change-username-request.ts index bf338d25..ed3d0f36 100644 --- a/UT4MasterServer.Web/src/types/change-username-request.ts +++ b/UT4MasterServer.Web/src/types/change-username-request.ts @@ -1,3 +1,3 @@ export interface IChangeUsernameRequest { - newUsername: string; + newUsername: string; } diff --git a/UT4MasterServer.Web/src/types/login-request.ts b/UT4MasterServer.Web/src/types/login-request.ts index cf82899d..6ac7e262 100644 --- a/UT4MasterServer.Web/src/types/login-request.ts +++ b/UT4MasterServer.Web/src/types/login-request.ts @@ -1,5 +1,5 @@ export interface ILoginRequest { - username: string; - password: string; - grant_type: string; + username: string; + password: string; + grant_type: string; } diff --git a/UT4MasterServer.Web/src/types/paged-response.ts b/UT4MasterServer.Web/src/types/paged-response.ts index fd2fe984..68d4304a 100644 --- a/UT4MasterServer.Web/src/types/paged-response.ts +++ b/UT4MasterServer.Web/src/types/paged-response.ts @@ -1,4 +1,4 @@ export interface IPagedResponse { - count: number; - data: T[]; + count: number; + data: T[]; } diff --git a/UT4MasterServer.Web/src/types/ranking.ts b/UT4MasterServer.Web/src/types/ranking.ts index 92c048ff..37170a7a 100644 --- a/UT4MasterServer.Web/src/types/ranking.ts +++ b/UT4MasterServer.Web/src/types/ranking.ts @@ -1,8 +1,8 @@ export interface IRanking { - rank: number; - accountID: string; - player: string; - countryFlag: string; - rating: number; - gamesPlayed: number; + rank: number; + accountID: string; + player: string; + countryFlag: string; + rating: number; + gamesPlayed: number; } diff --git a/UT4MasterServer.Web/src/types/refresh-session-request.ts b/UT4MasterServer.Web/src/types/refresh-session-request.ts index 6c8143b2..f39b42df 100644 --- a/UT4MasterServer.Web/src/types/refresh-session-request.ts +++ b/UT4MasterServer.Web/src/types/refresh-session-request.ts @@ -1,6 +1,6 @@ import { GrantType } from '@/enums/grant-type'; export interface IRefreshSessionRequest { - refresh_token: string; - grant_type: GrantType; + refresh_token: string; + grant_type: GrantType; } diff --git a/UT4MasterServer.Web/src/types/register-request.ts b/UT4MasterServer.Web/src/types/register-request.ts index 3f43e9e5..83a104a3 100644 --- a/UT4MasterServer.Web/src/types/register-request.ts +++ b/UT4MasterServer.Web/src/types/register-request.ts @@ -1,6 +1,6 @@ export interface IRegisterRequest { - username: string; - password: string; - email: string; - recaptchaToken?: string; + username: string; + password: string; + email: string; + recaptchaToken?: string; } diff --git a/UT4MasterServer.Web/src/types/search-accounts-response.ts b/UT4MasterServer.Web/src/types/search-accounts-response.ts index 90233edc..35dd0b46 100644 --- a/UT4MasterServer.Web/src/types/search-accounts-response.ts +++ b/UT4MasterServer.Web/src/types/search-accounts-response.ts @@ -1,6 +1,6 @@ import { IAccount } from './account'; export interface ISearchAccountsResponse { - accounts: T[]; - count: number; + accounts: T[]; + count: number; } diff --git a/UT4MasterServer.Web/src/types/session.ts b/UT4MasterServer.Web/src/types/session.ts index 04d3567e..b905be5e 100644 --- a/UT4MasterServer.Web/src/types/session.ts +++ b/UT4MasterServer.Web/src/types/session.ts @@ -1,17 +1,17 @@ export interface ISession { - access_token: string; - expires_at: string; //ISO date - refresh_token: string; - refresh_expires_at: string; //ISO date - account_id: string; - displayName: string; - session_id: string; + access_token: string; + expires_at: string; //ISO date + refresh_token: string; + refresh_expires_at: string; //ISO date + account_id: string; + displayName: string; + session_id: string; } export interface IVerifySession { - token: string; - session_id: string; - display_name: string; - expires_at: string; //ISO date - account_id: string; + token: string; + session_id: string; + display_name: string; + expires_at: string; //ISO date + account_id: string; } diff --git a/UT4MasterServer.Web/src/types/statistic-config.ts b/UT4MasterServer.Web/src/types/statistic-config.ts index 7a76499c..36b80024 100644 --- a/UT4MasterServer.Web/src/types/statistic-config.ts +++ b/UT4MasterServer.Web/src/types/statistic-config.ts @@ -1,12 +1,12 @@ import { Statistic } from '@/enums/statistic'; export interface IStatisticCard { - heading: string; - stats: Statistic[]; - headingIcon?: string; + heading: string; + stats: Statistic[]; + headingIcon?: string; } export interface IStatisticSection { - heading: string; - cards: IStatisticCard[]; + heading: string; + cards: IStatisticCard[]; } diff --git a/UT4MasterServer.Web/src/types/statistic-data.ts b/UT4MasterServer.Web/src/types/statistic-data.ts index 26d5576e..6ccaaaaf 100644 --- a/UT4MasterServer.Web/src/types/statistic-data.ts +++ b/UT4MasterServer.Web/src/types/statistic-data.ts @@ -1,4 +1,4 @@ export interface IStatisticData { - name: string; - value: number; + name: string; + value: number; } diff --git a/UT4MasterServer.Web/src/utils/typed-storage.ts b/UT4MasterServer.Web/src/utils/typed-storage.ts index 0fc817bc..8354de2e 100644 --- a/UT4MasterServer.Web/src/utils/typed-storage.ts +++ b/UT4MasterServer.Web/src/utils/typed-storage.ts @@ -1,9 +1,9 @@ export const TypedStorage = { - getItem(key: string): T | null { - const itemStr = localStorage.getItem(key); - return itemStr ? (JSON.parse(itemStr) as T) : null; - }, - setItem(key: string, value: T | null) { - localStorage.setItem(key, JSON.stringify(value)); - } + getItem(key: string): T | null { + const itemStr = localStorage.getItem(key); + return itemStr ? (JSON.parse(itemStr) as T) : null; + }, + setItem(key: string, value: T | null) { + localStorage.setItem(key, JSON.stringify(value)); + } }; diff --git a/UT4MasterServer.Web/src/utils/utilities.ts b/UT4MasterServer.Web/src/utils/utilities.ts index 0ab935b1..1e1449ec 100644 --- a/UT4MasterServer.Web/src/utils/utilities.ts +++ b/UT4MasterServer.Web/src/utils/utilities.ts @@ -2,68 +2,68 @@ import { Md5 } from 'ts-md5'; import { RouteParams } from 'vue-router'; export function isWellDefined(value: unknown) { - return value !== undefined && value !== null; + return value !== undefined && value !== null; } export function objectHash(obj: unknown) { - if (!isWellDefined(obj)) { - return ''; - } - return Md5.hashStr(JSON.stringify(obj)); + if (!isWellDefined(obj)) { + return ''; + } + return Md5.hashStr(JSON.stringify(obj)); } export function toMinutesSeconds(rawtime?: number) { - if (!rawtime) { - return '0:00'; - } - const hours = Math.floor(rawtime / 3600); - const minutes = Math.floor((rawtime - hours * 3600) / 60); - const seconds = rawtime - hours * 3600 - minutes * 60; - const minutesString = `${minutes}`; - let secondsString = `${seconds}`; - if (seconds < 10) { - secondsString = '0' + seconds; - } - return `${minutesString}:${secondsString}`; + if (!rawtime) { + return '0:00'; + } + const hours = Math.floor(rawtime / 3600); + const minutes = Math.floor((rawtime - hours * 3600) / 60); + const seconds = rawtime - hours * 3600 - minutes * 60; + const minutesString = `${minutes}`; + let secondsString = `${seconds}`; + if (seconds < 10) { + secondsString = '0' + seconds; + } + return `${minutesString}:${secondsString}`; } export function toHoursMinutesSeconds(rawtime?: number) { - if (!rawtime) { - return '00:00:00'; - } - const hours = Math.floor(rawtime / 3600); - let hoursString = `${hours}`; - if (hours < 10) { - hoursString = '0' + hours; - } - return `${hoursString}:${toMinutesSeconds(rawtime)}`; + if (!rawtime) { + return '00:00:00'; + } + const hours = Math.floor(rawtime / 3600); + let hoursString = `${hours}`; + if (hours < 10) { + hoursString = '0' + hours; + } + return `${hoursString}:${toMinutesSeconds(rawtime)}`; } type DateTimeStyle = 'short' | 'full' | 'long' | 'medium' | undefined; export function isoDateTimeStringToLocalDateTime( - dateTime: string, - dateStyle: DateTimeStyle = 'short', - timeStyle: DateTimeStyle = 'short' + dateTime: string, + dateStyle: DateTimeStyle = 'short', + timeStyle: DateTimeStyle = 'short' ) { - return new Intl.DateTimeFormat('default', { dateStyle, timeStyle }).format( - new Date(dateTime) - ); + return new Intl.DateTimeFormat('default', { dateStyle, timeStyle }).format( + new Date(dateTime) + ); } export function getRouteParamStringValue( - params: RouteParams, - key: string, - defaultValue: string | undefined = undefined + params: RouteParams, + key: string, + defaultValue: string | undefined = undefined ) { - const paramString = params[key]; - return paramString?.length ? (paramString as string) : defaultValue; + const paramString = params[key]; + return paramString?.length ? (paramString as string) : defaultValue; } export function getRouteParamNumberValue( - params: RouteParams, - key: string, - defaultValue: number + params: RouteParams, + key: string, + defaultValue: number ) { - const paramString = params[key]; - return paramString?.length ? +paramString : defaultValue; + const paramString = params[key]; + return paramString?.length ? +paramString : defaultValue; } diff --git a/UT4MasterServer.Web/src/utils/validation.ts b/UT4MasterServer.Web/src/utils/validation.ts index 2ec3cb3c..cdf61f44 100644 --- a/UT4MasterServer.Web/src/utils/validation.ts +++ b/UT4MasterServer.Web/src/utils/validation.ts @@ -1,11 +1,11 @@ export function validateEmail(input?: string) { - if (!input) { - return false; - } - const regexp = new RegExp(/^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/); - return regexp.test(input); + if (!input) { + return false; + } + const regexp = new RegExp(/^[\w-.]+@([\w-]+\.)+[\w-]{2,4}$/); + return regexp.test(input); } export function validatePassword(password?: string) { - return password && password.length >= 7; + return password && password.length >= 7; } diff --git a/UT4MasterServer.Web/tsconfig.json b/UT4MasterServer.Web/tsconfig.json index 3164a2ef..a77b10e5 100644 --- a/UT4MasterServer.Web/tsconfig.json +++ b/UT4MasterServer.Web/tsconfig.json @@ -1,26 +1,26 @@ { - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "module": "ESNext", - "moduleResolution": "Node", - "strict": true, - "jsx": "preserve", - "resolveJsonModule": true, - "isolatedModules": true, - "esModuleInterop": true, - "lib": ["ESNext", "DOM", "dom.iterable"], - "skipLibCheck": true, - "noEmit": true, - "baseUrl": "./", - "paths": { - "@/*": ["src/*"] - } - }, - "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "jsx": "preserve", + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM", "dom.iterable"], + "skipLibCheck": true, + "noEmit": true, + "baseUrl": "./", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] } diff --git a/UT4MasterServer.Web/tsconfig.node.json b/UT4MasterServer.Web/tsconfig.node.json index 9d31e2ae..d3bf4b82 100644 --- a/UT4MasterServer.Web/tsconfig.node.json +++ b/UT4MasterServer.Web/tsconfig.node.json @@ -1,9 +1,9 @@ { - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node", - "allowSyntheticDefaultImports": true - }, - "include": ["vite.config.ts"] + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] } diff --git a/UT4MasterServer.Web/vite.config.ts b/UT4MasterServer.Web/vite.config.ts index d0fccd15..98f1f45a 100644 --- a/UT4MasterServer.Web/vite.config.ts +++ b/UT4MasterServer.Web/vite.config.ts @@ -3,44 +3,44 @@ import vue from '@vitejs/plugin-vue'; import path from 'path'; export default defineConfig(({ command, mode }) => { - const viteEnv = loadEnv(mode, process.cwd()); - const viteConfig = { - define: { - __BACKEND_URL: JSON.stringify(viteEnv.VITE_API_URL), - __RECAPTCHA_SITE_KEY: JSON.stringify(viteEnv.VITE_RECAPTCHA_SITE_KEY) - }, - plugins: [vue()], - resolve: { - alias: { - '@': path.resolve(__dirname, './src') - } - } - } as UserConfig; + const viteEnv = loadEnv(mode, process.cwd()); + const viteConfig = { + define: { + __BACKEND_URL: JSON.stringify(viteEnv.VITE_API_URL), + __RECAPTCHA_SITE_KEY: JSON.stringify(viteEnv.VITE_RECAPTCHA_SITE_KEY) + }, + plugins: [vue()], + resolve: { + alias: { + '@': path.resolve(__dirname, './src') + } + } + } as UserConfig; - if (mode === 'production') { - if (!viteEnv.VITE_API_URL?.length) { - throw new Error( - 'Missing environment variable VITE_API_URL required for production build.' - ); - } - if (!viteEnv.VITE_BASIC_AUTH?.length) { - throw new Error( - 'Missing environment variable VITE_BASIC_AUTH required for production build.' - ); - } - if (!viteEnv.VITE_RECAPTCHA_SITE_KEY?.length) { - throw new Error( - 'Missing environment variable VITE_RECAPTCHA_SITE_KEY required for production build.' - ); - } - } + if (mode === 'production') { + if (!viteEnv.VITE_API_URL?.length) { + throw new Error( + 'Missing environment variable VITE_API_URL required for production build.' + ); + } + if (!viteEnv.VITE_BASIC_AUTH?.length) { + throw new Error( + 'Missing environment variable VITE_BASIC_AUTH required for production build.' + ); + } + if (!viteEnv.VITE_RECAPTCHA_SITE_KEY?.length) { + throw new Error( + 'Missing environment variable VITE_RECAPTCHA_SITE_KEY required for production build.' + ); + } + } - if (command === 'serve') { - viteConfig.server = { - port: 8080 - }; - } else { - viteConfig.base = '/'; - } - return viteConfig; + if (command === 'serve') { + viteConfig.server = { + port: 8080 + }; + } else { + viteConfig.base = '/'; + } + return viteConfig; });