From 02958e9d991c7f58723a650a13b7a8d41ca116c2 Mon Sep 17 00:00:00 2001
From: Abadima
Date: Sun, 6 Aug 2023 22:47:30 -0400
Subject: [PATCH 01/33] v1.3.5 (RELEASE)
DEPENDENCY UPDATES:
- @napi-rs/canvas => v0.1.41
- mongoose => v7.4.2
BUG FIXES:
- xp.rank() error
- xp.chart() now has a helpful err message
- leaderboard() Position & Cache issues
TYPE IMPROVEMENTS:
- addLevel() => Make Code Prettier
- addXP() => Make Code Prettier
- charts() => Make Code Prettier
- leaderboard() => Ensured limit was optional for TypeScript users
- rank() => Cure Cancer (Remove Unnecessary Statements)
UPDATES:
- Added eslint (dev)
- rank() => Moved Funcs (eslint compliant)
- connect() => "auto_purge" option, basically does what it did in Beta 7, but you have a choice (false by default)
---
.eslintrc.json | 2 +-
.gitignore | 2 +-
.npmignore | 5 +-
index.d.ts | 1 +
package-lock.json | 1754 +++++++++++++++++++++++++++++++++++++++++
package.json | 6 +-
simplyxp.js | 32 +-
src/addLevel.js | 14 +-
src/addXP.js | 26 +-
src/charts.js | 58 +-
src/connect.js | 13 +-
src/create.js | 10 +-
src/fetch.js | 10 +-
src/leaderboard.js | 19 +-
src/lvlRole.js | 8 +-
src/models/level.js | 12 +-
src/models/lvlrole.js | 8 +-
src/rank.js | 146 ++--
src/reset.js | 10 +-
src/roleSetup.js | 46 +-
src/setLevel.js | 56 +-
src/setXP.js | 62 +-
22 files changed, 2001 insertions(+), 299 deletions(-)
create mode 100644 package-lock.json
diff --git a/.eslintrc.json b/.eslintrc.json
index d2789b3..d48293c 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -19,7 +19,7 @@
],
"quotes": [
"error",
- "single"
+ "double"
],
"semi": [
"error",
diff --git a/.gitignore b/.gitignore
index 55f867b..4d27fff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,3 @@
-package-lock.json
+pnpm-lock.yaml
node_modules
.idea
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
index 05607a1..0788fce 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,4 +1,7 @@
.gitignore
+.tgz
.vscode
+eslintrc.json
Examples
-.tgz
\ No newline at end of file
+node_modules
+pnpm-lock.yaml
\ No newline at end of file
diff --git a/index.d.ts b/index.d.ts
index 0c0db0e..4e2789f 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -3,6 +3,7 @@ import { Message, Client } from 'discord.js'
type HexColorString = `#${string}` | string
export type connectOptions = {
+ auto_purge?: boolean,
notify?: boolean
}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..75743ea
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,1754 @@
+{
+ "name": "simply-xp",
+ "version": "1.3.5",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "simply-xp",
+ "version": "1.3.5",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@napi-rs/canvas": "^0.1.41",
+ "chart.js": "^3.9.1",
+ "mongoose": "^7.4.2"
+ },
+ "devDependencies": {
+ "eslint": "^8.46.0"
+ },
+ "peerDependencies": {
+ "discord.js": ">=13.12.0"
+ }
+ },
+ "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/@discordjs/builders": {
+ "version": "1.6.4",
+ "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.4.tgz",
+ "integrity": "sha512-ARFKvmAkLhfkQQiNxqi0YIWqwUExvBRtvdtMFVJXvJoibsGkFrB/DWTf9byU7BTVUfsmW8w7NM55tYXR5S/iSg==",
+ "peer": true,
+ "dependencies": {
+ "@discordjs/formatters": "^0.3.1",
+ "@discordjs/util": "^1.0.0",
+ "@sapphire/shapeshift": "^3.9.2",
+ "discord-api-types": "^0.37.50",
+ "fast-deep-equal": "^3.1.3",
+ "ts-mixer": "^6.0.3",
+ "tslib": "^2.6.1"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/collection": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.2.tgz",
+ "integrity": "sha512-LDplPy8SPbc8MYkuCdnLRGWqygAX97E8NH7gA9uz+NZ/hXknUKJHuxsOmhC6pmHnF9Zmg0kvfwrDjGsRIljt9g==",
+ "peer": true,
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/formatters": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz",
+ "integrity": "sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==",
+ "peer": true,
+ "dependencies": {
+ "discord-api-types": "^0.37.41"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/rest": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.0.tgz",
+ "integrity": "sha512-CW9ldfzsRzUbHcS4Oqu5+Moo+yrQ5qQ9groKNxPOzcoq2nuXa/fXOXkuQtQHcTeSVXsC9cmJ56M8gBDBUyLgGA==",
+ "peer": true,
+ "dependencies": {
+ "@discordjs/collection": "^1.5.2",
+ "@discordjs/util": "^1.0.0",
+ "@sapphire/async-queue": "^1.5.0",
+ "@sapphire/snowflake": "^3.5.1",
+ "@vladfrangu/async_event_emitter": "^2.2.2",
+ "discord-api-types": "^0.37.50",
+ "magic-bytes.js": "^1.0.15",
+ "tslib": "^2.6.1",
+ "undici": "^5.22.1"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/util": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.0.tgz",
+ "integrity": "sha512-U2Iiab0mo8cFe+o4ZY4GROoAetGjFYA1PhhxiXEW82LuPUjOU/seHZDtVjDpOf6n3rz4IRm84wNtgHdpqRY5CA==",
+ "peer": true,
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "node_modules/@discordjs/ws": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.0.tgz",
+ "integrity": "sha512-POiImjuQJzwCxjJs4JCtDcTjzvjVsVQbnsaoW/F03yTVdrj/xSpmgv4383AnpNEYXI+CA6ggkz37phZDsZQ1NQ==",
+ "peer": true,
+ "dependencies": {
+ "@discordjs/collection": "^1.5.2",
+ "@discordjs/rest": "^2.0.0",
+ "@discordjs/util": "^1.0.0",
+ "@sapphire/async-queue": "^1.5.0",
+ "@types/ws": "^8.5.5",
+ "@vladfrangu/async_event_emitter": "^2.2.2",
+ "discord-api-types": "^0.37.50",
+ "tslib": "^2.6.1",
+ "ws": "^8.13.0"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "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.6.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
+ "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz",
+ "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==",
+ "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.46.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz",
+ "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.10",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
+ "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
+ "dev": true,
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^1.2.1",
+ "debug": "^4.1.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": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@napi-rs/canvas": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.41.tgz",
+ "integrity": "sha512-JjdMfKyXox09KgC3fNB4+x0M/rwufIWrfcBDU0BuF6jKVhlSSSNy7D2WEX4zs5NgWHeiArHCXLtJ0dW6KyK7GQ==",
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@napi-rs/canvas-android-arm64": "0.1.41",
+ "@napi-rs/canvas-darwin-arm64": "0.1.41",
+ "@napi-rs/canvas-darwin-x64": "0.1.41",
+ "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.41",
+ "@napi-rs/canvas-linux-arm64-gnu": "0.1.41",
+ "@napi-rs/canvas-linux-arm64-musl": "0.1.41",
+ "@napi-rs/canvas-linux-x64-gnu": "0.1.41",
+ "@napi-rs/canvas-linux-x64-musl": "0.1.41",
+ "@napi-rs/canvas-win32-x64-msvc": "0.1.41"
+ }
+ },
+ "node_modules/@napi-rs/canvas-android-arm64": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.41.tgz",
+ "integrity": "sha512-hPYeFbgusSK9g6TxYXH4bKFGkH9Win7hP83HNw1ZiOS1xY16jw6xEEPzkIbKLIJDlDOIXuZ+s2mey4JE0n0GZA==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-darwin-arm64": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.41.tgz",
+ "integrity": "sha512-tBkzCYOQWfKmMyHVyPGhBKyowH8mcdfy79Hcv+jQb+XIrxx+JmINmlEl7jfNhYLjejM9mar+ZRe+FXqQTlq45g==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-darwin-x64": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.41.tgz",
+ "integrity": "sha512-n1/F47ymTtgEAMKYGKBquF4a2MKxOT7LRa3u5Beto2nxgB4OvTfp1wLo7QjihLBPUVEZSpnCy8JZhpKC2S9fUw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.41.tgz",
+ "integrity": "sha512-XjhWsuCX/MMTuLLvXhKAaZzTRdgqaL4laaEw5NoCIihg4pLyFcok+bD2LQoMcOJC/ATbRfm8cprqgVzncfszLA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.41.tgz",
+ "integrity": "sha512-kY5caBtSrUox8G5DKnNLfA3nLeZjaLMNV6WjVje57fz8QGOLCVF6dyRH15G8rfJ9W3Ka50XCUN4XmEHSPo7FBQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-arm64-musl": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.41.tgz",
+ "integrity": "sha512-DIfPcnHbSzuRl3CieMA1Bd5Wou3WDyFOdjS1kCM1x5B1RkirAZ+LfxcuWvGX2CEg4tL8Yd/vktKuFR/X9RFcSg==",
+ "cpu": [
+ "arm64"
+ ],
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-x64-gnu": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.41.tgz",
+ "integrity": "sha512-tKyzC0ZgqwuB9k0GvnOTCh05x+CQQ1zBbvv9ISjCm4+Pr5m0o3wQwi2M3kNk3NmhaJyWFc5OUOEFp5Ux2Gdvyg==",
+ "cpu": [
+ "x64"
+ ],
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-linux-x64-musl": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.41.tgz",
+ "integrity": "sha512-MRnLn5ftkC3E4XK2lol+ya3SE9PpfTxMjDpgbF4/d2i+AkT5vNF7yJJGfblzBOtgwO4g7plmAHQJ2Dv18BXtgw==",
+ "cpu": [
+ "x64"
+ ],
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@napi-rs/canvas-win32-x64-msvc": {
+ "version": "0.1.41",
+ "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.41.tgz",
+ "integrity": "sha512-e2L/VLJR/glc0vUACVBSL+VpbrfIRRuJU183t5jrOnaLFvVZHH/0iCF9ph9CUN/kKSg2cU84oGrnfJIsuPglSQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "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/@sapphire/async-queue": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz",
+ "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==",
+ "peer": true,
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@sapphire/shapeshift": {
+ "version": "3.9.2",
+ "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz",
+ "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==",
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "lodash": "^4.17.21"
+ },
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@sapphire/snowflake": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz",
+ "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==",
+ "peer": true,
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "20.4.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz",
+ "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg=="
+ },
+ "node_modules/@types/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
+ },
+ "node_modules/@types/whatwg-url": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
+ "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/webidl-conversions": "*"
+ }
+ },
+ "node_modules/@types/ws": {
+ "version": "8.5.5",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz",
+ "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==",
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@vladfrangu/async_event_emitter": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz",
+ "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=v14.0.0",
+ "npm": ">=7.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "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/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/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/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/bson": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz",
+ "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==",
+ "engines": {
+ "node": ">=14.20.1"
+ }
+ },
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
+ "peer": true,
+ "dependencies": {
+ "streamsearch": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ }
+ },
+ "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/chart.js": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz",
+ "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w=="
+ },
+ "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/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/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "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/discord-api-types": {
+ "version": "0.37.51",
+ "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.51.tgz",
+ "integrity": "sha512-tdmdH98t3zgjQF6zwOHl0OB/PCBiE4aVsNTuN7m0PfU2jOLx3lNoU6xTeFALntUtlIxN80GTr9RPQR4t7msjSg==",
+ "peer": true
+ },
+ "node_modules/discord.js": {
+ "version": "14.12.1",
+ "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.12.1.tgz",
+ "integrity": "sha512-gGjhTkauIPgFXxpBl0UZgyehrKhDe90cIS8Hn1xFBYQ63EuUAkKoUqRNmc/pcla6DD16s4cUz5tAbdSpXivnxw==",
+ "peer": true,
+ "dependencies": {
+ "@discordjs/builders": "^1.6.4",
+ "@discordjs/collection": "^1.5.2",
+ "@discordjs/formatters": "^0.3.1",
+ "@discordjs/rest": "^2.0.0",
+ "@discordjs/util": "^1.0.0",
+ "@discordjs/ws": "^1.0.0",
+ "@sapphire/snowflake": "^3.5.1",
+ "@types/ws": "^8.5.5",
+ "discord-api-types": "^0.37.50",
+ "fast-deep-equal": "^3.1.3",
+ "lodash.snakecase": "^4.1.1",
+ "tslib": "^2.6.1",
+ "undici": "^5.22.1",
+ "ws": "^8.13.0"
+ },
+ "engines": {
+ "node": ">=16.9.0"
+ }
+ },
+ "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/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.46.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
+ "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.1",
+ "@eslint/js": "^8.46.0",
+ "@humanwhocodes/config-array": "^0.11.10",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "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.2",
+ "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-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-visitor-keys": {
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
+ "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "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/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/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/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/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=="
+ },
+ "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.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "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/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.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
+ "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/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.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "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/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "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/ip": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "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==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.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/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-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/kareem": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
+ "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "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==",
+ "peer": true
+ },
+ "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/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "peer": true
+ },
+ "node_modules/magic-bytes.js": {
+ "version": "1.0.15",
+ "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz",
+ "integrity": "sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==",
+ "peer": true
+ },
+ "node_modules/memory-pager": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
+ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
+ "optional": true
+ },
+ "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/mongodb": {
+ "version": "5.7.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz",
+ "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==",
+ "dependencies": {
+ "bson": "^5.4.0",
+ "mongodb-connection-string-url": "^2.6.0",
+ "socks": "^2.7.1"
+ },
+ "engines": {
+ "node": ">=14.20.1"
+ },
+ "optionalDependencies": {
+ "saslprep": "^1.0.3"
+ },
+ "peerDependencies": {
+ "@aws-sdk/credential-providers": "^3.201.0",
+ "@mongodb-js/zstd": "^1.1.0",
+ "kerberos": "^2.0.1",
+ "mongodb-client-encryption": ">=2.3.0 <3",
+ "snappy": "^7.2.2"
+ },
+ "peerDependenciesMeta": {
+ "@aws-sdk/credential-providers": {
+ "optional": true
+ },
+ "@mongodb-js/zstd": {
+ "optional": true
+ },
+ "kerberos": {
+ "optional": true
+ },
+ "mongodb-client-encryption": {
+ "optional": true
+ },
+ "snappy": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/mongodb-connection-string-url": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
+ "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
+ "dependencies": {
+ "@types/whatwg-url": "^8.2.1",
+ "whatwg-url": "^11.0.0"
+ }
+ },
+ "node_modules/mongoose": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.2.tgz",
+ "integrity": "sha512-sNolW2hyncwvWmZjIEIwAckjaSKtC1SE86zE1v2TKm3vPTRogZfBQf+3zLYYdrgrVTzoaoICieVpct9hjcn3EQ==",
+ "dependencies": {
+ "bson": "^5.4.0",
+ "kareem": "2.5.1",
+ "mongodb": "5.7.0",
+ "mpath": "0.9.0",
+ "mquery": "5.0.0",
+ "ms": "2.1.3",
+ "sift": "16.0.1"
+ },
+ "engines": {
+ "node": ">=14.20.1"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mongoose"
+ }
+ },
+ "node_modules/mongoose/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=="
+ },
+ "node_modules/mpath": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
+ "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
+ "node_modules/mquery": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
+ "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
+ "dependencies": {
+ "debug": "4.x"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "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=="
+ },
+ "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/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/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/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-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/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/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "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/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/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/saslprep": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
+ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
+ "optional": true,
+ "dependencies": {
+ "sparse-bitfield": "^3.0.3"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "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/sift": {
+ "version": "16.0.1",
+ "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
+ "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
+ },
+ "node_modules/smart-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
+ "engines": {
+ "node": ">= 6.0.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/socks": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "dependencies": {
+ "ip": "^2.0.0",
+ "smart-buffer": "^4.2.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0",
+ "npm": ">= 3.0.0"
+ }
+ },
+ "node_modules/sparse-bitfield": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
+ "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
+ "optional": true,
+ "dependencies": {
+ "memory-pager": "^1.0.2"
+ }
+ },
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.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-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/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/tr46": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
+ "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
+ "dependencies": {
+ "punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/ts-mixer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
+ "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==",
+ "peer": true
+ },
+ "node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "peer": 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/undici": {
+ "version": "5.23.0",
+ "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz",
+ "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==",
+ "peer": true,
+ "dependencies": {
+ "busboy": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=14.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/whatwg-url": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
+ "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
+ "dependencies": {
+ "tr46": "^3.0.0",
+ "webidl-conversions": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "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/ws": {
+ "version": "8.13.0",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
+ "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
+ "peer": true,
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": 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"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 44adc60..6ef72d9 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "simply-xp",
- "version": "1.3.5-beta-7",
+ "version": "1.3.5",
"description": "A Simple, Easy and Beginner Friendly XP System",
"main": "simplyxp.js",
"typings": "index.d.ts",
@@ -42,12 +42,12 @@
"dependencies": {
"@napi-rs/canvas": "^0.1.41",
"chart.js": "^3.9.1",
- "mongoose": "^6.11.2"
+ "mongoose": "^7.4.2"
},
"peerDependencies": {
"discord.js": ">=13.12.0"
},
"devDependencies": {
- "eslint": "^8.43.0"
+ "eslint": "^8.46.0"
}
}
diff --git a/simplyxp.js b/simplyxp.js
index fccbbac..ebab2f4 100644
--- a/simplyxp.js
+++ b/simplyxp.js
@@ -1,31 +1,33 @@
try {
- require('discord.js');
+ require("discord.js");
} catch (e) {
- console.warn('[XP] Discord.js is recommended for this package.');
+ console.warn("[XP] Discord.js is recommended for this package.");
}
-module.exports.roleSetup = require('./src/roleSetup');
+module.exports.roleSetup = require("./src/roleSetup");
-module.exports.addLevel = require('./src/addLevel');
+module.exports.addLevel = require("./src/addLevel");
-module.exports.addXP = require('./src/addXP');
+module.exports.addXP = require("./src/addXP");
-module.exports.charts = require('./src/charts');
+module.exports.charts = require("./src/charts");
-module.exports.connect = require('./src/connect');
+module.exports.connect = require("./src/connect");
-module.exports.create = require('./src/create');
+module.exports.create = require("./src/create");
-module.exports.fetch = require('./src/fetch');
+module.exports.fetch = require("./src/fetch");
-module.exports.leaderboard = require('./src/leaderboard');
+module.exports.leaderboard = require("./src/leaderboard");
-module.exports.lvlRole = require('./src/lvlRole');
+module.exports.lvlRole = require("./src/lvlRole");
-module.exports.rank = require('./src/rank');
+module.exports.rank = require("./src/rank");
-module.exports.setLevel = require('./src/setLevel');
+module.exports.setLevel = require("./src/setLevel");
-module.exports.setXP = require('./src/setXP');
+module.exports.setXP = require("./src/setXP");
-module.exports.reset = require('./src/reset');
+module.exports.reset = require("./src/reset");
+
+module.exports.options = {auto_purge: false};
\ No newline at end of file
diff --git a/src/addLevel.js b/src/addLevel.js
index bf49121..9630ce7 100644
--- a/src/addLevel.js
+++ b/src/addLevel.js
@@ -1,5 +1,5 @@
-const levels = require('../src/models/level.js');
-let {roleSetup} = require('../simplyxp');
+const levels = require("../src/models/level.js");
+let {roleSetup} = require("../simplyxp");
/**
* @param {Discord.Message} message
@@ -8,11 +8,11 @@ let {roleSetup} = require('../simplyxp');
* @param {number} level
*/
async function addLevel(message, userID, guildID, level) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
- if (!level) throw new Error('[XP] Level amount is not provided.');
+ if (!level) throw new Error("[XP] Level amount is not provided.");
let {client} = message;
@@ -26,7 +26,7 @@ async function addLevel(message, userID, guildID, level) {
level: 0
});
- await newUser.save().catch(() => console.log('[XP] Failed to save new user to database'));
+ await newUser.save().catch(() => console.log("[XP] Failed to save new user to database"));
let xp = (level * 10) ** 2;
@@ -54,7 +54,7 @@ async function addLevel(message, userID, guildID, level) {
let role = await roleSetup.find(client, guildID, level);
- client.emit('levelUp', message, data, role);
+ client.emit("levelUp", message, data, role);
}
return {
diff --git a/src/addXP.js b/src/addXP.js
index 34128e0..2fb30b1 100644
--- a/src/addXP.js
+++ b/src/addXP.js
@@ -1,5 +1,5 @@
-const levels = require('../src/models/level.js');
-let {roleSetup} = require('../simplyxp');
+const levels = require("../src/models/level.js");
+let {roleSetup} = require("../simplyxp");
/**
* @param {Discord.Message} message
@@ -9,11 +9,11 @@ let {roleSetup} = require('../simplyxp');
*/
async function addXP(message, userID, guildID, xp) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
- if (!xp) throw new Error('[XP] XP amount is not provided.');
+ if (!xp) throw new Error("[XP] XP amount is not provided.");
let {client} = message;
@@ -22,25 +22,25 @@ async function addXP(message, userID, guildID, xp) {
if (xp.min) {
if (!xp.max)
throw new Error(
- '[XP] XP min amount is provided but max amount is not provided.'
+ "[XP] XP min amount is provided but max amount is not provided."
);
min = Number(xp.min);
- if (Number(xp.min).toString() === 'NaN')
- throw new Error('[XP] XP amount (min) is not a number.');
+ if (Number(xp.min).toString() === "NaN")
+ throw new Error("[XP] XP amount (min) is not a number.");
}
if (xp.max) {
if (!xp.min)
throw new Error(
- '[XP] XP max amount is provided but min amount is not provided.'
+ "[XP] XP max amount is provided but min amount is not provided."
);
max = Number(xp.max);
- if (Number(xp.max).toString() === 'NaN')
- throw new Error('[XP] XP amount (max) is not a number.');
+ if (Number(xp.max).toString() === "NaN")
+ throw new Error("[XP] XP amount (max) is not a number.");
}
if (xp.min && xp.max) {
@@ -60,7 +60,7 @@ async function addXP(message, userID, guildID, xp) {
level: lvl
});
- await newUser.save().catch(() => console.log('[XP] Failed to save new user to database'));
+ await newUser.save().catch(() => console.log("[XP] Failed to save new user to database"));
return {
level: 0,
@@ -92,7 +92,7 @@ async function addXP(message, userID, guildID, xp) {
let role = await roleSetup.find(client, guildID, level);
- client.emit('levelUp', message, data, role);
+ client.emit("levelUp", message, data, role);
}
return {
diff --git a/src/charts.js b/src/charts.js
index bca84dc..84b2676 100644
--- a/src/charts.js
+++ b/src/charts.js
@@ -1,18 +1,18 @@
-let leaderboard = require('./leaderboard');
+let leaderboard = require("./leaderboard");
/**
* @param {Discord.Message} message
- * @param {import('../index').chartsOptions} options
+ * @param {import("../index").chartsOptions} options
*/
async function charts(message, options) {
try {
- require('canvas');
+ require("canvas");
} catch {
- throw '[XP] This requires canvas to be installed. \n"npm install canvas"';
+ throw "[XP] This requires canvas to be installed. \n\"npm install canvas\"";
}
- const ChartJS = require('chart.js');
- const Canvas = require('canvas');
+ const ChartJS = require("chart.js");
+ const Canvas = require("canvas");
let {client} = message;
let data = [];
@@ -30,30 +30,30 @@ async function charts(message, options) {
});
new ChartJS(ctx, {
- type: options.type || 'bar',
+ type: options.type || "bar",
data: {
labels: uzern,
datasets: [
{
- label: 'Leaderboards',
+ label: "Leaderboards",
data: data,
backgroundColor: [
- 'rgba(255, 99, 132, 0.5)',
- 'rgba(255, 159, 64, 0.5)',
- 'rgba(255, 205, 86, 0.5)',
- 'rgba(75, 192, 192, 0.5)',
- 'rgba(54, 162, 235, 0.5)',
- 'rgba(153, 102, 255, 0.5)',
- 'rgb(201, 203, 207, 0.5)'
+ "rgba(255, 99, 132, 0.5)",
+ "rgba(255, 159, 64, 0.5)",
+ "rgba(255, 205, 86, 0.5)",
+ "rgba(75, 192, 192, 0.5)",
+ "rgba(54, 162, 235, 0.5)",
+ "rgba(153, 102, 255, 0.5)",
+ "rgb(201, 203, 207, 0.5)"
],
borderColor: [
- 'rgb(255, 99, 132)',
- 'rgb(255, 159, 64)',
- 'rgb(255, 205, 86)',
- 'rgb(75, 192, 192)',
- 'rgb(54, 162, 235)',
- 'rgb(153, 102, 255)',
- 'rgb(201, 203, 207)'
+ "rgb(255, 99, 132)",
+ "rgb(255, 159, 64)",
+ "rgb(255, 205, 86)",
+ "rgb(75, 192, 192)",
+ "rgb(54, 162, 235)",
+ "rgb(153, 102, 255)",
+ "rgb(201, 203, 207)"
],
borderWidth: 2
}
@@ -64,18 +64,18 @@ async function charts(message, options) {
plugins: {
title: {
display: true,
- text: 'XP Datasheet'
+ text: "XP Datasheet"
}
}
},
plugins: [
{
- id: 'simply-xp',
+ id: "simply-xp",
beforeDraw: (chart) => {
- const ctx = chart.canvas.getContext('2d');
+ const ctx = chart.canvas.getContext("2d");
ctx.save();
- ctx.globalCompositeOperation = 'destination-over';
- ctx.fillStyle = options.background || '#2F3136';
+ ctx.globalCompositeOperation = "destination-over";
+ ctx.fillStyle = options.background || "#2F3136";
ctx.fillRect(0, 0, chart.width, chart.height);
ctx.restore();
}
@@ -84,8 +84,8 @@ async function charts(message, options) {
}).update();
return {
- attachment: ctx.toBuffer('image/png'),
- name: 'chart.png'
+ attachment: ctx.toBuffer("image/png"),
+ name: "chart.png"
};
}
diff --git a/src/connect.js b/src/connect.js
index b4b0a7c..2ee476e 100644
--- a/src/connect.js
+++ b/src/connect.js
@@ -1,22 +1,21 @@
-const mongoose = require('mongoose');
+const mongoose = require("mongoose");
/**
* @param {string} db
- * @param {import('../index').connectOptions} options
+ * @param {import("../index").connectOptions} options
*/
async function connect(db, options = []) {
- if (!db) throw new Error('[XP] Database URL was not provided');
- mongoose.set('strictQuery', true);
-
+ if (!db) throw new Error("[XP] Database URL was not provided");
+ mongoose.set("strictQuery", true);
+
mongoose.connect(db, {
useNewUrlParser: true,
useUnifiedTopology: true
});
- if (options.notify === false) return;
- else return console.log('{ XP } Database Connected');
+ if (options.notify) return console.log("{ XP } Database Connected");
}
module.exports = connect;
\ No newline at end of file
diff --git a/src/create.js b/src/create.js
index c46e875..233b952 100644
--- a/src/create.js
+++ b/src/create.js
@@ -1,4 +1,4 @@
-const levels = require('../src/models/level.js');
+const levels = require("../src/models/level.js");
/**
* @param {string} userID
@@ -6,11 +6,11 @@ const levels = require('../src/models/level.js');
*/
async function create(userID, guildID) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] User ID was not provided.');
+ if (!guildID) throw new Error("[XP] User ID was not provided.");
- let uzer = await levels.findOne({ user: userID, guild: guildID });
+ let uzer = await levels.findOne({user: userID, guild: guildID});
if (uzer) return;
@@ -20,7 +20,7 @@ async function create(userID, guildID) {
});
await newuser
.save()
- .catch(() => console.log('[XP] Failed to save new use to database'));
+ .catch(() => console.log("[XP] Failed to save new use to database"));
return true;
}
diff --git a/src/fetch.js b/src/fetch.js
index ec062c9..5bc73d3 100644
--- a/src/fetch.js
+++ b/src/fetch.js
@@ -1,4 +1,4 @@
-const levels = require('../src/models/level.js');
+const levels = require("../src/models/level.js");
/**
* @param {string} userID
@@ -6,9 +6,9 @@ const levels = require('../src/models/level.js');
*/
async function fetch(userID, guildID) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
let user = await levels.findOne({
user: userID,
@@ -29,7 +29,7 @@ async function fetch(userID, guildID) {
.find({
guild: guildID
})
- .sort([['xp', 'descending']])
+ .sort([["xp", "descending"]])
.exec();
if (user === null)
@@ -49,7 +49,7 @@ async function fetch(userID, guildID) {
let target = targetxp * targetxp * 100;
function shortener(count) {
- const COUNT_ABBRS = ['', 'k', 'M', 'T'];
+ const COUNT_ABBRS = ["", "k", "M", "T"];
const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000));
let result = parseFloat((count / Math.pow(1000, i)).toFixed(2));
diff --git a/src/leaderboard.js b/src/leaderboard.js
index 99b32db..3bc29c3 100644
--- a/src/leaderboard.js
+++ b/src/leaderboard.js
@@ -1,4 +1,5 @@
-const levels = require('../src/models/level.js');
+const levels = require("../src/models/level.js");
+const {options} = require("../simplyxp");
/**
* @param {Discord.Client} client
@@ -7,17 +8,17 @@ const levels = require('../src/models/level.js');
*/
async function leaderboard(client, guildID, limit) {
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
let g = client.guilds.cache.get(guildID);
- if (!g) throw new Error('[XP] Guild was not found.');
+ if (!g) throw new Error("[XP] Guild was not found.");
- let leaderboard = await levels.find({guild: guildID}).sort([['xp', 'descending']]);
+ let leaderboard = await levels.find({guild: guildID}).sort([["xp", "descending"]]);
let led = [];
function shortener(count) {
- const COUNT_ABBRS = ['', 'k', 'M', 'T'];
+ const COUNT_ABBRS = ["", "k", "M", "T"];
const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000));
let result = parseFloat((count / Math.pow(1000, i)).toFixed(2));
@@ -27,13 +28,11 @@ async function leaderboard(client, guildID, limit) {
const led2 = leaderboard.map(async (key) => {
const user = await g.members.fetch(key.user).catch(() => null);
- if (!user) return levels.deleteOne({user: key.user, guild: guildID});
+ if (!user && options.auto_purge) return levels.deleteOne({user: key.user, guild: guildID});
if (key.xp === 0) return;
- let pos = leaderboard.indexOf(key) + 1;
- if (limit) {
- if (pos > Number(limit)) return;
- }
+ let pos = leaderboard.indexOf(key) + 1;
+ if (limit && pos > Number(limit)) return;
led.push({
guildID: key.guild,
diff --git a/src/lvlRole.js b/src/lvlRole.js
index 17e9207..a3a5eeb 100644
--- a/src/lvlRole.js
+++ b/src/lvlRole.js
@@ -1,5 +1,5 @@
-const levels = require('../src/models/level.js');
-const lrole = require('../src/models/lvlrole.js');
+const levels = require("../src/models/level.js");
+const lrole = require("../src/models/lvlrole.js");
/**
* @param {Discord.Message} message
@@ -26,7 +26,7 @@ async function lvlRole(message, userID, guildID) {
await newuser
.save()
- .catch(() => console.log('[XP] Failed to save new user to database'));
+ .catch(() => console.log("[XP] Failed to save new user to database"));
}
e.forEach((ee) => {
@@ -41,7 +41,7 @@ async function lvlRole(message, userID, guildID) {
else {
u.roles.add(real).catch(() => {
message.channel.send(
- '[XP] ERROR: Role is higher than me. `MISSING_PERMISSIONS`'
+ "[XP] ERROR: Role is higher than me. `MISSING_PERMISSIONS`"
);
});
}
diff --git a/src/models/level.js b/src/models/level.js
index b17cb15..6558f22 100644
--- a/src/models/level.js
+++ b/src/models/level.js
@@ -1,10 +1,10 @@
-const mongoose = require('mongoose');
+const mongoose = require("mongoose");
const Levelz = new mongoose.Schema({
- user: { type: String, unique: true },
- guild: { type: String },
- xp: { type: Number, default: 0 },
- level: { type: Number, default: 0 }
+ user: {type: String, unique: true},
+ guild: {type: String},
+ xp: {type: Number, default: 0},
+ level: {type: Number, default: 0}
});
-module.exports = mongoose.model('Simply-XP', Levelz);
+module.exports = mongoose.model("Simply-XP", Levelz);
\ No newline at end of file
diff --git a/src/models/lvlrole.js b/src/models/lvlrole.js
index 64d5466..45a82e1 100644
--- a/src/models/lvlrole.js
+++ b/src/models/lvlrole.js
@@ -1,8 +1,8 @@
-const mongoose = require('mongoose');
+const mongoose = require("mongoose");
const rol = new mongoose.Schema({
- gid: { type: String },
- lvlrole: { type: Array }
+ gid: {type: String},
+ lvlrole: {type: Array}
});
-module.exports = mongoose.model('Simply-XP-LevelRole', rol);
+module.exports = mongoose.model("Simply-XP-LevelRole", rol);
\ No newline at end of file
diff --git a/src/rank.js b/src/rank.js
index dfaf04f..25312f4 100644
--- a/src/rank.js
+++ b/src/rank.js
@@ -1,29 +1,29 @@
-const levels = require('../src/models/level.js');
-const {join} = require('path');
+const levels = require("../src/models/level.js");
+const {join} = require("path");
/**
* @param {Discord.Message} message
* @param {string} userID
* @param {string} guildID
- * @param {import('../index').rankOptions} options
+ * @param {import("../index").rankOptions} options
*/
async function rank(message, userID, guildID, options = []) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
const user = await levels.findOne({
user: userID,
guild: guildID
});
- if (!user) throw new Error('[XP] NO_DATA | User has no XP data.');
+ if (!user) throw new Error("[XP] NO_DATA | User has no XP data.");
const leaderboard = await levels
.find({
guild: guildID
})
- .sort([['xp', 'descending']])
+ .sort([["xp", "descending"]])
.exec();
user.position = leaderboard.findIndex((i) => i.user === userID) + 1;
@@ -46,49 +46,49 @@ async function rank(message, userID, guildID, options = []) {
async function rankCard(message, options = []) {
try {
- const Canvas = require('@napi-rs/canvas');
+ const Canvas = require("@napi-rs/canvas");
Canvas.GlobalFonts.registerFromPath(
- join(__dirname, 'Fonts', 'Baloo-Regular.ttf'),
- 'Sans Serif'
+ join(__dirname, "Fonts", "Baloo-Regular.ttf"),
+ "Sans Serif"
);
const member = options.member;
const canvas = Canvas.createCanvas(1080, 400),
- ctx = canvas.getContext('2d');
+ ctx = canvas.getContext("2d");
const name = member.tag;
- const noSymbols = (string) => string.replace(/[\u007f-\uffff]/g, '');
+ const noSymbols = (string) => string.replace(/[\u007f-\uffff]/g, "");
- let fsiz = '45px';
+ let fsiz = "45px";
if (message.guild.name.length >= 23) {
- fsiz = '38px';
+ fsiz = "38px";
}
if (message.guild.name.length >= 40) {
- fsiz = '28px';
+ fsiz = "28px";
}
if (message.guild.name.length >= 63) {
- fsiz = '22px';
+ fsiz = "22px";
}
- let BackgroundRadius = '20',
+ let BackgroundRadius = "20",
BackGroundImg =
- options.background ||
- 'https://i.ibb.co/QQvMqf7/gradient.jpg',
- AttachmentName = 'rank.png',
- AttachmentDesc = 'Rank Card',
+ options.background ||
+ "https://i.ibb.co/QQvMqf7/gradient.jpg",
+ AttachmentName = "rank.png",
+ AttachmentDesc = "Rank Card",
Username = noSymbols(name),
- AvatarRoundRadius = '50',
- DrawLayerColor = '#000000',
+ AvatarRoundRadius = "50",
+ DrawLayerColor = "#000000",
DrawLayerOpacity = 0.4,
- BoxColor = options.color || '#096DD1',
- LevelBarFill = options.lvlbar || '#ffffff',
- LevelBarBackground = options.lvlbarBg || '#ffffff',
+ BoxColor = options.color || "#096DD1",
+ LevelBarFill = options.lvlbar || "#ffffff",
+ LevelBarBackground = options.lvlbarBg || "#ffffff",
Rank = options.rank,
- TextEXP = shortener(options.currentXP) + ' XP',
+ TextEXP = shortener(options.currentXP) + " XP",
LvlText = `Level ${shortener(options.level)}`,
- BarRadius = '20',
- TextXpNeded = '{current}/{needed}',
+ BarRadius = "20",
+ TextXpNeded = "{current}/{needed}",
CurrentXP = options.currentXP,
NeededXP = options.neededXP;
@@ -110,7 +110,7 @@ async function rank(message, userID, guildID, options = []) {
ctx.quadraticCurveTo(0, 0, Number(BackgroundRadius), 0);
ctx.closePath();
ctx.clip();
- ctx.fillStyle = '#000000';
+ ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 1080, 400);
let background = await Canvas.loadImage(BackGroundImg);
ctx.globalAlpha = 0.7;
@@ -134,64 +134,64 @@ async function rank(message, userID, guildID, options = []) {
ctx.save();
RoundedBox(ctx, 70, 240 + 50 + 30, 180, 50, 20);
- ctx.strokeStyle = '#BFC85A22';
+ ctx.strokeStyle = "#BFC85A22";
ctx.stroke();
ctx.clip();
ctx.fillStyle = BoxColor;
ctx.globalAlpha = 1;
ctx.fillRect(70, 320, 180, 50);
ctx.globalAlpha = 1;
- ctx.fillStyle = '#ffffff';
- ctx.font = '32px "Sans Serif"';
- ctx.textAlign = 'center';
+ ctx.fillStyle = "#ffffff";
+ ctx.font = "32px \"Sans Serif\"";
+ ctx.textAlign = "center";
ctx.fillText(TextEXP, 160, 358);
ctx.restore();
ctx.save();
RoundedBox(ctx, 70, 240, 180, 50, 20);
- ctx.strokeStyle = '#BFC85A22';
+ ctx.strokeStyle = "#BFC85A22";
ctx.stroke();
ctx.clip();
ctx.fillStyle = BoxColor;
ctx.globalAlpha = 1;
ctx.fillRect(70, 240, 180, 50, 50);
ctx.globalAlpha = 1;
- ctx.fillStyle = '#ffffff';
- ctx.font = '32px "Sans Serif"';
- ctx.textAlign = 'center';
+ ctx.fillStyle = "#ffffff";
+ ctx.font = "32px \"Sans Serif\"";
+ ctx.textAlign = "center";
ctx.fillText(LvlText, 70 + 180 / 2, 278);
ctx.restore();
ctx.save();
- ctx.textAlign = 'left';
- ctx.fillStyle = '#ffffff';
- ctx.shadowColor = '#000000';
+ ctx.textAlign = "left";
+ ctx.fillStyle = "#ffffff";
+ ctx.shadowColor = "#000000";
ctx.shadowBlur = 15;
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 1;
- ctx.font = '39px "Sans Serif"';
+ ctx.font = "39px \"Sans Serif\"";
ctx.fillText(Username, 390, 80);
ctx.restore();
ctx.save();
- ctx.textAlign = 'right';
- ctx.fillStyle = '#ffffff';
- ctx.shadowColor = '#000000';
+ ctx.textAlign = "right";
+ ctx.fillStyle = "#ffffff";
+ ctx.shadowColor = "#000000";
ctx.shadowBlur = 15;
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 1;
- ctx.font = '55px "Sans Serif"';
- ctx.fillText('#' + Rank, canvas.width - 55, 80);
+ ctx.font = "55px \"Sans Serif\"";
+ ctx.fillText("#" + Rank, canvas.width - 55, 80);
ctx.restore();
ctx.save();
RoundedBox(ctx, 390, 305, 660, 70, Number(20));
- ctx.strokeStyle = '#BFC85A22';
+ ctx.strokeStyle = "#BFC85A22";
ctx.stroke();
ctx.clip();
- ctx.fillStyle = '#ffffff';
+ ctx.fillStyle = "#ffffff";
ctx.font = `${fsiz} "Sans Serif"`;
- ctx.textAlign = 'center';
+ ctx.textAlign = "center";
ctx.fillText(message.guild.name, 720, 355);
ctx.globalAlpha = 0.2;
ctx.fillRect(390, 305, 660, 70);
@@ -199,7 +199,7 @@ async function rank(message, userID, guildID, options = []) {
ctx.save();
RoundedBox(ctx, 390, 145, 660, 50, Number(BarRadius));
- ctx.strokeStyle = '#BFC85A22';
+ ctx.strokeStyle = "#BFC85A22";
ctx.stroke();
ctx.clip();
ctx.fillStyle = LevelBarBackground;
@@ -212,7 +212,7 @@ async function rank(message, userID, guildID, options = []) {
ctx.save();
RoundedBox(ctx, 390, 145, progress, 50, Number(BarRadius));
- ctx.strokeStyle = '#BFC85A22';
+ ctx.strokeStyle = "#BFC85A22";
ctx.stroke();
ctx.clip();
ctx.fillStyle = LevelBarFill;
@@ -221,25 +221,25 @@ async function rank(message, userID, guildID, options = []) {
ctx.restore();
ctx.save();
- ctx.textAlign = 'left';
- ctx.fillStyle = '#ffffff';
+ ctx.textAlign = "left";
+ ctx.fillStyle = "#ffffff";
ctx.globalAlpha = 0.8;
- ctx.font = '30px "Sans Serif"';
- ctx.fillText('Next Level: ' + shortener(NeededXP) + ' XP', 390, 230);
+ ctx.font = "30px \"Sans Serif\"";
+ ctx.fillText("Next Level: " + shortener(NeededXP) + " XP", 390, 230);
ctx.restore();
const latestXP = Number(CurrentXP) - Number(NeededXP);
const textXPEdited = TextXpNeded.replace(/{needed}/g, shortener(NeededXP).toString())
.replace(/{current}/g, shortener(CurrentXP).toString())
.replace(/{latest}/g, latestXP.toString());
- ctx.textAlign = 'center';
- ctx.fillStyle = '#474747';
+ ctx.textAlign = "center";
+ ctx.fillStyle = "#474747";
ctx.globalAlpha = 1;
- ctx.font = '30px "Sans Serif"';
+ ctx.font = "30px \"Sans Serif\"";
ctx.fillText(textXPEdited, 730, 180);
return {
- attachment: canvas.toBuffer('image/webp'),
+ attachment: canvas.toBuffer("image/webp"),
description: AttachmentDesc,
name: AttachmentName
};
@@ -270,19 +270,19 @@ function RoundedBox(ctx, x, y, width, height, radius) {
function shortener(count) {
const COUNT_ABBRS = [
- '',
- 'k',
- 'M',
- 'B',
- 'T',
- 'Q',
- 'Q+',
- 'S',
- 'S+',
- 'O',
- 'N',
- 'D',
- 'U'
+ "",
+ "k",
+ "M",
+ "B",
+ "T",
+ "Q",
+ "Q+",
+ "S",
+ "S+",
+ "O",
+ "N",
+ "D",
+ "U"
];
const i = 0 === count ? count : Math.floor(Math.log(count) / Math.log(1000));
diff --git a/src/reset.js b/src/reset.js
index ecffc2a..1a7594c 100644
--- a/src/reset.js
+++ b/src/reset.js
@@ -1,4 +1,4 @@
-const levels = require('../src/models/level.js');
+const levels = require("../src/models/level.js");
/**
* @param {string} userID
@@ -6,17 +6,17 @@ const levels = require('../src/models/level.js');
*/
async function reset(userID, guildID) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
- if (!guildID) throw new Error('[XP] User ID was not provided.');
+ if (!guildID) throw new Error("[XP] User ID was not provided.");
await levels
- .findOneAndUpdate({ user: userID, guild: guildID }, { xp: 0, level: 0 })
+ .findOneAndUpdate({user: userID, guild: guildID}, {xp: 0, level: 0})
.catch((err) => {
throw new Error(err);
});
- return { user: userID, guild: guildID, xp: 0, level: 0 };
+ return {user: userID, guild: guildID, xp: 0, level: 0};
}
module.exports = reset;
diff --git a/src/roleSetup.js b/src/roleSetup.js
index ff20bfe..312f773 100644
--- a/src/roleSetup.js
+++ b/src/roleSetup.js
@@ -1,11 +1,11 @@
-const lrole = require('../src/models/lvlrole.js');
+const lrole = require("../src/models/lvlrole.js");
class roleSetup {
/**
- * @param {Discord.Client} client
- * @param {string} guildID
- * @param {import('../index').lvladdOptions} options
- */
+ * @param {Discord.Client} client
+ * @param {string} guildID
+ * @param {import("../index").lvladdOptions} options
+ */
static async add(client, guildID, options = []) {
let rol = await lrole.findOne({
@@ -21,7 +21,7 @@ class roleSetup {
let roll = g.roles.cache.find((r) => r.id === options.role);
if (roll) {
- if (rol) throw new Error('Level Already Exist. Use delete');
+ if (rol) throw new Error("Level Already Exist. Use delete");
else if (!rol) {
let newrol = await lrole.findOne({
gid: guildID
@@ -36,7 +36,7 @@ class roleSetup {
await newrol.save();
}
- newrol.lvlrole.push({ lvl: options.level, role: options.role });
+ newrol.lvlrole.push({lvl: options.level, role: options.role});
await newrol
.save()
@@ -48,17 +48,17 @@ class roleSetup {
}
} else {
throw new Error(
- 'Role ID is invalid. | ' +
- `Guild ID: ${guildID} | Role ID: ${options.role}`
+ "Role ID is invalid. | " +
+ `Guild ID: ${guildID} | Role ID: ${options.role}`
);
}
}
/**
- * @param {Discord.Client} client
- * @param {string} guildID
- * @param {import('../index').lvlremoveOptions} options
- */
+ * @param {Discord.Client} client
+ * @param {string} guildID
+ * @param {import("../index").lvlremoveOptions} options
+ */
static async remove(client, guildID, options = []) {
let rol = await lrole.find({
@@ -66,7 +66,7 @@ class roleSetup {
});
if (!rol || rol.length === 0)
- throw new Error('Level role with this level does not exist');
+ throw new Error("Level role with this level does not exist");
rol = rol[0].lvlrole.find((item) => item.lvl === options.level) || undefined;
if (rol) {
@@ -75,18 +75,18 @@ class roleSetup {
gid: guildID
},
{
- $pull: { lvlrole: { lvl: options.level } }
+ $pull: {lvlrole: {lvl: options.level}}
}
);
return true;
- } else throw new Error('Level role with this level does not exist');
+ } else throw new Error("Level role with this level does not exist");
}
/**
- * @param {Discord.Client} client
- * @param {string} guildID
- */
+ * @param {Discord.Client} client
+ * @param {string} guildID
+ */
static async fetch(client, guildID) {
let rol = await lrole.find({
@@ -99,10 +99,10 @@ class roleSetup {
}
/**
- * @param {Discord.Client} client
- * @param {string} guildID
- * @param {string} level
- */
+ * @param {Discord.Client} client
+ * @param {string} guildID
+ * @param {string} level
+ */
static async find(client, guildID, level) {
let rol = await lrole.find({
diff --git a/src/setLevel.js b/src/setLevel.js
index 32c8fb3..35ad41d 100644
--- a/src/setLevel.js
+++ b/src/setLevel.js
@@ -1,5 +1,5 @@
-const levels = require('../src/models/level.js');
-let { roleSetup } = require('../simplyxp');
+const levels = require("../src/models/level.js");
+const {roleSetup} = require("../simplyxp");
/**
* @param {Discord.Message} message
@@ -8,47 +8,19 @@ let { roleSetup } = require('../simplyxp');
* @param {string} level
*/
async function setLevel(message, userID, guildID, level) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
+ if (!userID) throw new Error("[XP] User ID was not provided.");
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
+ if (!level || isNaN(Number(level))) throw new Error("[XP] Invalid level amount.");
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
+ const {client} = message;
- if (!level) throw new Error('[XP] Level amount is not provided.');
+ const user = await levels.findOneAndUpdate(
+ {user: userID, guild: guildID},
+ {xp: (level * 10) ** 2, level: Math.floor(0.1 * Math.sqrt((level * 10) ** 2))},
+ {upsert: true, new: true}
+ );
- let { client } = message;
-
- const user = await levels.findOne({ user: userID, guild: guildID });
-
- if (!user) {
- const newUser = new levels({
- user: userID,
- guild: guildID,
- xp: 0,
- level: 0
- });
-
- await newUser
- .save()
- .catch(() => console.log('[XP] Failed to save new user to database'));
-
- let xp = (level * 10) ** 2;
-
- return {
- level: level,
- exp: xp
- };
- }
- let level1 = user.level;
-
- user.xp = (level * 10) ** 2;
- user.level = Math.floor(0.1 * Math.sqrt(user.xp));
-
- await user
- .save()
- .catch((e) =>
- console.log(`[XP] Failed to set Level | User: ${userID} | Err: ${e}`)
- );
-
- if (level1 !== level) {
+ if (user.level !== level) {
let data = {
xp: user.xp,
level: user.level,
@@ -58,7 +30,7 @@ async function setLevel(message, userID, guildID, level) {
let role = await roleSetup.find(client, guildID, level);
- client.emit('levelUp', message, data, role);
+ client.emit("levelUp", message, data, role);
}
return {
@@ -67,4 +39,4 @@ async function setLevel(message, userID, guildID, level) {
};
}
-module.exports = setLevel;
+module.exports = setLevel;
\ No newline at end of file
diff --git a/src/setXP.js b/src/setXP.js
index 3389456..0f18e52 100644
--- a/src/setXP.js
+++ b/src/setXP.js
@@ -1,51 +1,23 @@
-const levels = require('../src/models/level.js');
-
-/**
- * @param {string} userID
- * @param {string} guildID
- * @param {string} xp
- */
+const levels = require("../src/models/level.js");
async function setXP(userID, guildID, xp) {
- if (!userID) throw new Error('[XP] User ID was not provided.');
-
- if (!guildID) throw new Error('[XP] Guild ID was not provided.');
-
- if (!xp) throw new Error('[XP] XP amount is not provided.');
-
- if (Number(xp).toString() === 'NaN')
- throw new Error('[XP] XP amount is not a number.');
-
- const user = await levels.findOne({ user: userID, guild: guildID });
-
- let lvl = Math.floor(0.1 * Math.sqrt(xp));
-
- if (!user) {
- const newUser = new levels({
- user: userID,
- guild: guildID,
- xp: xp,
- level: lvl
- });
-
- await newUser
- .save()
- .catch(() => console.log('[XP] Failed to save new use to database'));
-
- return {
- xp: 0
- };
+ if (!userID) throw new Error("[XP] User ID was not provided.");
+ if (!guildID) throw new Error("[XP] Guild ID was not provided.");
+ if (!xp || isNaN(Number(xp))) throw new Error("[XP] Invalid XP amount.");
+
+ const user = await levels.findOneAndUpdate(
+ {user: userID, guild: guildID},
+ {xp: xp},
+ {upsert: true}
+ );
+
+ const lvl = Math.floor(0.1 * Math.sqrt(xp));
+ if (user.level !== lvl) {
+ user.level = lvl;
+ await user.save().catch((e) => console.log(`[XP] Failed to set XP | User: ${userID} | Err: ${e}`));
}
- user.xp = xp;
- user.level = Math.floor(0.1 * Math.sqrt(user.xp));
-
- await user
- .save()
- .catch((e) =>
- console.log(`[XP] Failed to set XP | User: ${userID} | Err: ${e}`)
- );
- return { xp };
+ return {xp};
}
-module.exports = setXP;
+module.exports = setXP;
\ No newline at end of file
From b50ac7a8cab231011d0d6a0ca6052afb2cc1f687 Mon Sep 17 00:00:00 2001
From: Abadima
Date: Sun, 6 Aug 2023 22:54:12 -0400
Subject: [PATCH 02/33] *quick updates
---
.npmignore | 4 +++-
package.json | 3 ++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/.npmignore b/.npmignore
index 0788fce..ebaf393 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,7 +1,9 @@
+.eslintrc.json
.gitignore
+.github
+.idea
.tgz
.vscode
-eslintrc.json
Examples
node_modules
pnpm-lock.yaml
\ No newline at end of file
diff --git a/package.json b/package.json
index 6ef72d9..008b809 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,8 @@
"typings": "index.d.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
- "beta": "eslint . --fix && npm update && npm publish --tag beta"
+ "beta": "eslint . --fix && npm update && npm publish --tag beta",
+ "legacy": "eslint . --fix && npm update && npm publish --tag legacy"
},
"author": "Rahuletto",
"keywords": [
From 8922663d894e39142ec5516d19a406d0e94765eb Mon Sep 17 00:00:00 2001
From: Abadima
Date: Fri, 11 Aug 2023 23:29:51 -0400
Subject: [PATCH 03/33] v1.3.7
Bug Fixes
---
README.md | 1 +
package-lock.json | 1754 --------------------------------------------
package.json | 13 +-
simplyxp.js | 6 +-
src/leaderboard.js | 8 +-
5 files changed, 15 insertions(+), 1767 deletions(-)
delete mode 100644 package-lock.json
diff --git a/README.md b/README.md
index 60ec6af..f10b276 100644
--- a/README.md
+++ b/README.md
@@ -33,6 +33,7 @@ yarn add simply-xp
- Fixed Various Bugs
- Updated `Chart.js`
- D.JS v14 Support
+- Patched v1.3.5 Bugs
# But Why ?
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 75743ea..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,1754 +0,0 @@
-{
- "name": "simply-xp",
- "version": "1.3.5",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "simply-xp",
- "version": "1.3.5",
- "license": "Apache-2.0",
- "dependencies": {
- "@napi-rs/canvas": "^0.1.41",
- "chart.js": "^3.9.1",
- "mongoose": "^7.4.2"
- },
- "devDependencies": {
- "eslint": "^8.46.0"
- },
- "peerDependencies": {
- "discord.js": ">=13.12.0"
- }
- },
- "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/@discordjs/builders": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.4.tgz",
- "integrity": "sha512-ARFKvmAkLhfkQQiNxqi0YIWqwUExvBRtvdtMFVJXvJoibsGkFrB/DWTf9byU7BTVUfsmW8w7NM55tYXR5S/iSg==",
- "peer": true,
- "dependencies": {
- "@discordjs/formatters": "^0.3.1",
- "@discordjs/util": "^1.0.0",
- "@sapphire/shapeshift": "^3.9.2",
- "discord-api-types": "^0.37.50",
- "fast-deep-equal": "^3.1.3",
- "ts-mixer": "^6.0.3",
- "tslib": "^2.6.1"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/collection": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.2.tgz",
- "integrity": "sha512-LDplPy8SPbc8MYkuCdnLRGWqygAX97E8NH7gA9uz+NZ/hXknUKJHuxsOmhC6pmHnF9Zmg0kvfwrDjGsRIljt9g==",
- "peer": true,
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/formatters": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz",
- "integrity": "sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA==",
- "peer": true,
- "dependencies": {
- "discord-api-types": "^0.37.41"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/rest": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.0.0.tgz",
- "integrity": "sha512-CW9ldfzsRzUbHcS4Oqu5+Moo+yrQ5qQ9groKNxPOzcoq2nuXa/fXOXkuQtQHcTeSVXsC9cmJ56M8gBDBUyLgGA==",
- "peer": true,
- "dependencies": {
- "@discordjs/collection": "^1.5.2",
- "@discordjs/util": "^1.0.0",
- "@sapphire/async-queue": "^1.5.0",
- "@sapphire/snowflake": "^3.5.1",
- "@vladfrangu/async_event_emitter": "^2.2.2",
- "discord-api-types": "^0.37.50",
- "magic-bytes.js": "^1.0.15",
- "tslib": "^2.6.1",
- "undici": "^5.22.1"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/util": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.0.tgz",
- "integrity": "sha512-U2Iiab0mo8cFe+o4ZY4GROoAetGjFYA1PhhxiXEW82LuPUjOU/seHZDtVjDpOf6n3rz4IRm84wNtgHdpqRY5CA==",
- "peer": true,
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/@discordjs/ws": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.0.tgz",
- "integrity": "sha512-POiImjuQJzwCxjJs4JCtDcTjzvjVsVQbnsaoW/F03yTVdrj/xSpmgv4383AnpNEYXI+CA6ggkz37phZDsZQ1NQ==",
- "peer": true,
- "dependencies": {
- "@discordjs/collection": "^1.5.2",
- "@discordjs/rest": "^2.0.0",
- "@discordjs/util": "^1.0.0",
- "@sapphire/async-queue": "^1.5.0",
- "@types/ws": "^8.5.5",
- "@vladfrangu/async_event_emitter": "^2.2.2",
- "discord-api-types": "^0.37.50",
- "tslib": "^2.6.1",
- "ws": "^8.13.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "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.6.2",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz",
- "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==",
- "dev": true,
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz",
- "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==",
- "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.46.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz",
- "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- }
- },
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.10",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
- "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
- "dev": true,
- "dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
- "debug": "^4.1.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": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
- },
- "node_modules/@napi-rs/canvas": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.41.tgz",
- "integrity": "sha512-JjdMfKyXox09KgC3fNB4+x0M/rwufIWrfcBDU0BuF6jKVhlSSSNy7D2WEX4zs5NgWHeiArHCXLtJ0dW6KyK7GQ==",
- "engines": {
- "node": ">= 10"
- },
- "optionalDependencies": {
- "@napi-rs/canvas-android-arm64": "0.1.41",
- "@napi-rs/canvas-darwin-arm64": "0.1.41",
- "@napi-rs/canvas-darwin-x64": "0.1.41",
- "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.41",
- "@napi-rs/canvas-linux-arm64-gnu": "0.1.41",
- "@napi-rs/canvas-linux-arm64-musl": "0.1.41",
- "@napi-rs/canvas-linux-x64-gnu": "0.1.41",
- "@napi-rs/canvas-linux-x64-musl": "0.1.41",
- "@napi-rs/canvas-win32-x64-msvc": "0.1.41"
- }
- },
- "node_modules/@napi-rs/canvas-android-arm64": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.41.tgz",
- "integrity": "sha512-hPYeFbgusSK9g6TxYXH4bKFGkH9Win7hP83HNw1ZiOS1xY16jw6xEEPzkIbKLIJDlDOIXuZ+s2mey4JE0n0GZA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-darwin-arm64": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.41.tgz",
- "integrity": "sha512-tBkzCYOQWfKmMyHVyPGhBKyowH8mcdfy79Hcv+jQb+XIrxx+JmINmlEl7jfNhYLjejM9mar+ZRe+FXqQTlq45g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-darwin-x64": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.41.tgz",
- "integrity": "sha512-n1/F47ymTtgEAMKYGKBquF4a2MKxOT7LRa3u5Beto2nxgB4OvTfp1wLo7QjihLBPUVEZSpnCy8JZhpKC2S9fUw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.41.tgz",
- "integrity": "sha512-XjhWsuCX/MMTuLLvXhKAaZzTRdgqaL4laaEw5NoCIihg4pLyFcok+bD2LQoMcOJC/ATbRfm8cprqgVzncfszLA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.41.tgz",
- "integrity": "sha512-kY5caBtSrUox8G5DKnNLfA3nLeZjaLMNV6WjVje57fz8QGOLCVF6dyRH15G8rfJ9W3Ka50XCUN4XmEHSPo7FBQ==",
- "cpu": [
- "arm64"
- ],
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm64-musl": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.41.tgz",
- "integrity": "sha512-DIfPcnHbSzuRl3CieMA1Bd5Wou3WDyFOdjS1kCM1x5B1RkirAZ+LfxcuWvGX2CEg4tL8Yd/vktKuFR/X9RFcSg==",
- "cpu": [
- "arm64"
- ],
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-linux-x64-gnu": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.41.tgz",
- "integrity": "sha512-tKyzC0ZgqwuB9k0GvnOTCh05x+CQQ1zBbvv9ISjCm4+Pr5m0o3wQwi2M3kNk3NmhaJyWFc5OUOEFp5Ux2Gdvyg==",
- "cpu": [
- "x64"
- ],
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-linux-x64-musl": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.41.tgz",
- "integrity": "sha512-MRnLn5ftkC3E4XK2lol+ya3SE9PpfTxMjDpgbF4/d2i+AkT5vNF7yJJGfblzBOtgwO4g7plmAHQJ2Dv18BXtgw==",
- "cpu": [
- "x64"
- ],
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@napi-rs/canvas-win32-x64-msvc": {
- "version": "0.1.41",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.41.tgz",
- "integrity": "sha512-e2L/VLJR/glc0vUACVBSL+VpbrfIRRuJU183t5jrOnaLFvVZHH/0iCF9ph9CUN/kKSg2cU84oGrnfJIsuPglSQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "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/@sapphire/async-queue": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz",
- "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==",
- "peer": true,
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@sapphire/shapeshift": {
- "version": "3.9.2",
- "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.2.tgz",
- "integrity": "sha512-YRbCXWy969oGIdqR/wha62eX8GNHsvyYi0Rfd4rNW6tSVVa8p0ELiMEuOH/k8rgtvRoM+EMV7Csqz77YdwiDpA==",
- "peer": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "lodash": "^4.17.21"
- },
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@sapphire/snowflake": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz",
- "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==",
- "peer": true,
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/@types/node": {
- "version": "20.4.8",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.8.tgz",
- "integrity": "sha512-0mHckf6D2DiIAzh8fM8f3HQCvMKDpK94YQ0DSVkfWTG9BZleYIWudw9cJxX8oCk9bM+vAkDyujDV6dmKHbvQpg=="
- },
- "node_modules/@types/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
- },
- "node_modules/@types/whatwg-url": {
- "version": "8.2.2",
- "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
- "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
- "dependencies": {
- "@types/node": "*",
- "@types/webidl-conversions": "*"
- }
- },
- "node_modules/@types/ws": {
- "version": "8.5.5",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz",
- "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==",
- "peer": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@vladfrangu/async_event_emitter": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz",
- "integrity": "sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ==",
- "peer": true,
- "engines": {
- "node": ">=v14.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
- "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/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/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/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/bson": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz",
- "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==",
- "engines": {
- "node": ">=14.20.1"
- }
- },
- "node_modules/busboy": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
- "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
- "peer": true,
- "dependencies": {
- "streamsearch": "^1.1.0"
- },
- "engines": {
- "node": ">=10.16.0"
- }
- },
- "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/chart.js": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz",
- "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w=="
- },
- "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/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/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "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/discord-api-types": {
- "version": "0.37.51",
- "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.51.tgz",
- "integrity": "sha512-tdmdH98t3zgjQF6zwOHl0OB/PCBiE4aVsNTuN7m0PfU2jOLx3lNoU6xTeFALntUtlIxN80GTr9RPQR4t7msjSg==",
- "peer": true
- },
- "node_modules/discord.js": {
- "version": "14.12.1",
- "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.12.1.tgz",
- "integrity": "sha512-gGjhTkauIPgFXxpBl0UZgyehrKhDe90cIS8Hn1xFBYQ63EuUAkKoUqRNmc/pcla6DD16s4cUz5tAbdSpXivnxw==",
- "peer": true,
- "dependencies": {
- "@discordjs/builders": "^1.6.4",
- "@discordjs/collection": "^1.5.2",
- "@discordjs/formatters": "^0.3.1",
- "@discordjs/rest": "^2.0.0",
- "@discordjs/util": "^1.0.0",
- "@discordjs/ws": "^1.0.0",
- "@sapphire/snowflake": "^3.5.1",
- "@types/ws": "^8.5.5",
- "discord-api-types": "^0.37.50",
- "fast-deep-equal": "^3.1.3",
- "lodash.snakecase": "^4.1.1",
- "tslib": "^2.6.1",
- "undici": "^5.22.1",
- "ws": "^8.13.0"
- },
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "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/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.46.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz",
- "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.2.0",
- "@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.1",
- "@eslint/js": "^8.46.0",
- "@humanwhocodes/config-array": "^0.11.10",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@nodelib/fs.walk": "^1.2.8",
- "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.2",
- "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-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-visitor-keys": {
- "version": "3.4.2",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz",
- "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "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/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/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/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/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=="
- },
- "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.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "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/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.0.4",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
- "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
- "dependencies": {
- "flatted": "^3.1.0",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
- }
- },
- "node_modules/flatted": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "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/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.20.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
- "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
- "dependencies": {
- "type-fest": "^0.20.2"
- },
- "engines": {
- "node": ">=8"
- },
- "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/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "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/ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "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==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.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/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-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/kareem": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
- "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "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==",
- "peer": true
- },
- "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/lodash.snakecase": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
- "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
- "peer": true
- },
- "node_modules/magic-bytes.js": {
- "version": "1.0.15",
- "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.0.15.tgz",
- "integrity": "sha512-bpRmwbRHqongRhA+mXzbLWjVy7ylqmfMBYaQkSs6pac0z6hBTvsgrH0r4FBYd/UYVJBmS6Rp/O+oCCQVLzKV1g==",
- "peer": true
- },
- "node_modules/memory-pager": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
- "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
- "optional": true
- },
- "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/mongodb": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.7.0.tgz",
- "integrity": "sha512-zm82Bq33QbqtxDf58fLWBwTjARK3NSvKYjyz997KSy6hpat0prjeX/kxjbPVyZY60XYPDNETaHkHJI2UCzSLuw==",
- "dependencies": {
- "bson": "^5.4.0",
- "mongodb-connection-string-url": "^2.6.0",
- "socks": "^2.7.1"
- },
- "engines": {
- "node": ">=14.20.1"
- },
- "optionalDependencies": {
- "saslprep": "^1.0.3"
- },
- "peerDependencies": {
- "@aws-sdk/credential-providers": "^3.201.0",
- "@mongodb-js/zstd": "^1.1.0",
- "kerberos": "^2.0.1",
- "mongodb-client-encryption": ">=2.3.0 <3",
- "snappy": "^7.2.2"
- },
- "peerDependenciesMeta": {
- "@aws-sdk/credential-providers": {
- "optional": true
- },
- "@mongodb-js/zstd": {
- "optional": true
- },
- "kerberos": {
- "optional": true
- },
- "mongodb-client-encryption": {
- "optional": true
- },
- "snappy": {
- "optional": true
- }
- }
- },
- "node_modules/mongodb-connection-string-url": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
- "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
- "dependencies": {
- "@types/whatwg-url": "^8.2.1",
- "whatwg-url": "^11.0.0"
- }
- },
- "node_modules/mongoose": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.4.2.tgz",
- "integrity": "sha512-sNolW2hyncwvWmZjIEIwAckjaSKtC1SE86zE1v2TKm3vPTRogZfBQf+3zLYYdrgrVTzoaoICieVpct9hjcn3EQ==",
- "dependencies": {
- "bson": "^5.4.0",
- "kareem": "2.5.1",
- "mongodb": "5.7.0",
- "mpath": "0.9.0",
- "mquery": "5.0.0",
- "ms": "2.1.3",
- "sift": "16.0.1"
- },
- "engines": {
- "node": ">=14.20.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mongoose"
- }
- },
- "node_modules/mongoose/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=="
- },
- "node_modules/mpath": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
- "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/mquery": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
- "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
- "dependencies": {
- "debug": "4.x"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "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=="
- },
- "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/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/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/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-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/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/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
- "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/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/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/saslprep": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
- "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
- "optional": true,
- "dependencies": {
- "sparse-bitfield": "^3.0.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "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/sift": {
- "version": "16.0.1",
- "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
- "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
- },
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
- "dependencies": {
- "ip": "^2.0.0",
- "smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.13.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/sparse-bitfield": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
- "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
- "optional": true,
- "dependencies": {
- "memory-pager": "^1.0.2"
- }
- },
- "node_modules/streamsearch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
- "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
- "peer": true,
- "engines": {
- "node": ">=10.0.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-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/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/tr46": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
- "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/ts-mixer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz",
- "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==",
- "peer": true
- },
- "node_modules/tslib": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
- "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
- "peer": 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/undici": {
- "version": "5.23.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.23.0.tgz",
- "integrity": "sha512-1D7w+fvRsqlQ9GscLBwcAJinqcZGHUKjbOmXdlE/v8BvEGXjeWAax+341q44EuTcHXXnfyKNbKRq4Lg7OzhMmg==",
- "peer": true,
- "dependencies": {
- "busboy": "^1.6.0"
- },
- "engines": {
- "node": ">=14.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
- "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/whatwg-url": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
- "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
- "dependencies": {
- "tr46": "^3.0.0",
- "webidl-conversions": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "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/ws": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
- "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "peer": true,
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": 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"
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 008b809..5383093 100644
--- a/package.json
+++ b/package.json
@@ -1,13 +1,13 @@
{
"name": "simply-xp",
- "version": "1.3.5",
+ "version": "1.3.7",
"description": "A Simple, Easy and Beginner Friendly XP System",
"main": "simplyxp.js",
"typings": "index.d.ts",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
- "beta": "eslint . --fix && npm update && npm publish --tag beta",
- "legacy": "eslint . --fix && npm update && npm publish --tag legacy"
+ "beta": "eslint . --fix && pnpm update && npm publish --tag beta",
+ "legacy": "eslint . --fix && pnpm update && npm publish --tag legacy"
},
"author": "Rahuletto",
"keywords": [
@@ -38,10 +38,11 @@
"license": "Apache-2.0",
"repository": {
"type": "git",
- "url": "https://github.com/Rahuletto/simply-xp"
+ "url": "git+https://github.com/Abadima/simply-xp.git"
},
+ "homepage": "https://simplyxp.js.org",
"dependencies": {
- "@napi-rs/canvas": "^0.1.41",
+ "@napi-rs/canvas": "^0.1.43",
"chart.js": "^3.9.1",
"mongoose": "^7.4.2"
},
@@ -49,6 +50,6 @@
"discord.js": ">=13.12.0"
},
"devDependencies": {
- "eslint": "^8.46.0"
+ "eslint": "^8.47.0"
}
}
diff --git a/simplyxp.js b/simplyxp.js
index ebab2f4..7c9abe2 100644
--- a/simplyxp.js
+++ b/simplyxp.js
@@ -4,6 +4,8 @@ try {
console.warn("[XP] Discord.js is recommended for this package.");
}
+module.exports.options = {auto_purge: false};
+
module.exports.roleSetup = require("./src/roleSetup");
module.exports.addLevel = require("./src/addLevel");
@@ -28,6 +30,4 @@ module.exports.setLevel = require("./src/setLevel");
module.exports.setXP = require("./src/setXP");
-module.exports.reset = require("./src/reset");
-
-module.exports.options = {auto_purge: false};
\ No newline at end of file
+module.exports.reset = require("./src/reset");
\ No newline at end of file
diff --git a/src/leaderboard.js b/src/leaderboard.js
index 3bc29c3..18801ad 100644
--- a/src/leaderboard.js
+++ b/src/leaderboard.js
@@ -15,7 +15,7 @@ async function leaderboard(client, guildID, limit) {
let leaderboard = await levels.find({guild: guildID}).sort([["xp", "descending"]]);
- let led = [];
+ let led = [], subtractPos = 0;
function shortener(count) {
const COUNT_ABBRS = ["", "k", "M", "T"];
@@ -28,10 +28,10 @@ async function leaderboard(client, guildID, limit) {
const led2 = leaderboard.map(async (key) => {
const user = await g.members.fetch(key.user).catch(() => null);
- if (!user && options.auto_purge) return levels.deleteOne({user: key.user, guild: guildID});
- if (key.xp === 0) return;
+ if (!user && options?.auto_purge) return levels.deleteOne({user: key.user, guild: guildID});
+ if (key.xp === 0 || !user) return subtractPos++;
- let pos = leaderboard.indexOf(key) + 1;
+ let pos = leaderboard.indexOf(key) + 1 - subtractPos;
if (limit && pos > Number(limit)) return;
led.push({
From b52848a7dee22428aab7fdfc56cd9a0a063f82d4 Mon Sep 17 00:00:00 2001
From: Solstice
Date: Sun, 25 Jan 2026 22:28:17 -0500
Subject: [PATCH 04/33] v1.3.8
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
⭐ Improvements
- Refactor leaderboard and rank position calculation into a new utility for efficiency and code reuse.
- Add a compound index to the level model for improved leaderboard query performance.
- Improve leaderboard auto-purge logic and cleaned up code style.
- Refactor `rank()` image to scale background images properly, fixing stretching issues.
💎 Design Changes
- Replace `Baloo-Regular.ttf` to `Baloo2-Regular.woff2` for better performance and smaller size.
⬆️ Dependencies
- Bump `@napi-rs/canvas` from `v0.1.43` to `v0.1.88`.
---
.eslintrc.json | 29 -------------
.gitignore | 10 ++++-
.npmignore | 21 ++++++---
README.md | 34 +++++++--------
eslint.config.cjs | 51 ++++++++++++++++++++++
package.json | 75 ++++++++++++++++++++++-----------
simplyxp.js | 2 +-
src/Fonts/Baloo-Regular.ttf | Bin 680508 -> 0 bytes
src/Fonts/Baloo2-Regular.woff2 | Bin 0 -> 97780 bytes
src/addLevel.js | 6 +--
src/addXP.js | 6 +--
src/charts.js | 9 +---
src/create.js | 2 +-
src/fetch.js | 20 +--------
src/leaderboard.js | 35 ++++++++++-----
src/models/level.js | 10 +++--
src/models/lvlrole.js | 4 +-
src/rank.js | 21 +++++----
src/reset.js | 4 +-
src/roleSetup.js | 4 +-
src/setLevel.js | 10 ++---
src/setXP.js | 8 ++--
src/utils/getUserPosition.js | 22 ++++++++++
23 files changed, 232 insertions(+), 151 deletions(-)
delete mode 100644 .eslintrc.json
create mode 100644 eslint.config.cjs
delete mode 100644 src/Fonts/Baloo-Regular.ttf
create mode 100644 src/Fonts/Baloo2-Regular.woff2
create mode 100644 src/utils/getUserPosition.js
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index d48293c..0000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "env": {
- "commonjs": true,
- "es2021": true,
- "node": true
- },
- "extends": "eslint:recommended",
- "parserOptions": {
- "ecmaVersion": "latest"
- },
- "rules": {
- "indent": [
- "error",
- "tab"
- ],
- "linebreak-style": [
- "error",
- "unix"
- ],
- "quotes": [
- "error",
- "double"
- ],
- "semi": [
- "error",
- "always"
- ]
- }
-}
diff --git a/.gitignore b/.gitignore
index 4d27fff..c9f06bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,9 @@
-pnpm-lock.yaml
+# IDE/Editor files
+.idea
+
+# Dependencies
node_modules
-.idea
\ No newline at end of file
+
+# Lock files
+pnpm-lock.yaml
+pnpm-workspace.yaml
\ No newline at end of file
diff --git a/.npmignore b/.npmignore
index ebaf393..8bdcfb2 100644
--- a/.npmignore
+++ b/.npmignore
@@ -1,9 +1,20 @@
+# Configurations
+eslint.config.cjs
.eslintrc.json
-.gitignore
+tsconfig.json
+pnpm-lock.yaml
+pnpm-workspace.yaml
+
+# Version control / CI
.github
-.idea
-.tgz
+.gitignore
+
+# IDE / editor settings
.vscode
-Examples
+.idea
+
+# Dependencies
node_modules
-pnpm-lock.yaml
\ No newline at end of file
+
+# Documentation
+Examples
\ No newline at end of file
diff --git a/README.md b/README.md
index f10b276..b471f6c 100644
--- a/README.md
+++ b/README.md
@@ -2,19 +2,21 @@
Simply-XP
-A Simple, Easy and Beginner friendly XP System.
Supports Discord.JS
Developed by Rahuletto#0243 & Maintained by Abadima#6356
+
+ A simple, beginner-friendly XP system for Discord.js.
+ Developed by Rahuletto & Maintained by Abadima
+
-
- 
- 
-
+
+ 
+
-## 🖥️ How to install ?
+## 🖥️ How to install?
```
npm install simply-xp
@@ -28,23 +30,21 @@ yarn add simply-xp
-# 🎉 Recent Updates 🎉
+# 🎉 Recent Updates
- Fixed Various Bugs
- Updated `Chart.js`
- D.JS v14 Support
- Patched v1.3.5 Bugs
+# ⭐ Features
-# But Why ?
-
-- Easiest XP System in Discord.js
-- Fastest Support ever
-- Rank Card Maker
+- Easy XP System
+- Automatic Role Assignment
+- Beautiful Rank Cards
+- Optimized for Performance
+- Lightweight & Flexible
- Beginner Friendly
-- Easier than other XP Systems
-- Inbuilt Auto Roles system
-- Flexible and simple at the same time
@@ -52,7 +52,7 @@ yarn add simply-xp
- 👥 Contact us | Support
+ 👥 Contact & Support
-
\ No newline at end of file
+
diff --git a/eslint.config.cjs b/eslint.config.cjs
new file mode 100644
index 0000000..0339167
--- /dev/null
+++ b/eslint.config.cjs
@@ -0,0 +1,51 @@
+module.exports = [
+ {
+ files: ["src/**/*.js"],
+ languageOptions: {
+ globals: {
+ require: "readonly",
+ module: "readonly",
+ __dirname: "readonly",
+ __filename: "readonly",
+ process: "readonly",
+ console: "readonly"
+ },
+ parserOptions: {
+ ecmaVersion: "latest",
+ sourceType: "module"
+ }
+ },
+ rules: {
+ indent: ["error", "tab"],
+ "linebreak-style": ["error", "unix"],
+ quotes: ["error", "double"],
+ semi: ["error", "always"]
+ }
+ },
+ {
+ files: ["*.js"],
+ languageOptions: {
+ globals: {
+ require: "readonly",
+ module: "readonly",
+ __dirname: "readonly",
+ __filename: "readonly",
+ process: "readonly",
+ console: "readonly"
+ },
+ parserOptions: {
+ ecmaVersion: "latest",
+ sourceType: "module"
+ }
+ },
+ rules: {
+ indent: ["error", "tab"],
+ "linebreak-style": ["error", "unix"],
+ quotes: ["error", "double"],
+ semi: ["error", "always"]
+ }
+ },
+ {
+ ignores: ["node_modules/**"]
+ }
+];
\ No newline at end of file
diff --git a/package.json b/package.json
index 5383093..8732a15 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "simply-xp",
- "version": "1.3.7",
+ "version": "1.3.8",
"description": "A Simple, Easy and Beginner Friendly XP System",
"main": "simplyxp.js",
"typings": "index.d.ts",
@@ -9,47 +9,72 @@
"beta": "eslint . --fix && pnpm update && npm publish --tag beta",
"legacy": "eslint . --fix && pnpm update && npm publish --tag legacy"
},
- "author": "Rahuletto",
+ "author": {
+ "name": "Abadima",
+ "url": "https://abadima.dev"
+ },
+ "maintainers": [
+ {
+ "name": "Abadima",
+ "url": "https://abadima.dev"
+ }
+ ],
+ "contributors": [
+ {
+ "name": "Rahuletto",
+ "role": "Original Author",
+ "url": "https://marban.is-a.dev/"
+ }
+ ],
+ "license": "Apache-2.0",
"keywords": [
"xp",
- "simply",
- "easy",
- "xp-system",
- "system",
- "mongoose",
+ "experience",
+ "level",
+ "leveling",
+ "leveling system",
"discord",
- "discord xp",
- "discord-xp",
- "simply-djs",
+ "discord bot",
"discord.js",
- "simplydjs",
- "weky",
- "nuggies",
- "experience",
- "level role",
- "amari",
- "package",
+ "discord-xp",
"leaderboard",
- "mee6",
+ "rank",
+ "rank card",
+ "leaderboard card",
+ "gamification",
+ "xp system",
+ "simply",
+ "simplydjs",
"charts",
- "ChartJS",
- "level up"
+ "@napi-rs/canvas",
+ "chart.js",
+ "mongoose",
+ "mongodb",
+ "sqlite",
+ "nodejs",
+ "bot",
+ "mee6",
+ "amari",
+ "weky"
],
- "license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git+https://github.com/Abadima/simply-xp.git"
},
"homepage": "https://simplyxp.js.org",
+ "bugs": {
+ "url": "https://github.com/Abadima/simply-xp/issues"
+ },
+ "readme": "README.md",
"dependencies": {
- "@napi-rs/canvas": "^0.1.43",
+ "@napi-rs/canvas": "0.1.88",
"chart.js": "^3.9.1",
- "mongoose": "^7.4.2"
+ "mongoose": "^7.8.8"
},
"peerDependencies": {
"discord.js": ">=13.12.0"
},
"devDependencies": {
- "eslint": "^8.47.0"
+ "eslint": "^9.39.2"
}
-}
+}
\ No newline at end of file
diff --git a/simplyxp.js b/simplyxp.js
index 7c9abe2..7f48dc5 100644
--- a/simplyxp.js
+++ b/simplyxp.js
@@ -4,7 +4,7 @@ try {
console.warn("[XP] Discord.js is recommended for this package.");
}
-module.exports.options = {auto_purge: false};
+module.exports.options = { auto_purge: false };
module.exports.roleSetup = require("./src/roleSetup");
diff --git a/src/Fonts/Baloo-Regular.ttf b/src/Fonts/Baloo-Regular.ttf
deleted file mode 100644
index a3ab1c55802f01e2e2537830a5afacb534752336..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 680508
zcmeF44}8wm{=m=o&oldH&&*^0%*@Qp%*@xYG0UGdOK2fUa^*^{B)M|C>L*E3x4Nz?
zSCS;DB*~SuBuSFABx(6KJy}mJIi~)6DaGpYuHPr=$_;-urB?_c`bL?|jeqob&md
z^EuyhzK_s^5Or`&5#BBD^8DfNj_N3c7RTP=ZiQF%*<9#6$aa~~J|EVt&oy0!@9b10
zv>kng=$v#_pO#jg$FBXe(Btmp{K3Dy^~TYTD--TvyF>_E|KE-qn_yd-{g4Rmvxegf
zhmF4Z*84wcwp0Z79WF%ehBx2%`_b$V=lDwez?(<@aoC@NJ6S?c%n-HK^&NiGjYC8B
z_014L`zCX|?QnL4#2X*7y^8Im;kS;x^OnLp64~A(M5Gvb+i!1-DEL>n2s$RW&0BB0
zb9Aksuw)S&v6u4`M%{SpO;7Y}_O=MFYx2N<7=7FC$IfncN2Lgkx?6~xoY7-$8r|ja
zLr;j{8>e#qav}336ognNbWvXz`f#D?ztcwuQ@=&Oo$wfaEPLiM5r!?o7D+hD7Du>&tu^6H+jzov+3q5}Iw>1Vn!I<_%yP3_oiRi`
zi+rA7u~?56W?p`ez9M$$P2(()ihH9NH1fu=qr`OT0e>EkFz^B?n{c5QT+u5*#P#gl
zJ3*xQj%gxD)bWLN;*9Wx4G|*h{>U{ZdFk+-XA`wWJzqFLgi&}W?^{dQMU;rXamct^
z#dPJ)R_=V|E>i9?#TMo6QSJfd9+R#XtlVhjCM!4dmYc?m(z+#v>V^{c$cwFI9(dX?I*J(I#Q0u1+)P`uowNdA+16?uA6!=|KWP19;YYjDSEn|skhfV>G^sOy|-4O
z_tyvML-i5*XnmZ1w?0Xqsz0jF;JVrRJay$l^wBb{SYOE*tMzqyZ~iyxoAqt_PTi@0
zr616b=-=s+3}FNqp+s{JcexQlYrl)F>8jg;F$xmPN;v2w4Gt~O7Fix~txt4ToQ>1I$r}hLXcZPDuNmqYZh5w-3#nLs#s&JNa)!ogyDy&jys@TjZ
zwMV7LlhvYD%TqxulB2)H&q^*$!bqi
z<$7aKIces}JvLd|nnBx$J3^h4pxjMr&oSlxS-I~kce`}W80qT6RQOfpPFL@{4*LBnkvGj#|w!@$9RtO|#*onR)LY2G8ovFd;J$bA<7
z$?|-zO$LV<=8K7tnV@2Hn1Lsb$a5t!-Y^;RogJv|s^iL7R4TrAC%IqU!FPqcGSJL2
zbIm+Oce7A!<(l2ie^-7MerYQ+==D>W;a}tq$j@tytxHQ#HgKWsWt+n-g(|YOW6lt&6=Ds*BPZ%*O7@d_E+6kj-&JkH{r
z@#?JM_<0=lK9Nj$KjQMdr&hKVGFLi!vJS
zOOK3O#-0cAXdZW!d*rrEX?M=k&4J|V6t-mQyA$e89?N6$Xmv>5O`eep4qW*!k9+e+
zKDqptXL*n590?@8K;qYl(;KrqV<7uv+%li0`0gunWeW5oC9&-9$GlZ-{Cc#2AsOk=Lvr;|f6cKOT_?-|{>N~TYig)Ci}
zMsFTehvj}*@8o^QbH+e*@8K#ys47c
zRNv2=(gY=g$+!u=C-gq4w@hUTR;N^k=rJSlQiJSPu0y)IYA4K(WZ0(k9X;qm&UsI{
zwWO>6S%teQ_er(qB^ACyg-ey&NV>KMrE99ArrK}brS`w8_FKyBCf$G#wZFa!UoYKS
z2h^Tx)tdi$3Y^bKssbXdmnOJ(h2gR2lO`kSJ!2|gRHsQ8daCQeW5LC&u7a0
zRP7(;*+?z%_F>+`D$=x#YLDtUAOQ}J4)f6C)jsmPLHPeX^mFwB&t&T0BF}4t@Aj;~
zecE#!dv5obuT7=gmLc~Te^f_tIQocklccNPufngY7@m<~<9D9DxXaYD+~)ZQ=gjbY
z&7Kd``AcQkRL^LrUI%yI%sJ(rXE|q^ieasCRZqZJt-^8~Kr@CbSM`yMt5jH8g_`VO
z;{HwE(HJDd`e7CBBg2eM$fMqLww7V@6}2Z@xhqsUZ&oQ(PoYmz;ic+mygX`lR$LX
zu+DLR&pDPV3vVu|^Ue9{{5PcwxPhGlyQ`j3tg^^c*yklwB#2~@#=j-9u-NiMcl1_2
zEH&Si`X7!T=T46ucagFvPXoepkN;b_2iQ|zg`Yf5So`a7N>ux+N5g$mx@OGrW9UX#
zt%K^`JUK~mh$)%_OQqT-O7mGo(k^mfBc);GNbAUfeI)H3hq8LSHqv-yA&ply(n%|6
z5th*kpDk3Z?4Uj0vw(iY{!!LX@9)_^lcWX25orM_>j&FMT0TFpdb~D|K2BOaxba5P
z32Vn|=XBA-jlRYJW3V1+3^PU=V~jibpTNKLCmRnL(~OxX^0_9upo0gC_cUE_#Dndt
zpQ;OV&lBYT9?ul^k5y$cUzU*`?g?T4Ruzs_rM6MIhm`v-4`WH%dJndlQD27jEYJP8
zEj?%}{ohK1wDkP3hFYV&XAbcU@Z3WkXy^G0?mSrweOe>hv+$g>#^o|S=BZlaIvImr
z1Fd0vtDfcOYmLi1OL!u$)~N72Mz|(gqoZd7>GW!i%T*qpsx=Zkl>QmCMufbV*;u3V+h_19GRB~^2mcVU5wNGpFTmqSARhNlm3YQ7k#?^S2Wfv{Yibk{*3-CTI)r$Rk8jN<1}0JPxNmY
zqp8r3>Q(x2be3U+p|RqO21X+z(`du!OgkgnXwL{uN8>W1lhMV7=JfjHC{7{j7`RN?CviNC${%D#6J0@nsIPgQIl#OgOW`->jphjR
zR_wnq=I_lr%yH%f^B%0jd(Fw_gXY8LpUvs!l0K(!N3n#?M`hL~7!$GvxXA^ZUqYIsE;+yhi2bsd@Qlm7DXvm!I#D
zqs7KHa&^aveEsr!Icqy>-e!}#-Oe+ApD^c~mdA`(t2~f3HuOho&CML+Z3OO=bIzrj
z)x-bXyel&gC}~eSO=6!_a#t;N-luy6$@)8`E+y%N9QhC7uG4Pci8Z-NnxwPwuhD31MEHQBkYsyv+c|6>+L1>L*b#}`Qa18=Z9|y
zchw246IrLA&bT_0>#V4=CL$mrDWXe6VMM=(u@U1VrbbMUSRAoBq9kH>-A;AqGxRph
zv7ugSy@B#U#Vm?h7qdO)U~E`yT5Nvo#Mq+PBlXkk53j$l{+{}-`bX*?j|+@z
zA2%|tIPR+k-5U&Tu)e{b_~7`I_}=lO<7daOjCVE^4cj)nv*D74dm4V1kd~02aA(5w
zgmnqK8-+JYZB*E3RHGSptsiH|llY%CbnyhScC^;!PH~G%wxydET$D3v~9n|#hrgNLFYP!4Wv6T3foRmQ+
z8&X`&`Zk-{Y)-TJ%@#LX)@)_7waqp(+tRG0nKLyZwO8uOR9Ex9%_lUU+I(5_Rn7M`
zKbV%7mX+2etw-9Dv<+#;TV%D!ZBfvoSBw5F2DKR8VpNMeTTEy%wZ)Pan_9TiL(|8l
zFHJ8_-`X;`Wn9bNEr+&zsO9r5*S6f5k()8EmEJ0|Rj*dVTTN;;r`5Jr$E>#2Kx?M8
z%G%vpv>ws=;nwcV=*)hZlQY+59&D4|W?-B3Z7SL(woPl>tL@UZ8{4I|%WwC5yR}(K
zS-DyBvWl|fvfF0Q%3jvq(LTNXwDyZSgmy^oFtx+{95W|Ar!Z$k&YYYTIbU_uJ7#w5
z)p26S*&R1^+?N}jYvm5joshdc_rPUImkqjX#%0Bw%uczT#&%lLX>aHF&V4&S+Id#z
z`JEScUeS3?=k=X8ciz@{PiI%>Bb|?T3G5Qllk(Q&9lt#1
z^6{6i%#Y0PpT8o%qFdW;cXyl8ZCf&70FlJdBw&nj&u*}?&vt
zmBm+nb>)E`p*@m&4DRtzj|Dxp^f=bj>Y3AXe9wtJr}Ql8xw}_JuVKAb_BwD?r>mx4
zwV^P!u&{7`;St_i8lGZo_fQe#DWR`r7xg_yMI3MQvI$T1ETtdi5KFPrUcoZ^MmY4l
zL}&eOmM3Qu#gO7yo;aIScMyR*pPhe)r;PiQ@k|b$
zsZ2djHqY6?Q%P<(^w06Pn&R
zjC*v!58x^e5iWyHZ1?5ZbHo+K-I-rNEHaICA=3AZG2FdA;W&=TXU*oW-n%$ej)b4M%E7(s
zaaJU%0N0X#(z)aFSe@ar;mLyaaK
zHga@7Pj0Y<=HP5uwuxwq#$4Tju*!c%0*A`jx#}*MN)64GPf0mnPU-cg7WY9DTRe4%2)2E)U)`=Psi=@c1^45k*b=0IL*hrDg6}OU^AMW{i
z(qZ^=RHn==>j60vOO9oe?hfQefYe>S+ImdYR#`qBI5(QJWr-G1qA^}QqI5_(F*!NY
zDH7SPmi3{O$IURBvKh<%JIKwuV4`Qgo`T+O54ms|`O*pP(Uo+A1k+S<}m8KFX3K
zO%C!k5w|g^$R-ssow8)6bJiB9O{yv>V|0hAF;e2Z&zHziZ~7~c*>Y;MP1az_vK$Q>
zz*#c>x?EY$bDX@WL}y9uDr;vY_YCHqm8u-B=f32Qyn>Y0P}
zo@LZSw1~Q2wbX>F`*l+HbaOA6>LQ*^O5c7}vnz?sPHZye!K!9Qafg#J*-7~^pPn#<
zH>OHrDPgvmH!X7Rl7o6;Dj80s{#5JJp(>{;8|+CEQJ@F6oo9S&zJtEuicV1t__aG9}MTBwg8PNm<9jRI4uaL|t-G
z>I!eWN9x&@y)ju!vpt_85#?OrRB4>bm9@O>8h4CFCRJaBy_a#;_1w>-hiIpV7%#r2
zgudY{nFd+^rGDH+Y-J~6tD{;?Z|{fFZq_1G42iLTZCaZDUd!<4dibJrQWv?;jyG
z#NgGD`_(g?=~?A-s($^6yLt2b$J25CC2{^&2Kw^M+e?!<6HiHzGc|A4Hs}F)W;=Q7rE2snN3U5!?TQ`wE
zu9(U_45f|b8B(vF``vVPy?m-4O0ksS!KCqAY$WtNan<8FmF(f819f_USU573XFEy{
zlRL^Bm*t@;S6<<539ur*XM6JYS@o;vaq;Z3hZV~m^b=ds!Yo%BH42HX57{2s>ek{+
zxkp}+E$_yjA3s;)oDy~J#qGac{2rqJ4mIgVU;JD;_r7z@d-LZW_pkGc^Rr6)SDk93
z{XARu{PNPH4kJy^aV%
zf7s`gM;mk0I^)smlK5c{_Wb*Q|0`GiJgGkaTsqmOJ$vZf`=IB3#l>%6C0kd~46eOwHBQ;we;QDZYF-^Jzl-o>TxhAM@3K^AYN
zEG)%KGk*KyEzP<2Apf`Hs@Yif*~ftXo8kzdzB|s?PdIbWI`?@oaa@G8;z?sIw
zzCS{C@!uR={5$+`l<(r-^XF^2i=W2oR{w|n((^fTewz9GduW&Xeiu^jpZ}YsnvLrI
zr^kQx_h&ynX8oUj{iS)eX-DZl^p-tWau|4;XyfBK9|r}KVIJ=C90%cbl!{tDdv!uWSCgCfAZ(xOE`EP8qw9W5xcs&a}Qp
zmiw9K2>mbQ*ZEo4=RbPjzhCtlp;KoZ`t$S0R+wDs`f_qCwWgt;8h5N|JSWflHCrwI
zw8@og=Wgx&n)B`F&5ZnCy;`nix1X|7O|Es3t9D|1D+Ysov(QplJtn^hQ9TQ-`a200
zt8!vk$In+C)E6P-N}qVv@jKM)w4eV5^VgofpI2`#%r_r&*4kF+ay46kT6LSimlYbZ
z@|Bf+dJ^len#lE3Y<5cJ|h)14X$=9n=i8q54
z<`yeF1K4uwEjS|`KLc73x259Fka7FY{ug^wIjcF>wjj<7!mU)C#6--Q)HnI{0Eb$u
zFV~~XHCu8ey`6cF-gTSu`wDU`nD+}B^0<6sD8FAO*Lr<_rI@_N`~4Alo?5HQxdCb=
zxSUrhztOF}S|H<8_1!z}etzHS@Wv(MIsJP8GF380@7GMuJWI_%I^%h-WN~#4Yt!tc
zEuJ*7_8M}LoN25B{hTk5Y)7hgD9N&X-%YXeg^b4XOCd&g&rvhj<2L1bxeFg-@M&pG
zWUaV2UG~$`^9AXaYh&Zplbk$D%D*fpu3=4~Tm|5L+QPFwt@jHtC!dr!_$Hdo454=Y
z_r+5ClzhoQr3O^zbl`~^u#=kLEp@qa^g`DijoKEEY#5$(`Zm^%dqbZQ3Lpi+)WKkV
z2hzVAUw*CT3+lEezgL6y7=u)oz~``&F)xmu0#>U!MxpsXF
zah?3qj-|e|WjR)Tq|l*>G!6KFU$}}2sW})t$3ARIv7KHRYDvxp6zI}9b6^P{(^P=ZjQ@4R;Sf_
zS8tx!I5YUfGt1{azw*>o%H{R;Q|g1%3VcV2()MZvZ=Lv@?-89@Bg7+XcD_#JbuUgG
zVNLY~uY2d0XaBwF`0stPUrR|}_#D3QG3sIn`hf5C^DT=I`WLlTE1SSK{G<6@qYPS8
zi?2o`^Chb;B9kv>|39)#4WZd-JPCqeUO|>ll9VXsozHTtm<9E^)1xARZC@
z`E9J}oI682C4R^Ea$n*2-^E+ve(^S6%AGE@iZ8_i)|h-FR)}x;e@&G0zfv3){}!){
zqoPWz<_o&Ict@bhv;grgU(`(y>$OBJNtE(SL)pTqb9_AF2I`|0wMd?NKdSo5p`Ezd|54gu?cdsM+EM<;YL)!o
zp;hrePV?~p2a+GC-6?;SNSmlf=ykOR^e8=Adr)tvH`e~7H_@AD)AVL~Gwm;W3q3=d
zu3LI*Z6?23)LxsV=jvUw$N3GSYqYugwfeQ%eEkOf2JIPrxc)nBf&4nIwveymPSRfB
z%eaqdFY{&GziLbQ3hox|75SS*+A@8&{)P5BU&KA4y{Wr(x3*e8t{>OlGBiWi*6;<~
z%e1w81GkIz4qv_fjkb<2-`=df%U3y{($@1`&h6TJe3{d!ZQ%R1<=XpvnKM+|$k%P{
z+6R2wHeTDr_c_~WAM!QZ>$PIOV>?RwNNCrrMRN;nq0!Hn%C~aMIJ3~4WG*-N*`jUT
zZFk$2*!BcO1mp#b3wS#nYQ
z(2?lq>zLwL>2TGHtJkaE#Cpr>?Tw6#EQlN*xj1rnRCrXEsIgHCqe`NKqjRE1MbC@g
z5@W`+jTs&@J7!bN@z{*mA+a-J*T+`WPpv<&{-gER)ISuL6xT0qYFtrVS%dfng$*V(
zSl(b?d~|&G_`Bnm#P4Ys(J-&!xQ5R++@27ckee_%VSd8aMgfho8jWZ)r%`dDNVF1%
zCeBRUkoaBWw8n!PPiwrk@sXtDr2a_{C9O(2&?KQr?q9Uohe}{ol?f6EJ)ebEU;PoW+R);ZMHd8Pt8mnmO3kSW9qTy>CFc>pWb|3
zb9Y)w+JLl&(^jV)Y?0WaZ;L4{R`TV{xb$A>6VsQa?`;{`vY_SomWx~N&Ir%wk})=8
zVMa--;8r=UMzxyPY70Lb)Yckq&9*jK$6IH#9@2V7>-DWGGE*}LW@v5@=B|3z%&x<_
z&g#0c>#@A_yuo?X^Va3LFHgCAz~v8LzWVZm`HA^`^QYvm%y)H*>(;B=#BR&F?JbBb
zDB$auiwk!1Rm?6|jJ;yv6(!w+yXSNt#aA)6Txnj}_R8T`&c1TfmB)Kz^cd1(MvwJ9
zDte~&9N6>Go@;s@>Xp>1U$3dXih7k@6@OLXRguz%}(!$
zSNGRiV8zM)n(TebFJGRpnEY3quz3A><*y}v`S5E7%dZptI`PCvhhHc9b)sJ<`gP*T
zHzWRjqF*Qab)sJ<`gNjTC!TyG=GTdSo#@wzex2yoiGH0J%UHXAyxsq%!8c3JKc46x
zPxOx``gNlJ?W_O2Gn&xgfyg1^jZrbNV6?t1s1;^1bwB`ZCc_e?wm_67;wAw?&fvf&QUr
zqJOM^%$F+n>feZF`a!<6-dcW(R_#2Y)u?OK7x_lKksz)z5{=fPw~=LJ
ziJ?XZql37~$Tf1sFr%~4S=?-NHM)x7Mt9>%@jIiZah15mxZ3C|M)B?08^jo6urW-G
zH-;M{#l6NT<4!Tf7;j7xe=+Vi{v>7_j~a8t)5ct5u2^c!Gv=OSlN{u~YpYadlAL1+H
zOQTHu(>P!p5aq^U!z~UO6~-~)HjbNtqS6dDL$m<1wpm*XG{en0T98@Stfz&TQD&SL
zW+s@4n!`*oQ?)2F%}m$g%?vYBYh<=H+iJ;XmU+3>)a+&!Xl=~y=G9s|vya(FyUe`C
z?5}k)Z!iaGdFEhqu$FHQF@L9ZGjB0RYFC-JnYU|Kn`6zfT3_=I=KpEe@Fm{+w1MXR
z=2UHv`H=Z1ZHW1Z`KUJ3oM!$-8)p91oTUvnpD^cWqs*twr?k=L)8>5bcJo>DW$pLo
zanqwsuo<>cZK5s07O6dCYhY`w{aI-3Q{^{*_1dJ~GCP^Q%vt6_zWBS=+-!@rrP$iq
z@@(U5lWo&&^Z5F2ML=%Aw1Bw*ivx;k#nno!l~pUhR^M84Yb~x-RBJ=6ZGmxtLjp$!
zt_VC96dV*ClpK^9G$H8WpxHss2dxNN7qlg4PjG5*R&aiB-{6J82ZN7?B!r}g%hZ8#)eD^nHDlPWN}DQ$cB(@A$vmuLJLC&g^uKF!Rtb|gzgDF5PGb3aP8>Y$+a_U
zcd5Og_OjY*Y8Qt^hb4z)hII)m3>y?SGHiU<)UcUhd%_Nc9kU19qwUG|OnVo5p?#2j
zq+W>qI(j$;I953}I!YY->Sff+t=FU8fO^CE((syk#r1a9bJeSe42X0@CPt3r
ztHVQq${!_Dj>=cH7IIi)cB~WQ8S|!L@kS26IC3wGs+cJ5#1%a
zFnUn*$msFWQ=?}_FNj_iy(T6xW^&B*n0YZvVphd$j46rP$5)DTV|&C7h#ej~E_QP4
z^w@c^OJY~WZj3F7-4}bLzFvQ5{W0|?*56par2fA8N8)nhdc+Ng8y+_?4le1oYCwlvri-zB~tPA*ISu4!P?-c1KL9o6*irt6z-ZR%`#u<7xX(3IGe6uzE3G3C*eIVt;6
zj__&j@MiJN()g0{oMwxft!%cw+16&xW(S)cPYq3tO-)H{o0^x}J9TjC+SJXdyPKyp
zZ`(Ytd2hb3JgWKK%^zw$tGToJ!L;^i1!?`#hNg{4Th&76OUpxAjBc@|#h&!k^sMy!
z^uFms(nqIHNPjqecKY7*LoG$i{FZ%N4rw{MWl@Hi5s@)4V?@TC8B;Q5WX#W4nz6c7
zV5{D(=CpFQI@s#CRbchAhFW8+iPlD|#M;M~m~&hAXuYKMs@5Ab9hr%l8JW46Ju(Mm
z4$oYcd8|!vo9H$}+AMBUgi48Mo6vRyUu9m~c5~a^ZOhtz*DkPKWV@txR=ZB^dbOL?
z?z^nOtjMgSEGw&1Rf9QFV;BtWeoXSP$z%Kh1mJE8t*UFob4`WJ64kv1o={Mrr*qor(Ls|@^^sF
zc9+wS$Ax-XgP3@hQ1we6r3LuCt(uh5g|36Ar|#5WL8>m@#{4RT{GFJb6ZtYt$lnh7@!yKM
zFtPkFWk0{(U6|T?ddh0PRg?0)xLWSQru9PCMfpo77gj6OB*)L^DFS`JN+o~&>C|6p
z^8Kn5TCwIi{p&sRr=Rj-&Y5%YGr+?Yi&iyXuqYeJs%fBY2Q?q=#Fe4=w{*A@y^`z!oHOZOt
zX$NYag456ZwWa6u)LodZU*Z{Sa?hGcz}fQP*Q7^k^2C?2W}lvKHA&siFOPG-=P#Ed
z=bqO8t^D~l$=2y*^=sPtWpk+}QvGX@u+vMeCMiFk5u2LCdvSB5CMl?yCize7`(0{z
zs7Y>L-10uXUe|o9CMiE32{=6k7p4xK9_QJ%F5FYqB&PEz*_y;#GxGXW~HEmtEXZ&S#$*(C-{b{Mm%Bzc?OS(w)
ztu4Nr)ieexj2{*ztBR+yo_L1-qNuA@4>wnJWQ<~{+-c=6~lM2VmMFSZ{!<;#Di*O
z@O)MVKP+Bg9q?RH%nIPoMJX$KztCb>%Uh-;u!{GfmTDYg&29_U?1r(XHk@_3SC|c1
zmD`V1xdXJ3=0NjS?Jumd9jiTKjx(2PFPMAGJ=$KiQua%=Qg**uDO;{q%DRP?xQ{uL
zLfBdB)m~ewr|VhzL$<}X6+xYX*My>8<5z8b8Mbs5$q|}?GQou24VL&MIA_D
zUD+hK4<^I?Fa;ifwXhD>3!ByvUWQlT@9-+T2Cu^#@Fu(kZ^JwAE~^)!Jx={G(U_Ip
zjrAwt1=uVa8zE2!A|MtTK`XFe8axg2;Tc!}-@-vCheL1}j=;abEgGAwtTG!y0uYy(
z2#p~Lnm{r%g%oH8sn8tKparBuOUMAyVUiB>9+(LC!X&s4Cd2(O1s;H@@DeP6mtiTq
z4sXF4_yD%RcG$)GlZGOR9B<*-B|5UMY!c!7U^3hfQ{Vwu3+rG#9P;eaT6x@BYiI)<
zJx;9;`(7mcGT~R?@9-+T2Cu^#@Fu(kZ^JwAE^+D9^B8J&3~R2gW4+w~){_myzkw2d
z3;%6TnbyKnskOwnD8Wo<3k%q{5T1uc99vAu>Yg&)ga8QS+6_Eekw_-SRA@mB%kY#7
zi*P2i<`d5|umGNgh436a4=(^uBVL5X@DeP8+s*jUyuJD{s!*(KK@4h5AZkPe~4d<{}KMj@CkehpTXy_19rh~&MC#;gZ~A-
z6aOFhd-1=-KjbOabWgcvLIBi)KuRNs(qL7f7J_eQUmd6mal)a+Lz)QI(xD}#n1P?o
zx$QZ(qo+vA#qZ2^7yO?1z3{K*nm*i%{MY)y1egf-a(oj0BgFkEOoQn#17^Z3m<>;H
z{nPLa_j(qdgBM^C_kWptE+vjv@X2RtZIMP^Q*((NgTD^{UHtX<8(<@Bf@0VVTVN|}gB?7>PW)Z?yYWl$_uzkl@5KKH
z{$Bhq@%Q2H$NvidpZG5Pukp+9zrjC%|1JJO{Brz5NP))pEOaEpz(?QeHv9nmTKIv~
z8(s9IMzY#gpmUMNld@8Bikzf~EY4_;yvX&U9SP^5E%G_P8x%lyDD;#dFD1x}6L~2?
zUYy8FiRkCqFK#%CW;vU@Ji)!@z>_c+p5p%Vx%V@$0G@?~@Ekl3FL2LA@FFaRmtYwz
z2ec9L<3xU($d42G@oKeqxK3)eck!imdk^0$H%_12IDK;C^vR7Axp5*lPUOak+&GaN
zCvxLNZk#^3ar)%O>606$Pj004EJ1Ecked?ZrUbbu@yU(TCpS*yrUbbuL2gR4dY=7S
z6vRM%h!ZKuQHqv89ZrNKNQM+hg*57Vx`;=%;umm|QK@Llh
z!xH4MM4Q9)bKxoCcp9D|ozKE^@B(Rlk$WxnwIEALlWawn;mej}IlgR7R^ZDPWhK6B
zRf_Os%d!ezwl1sjWec+gU$!!9@nuW14xiQrncRg;I*~~yGU-GnoyepUnRFtPPGr*Q
zlS!vfCY?T+boyk{>61yPPbQr{nRNPO(&>{)r%xuGKACj-WYVc2ZQ8$(KaFn%7+`~1
zu#0`{7lY{q9ibO=gchqzv_o=oK(@{K^qIOr0rZBxaGeMg1CZo__)l@p3+!72FT!GY
z36{ZfcokN_Yp@cE;4Q9u8{Q}U0elD_!N>3kdZ1BK>t(w3S3YI2jCzaq93k#+-Sr=-M}~TZTJEBweSP+qh;QcpTX)s
z6t@An6AzsT{{|g67=JkaEu1xh@I91UI6Ad1bOB^XM|Q-&MHsyWJ7hpyg;#*~^eUjB@cf%;(rMumGNgh436a4=-?h5xfYC;U!oG%i&d60k6SI
zcpZx19j<#9-h=nq{s2CNkKkkY1U`k&;B(jkyJ$IsAOzBAP1@tGnOt2nBIGWO-2dC4w)McqngnMBUJOESSFEAZu
zz$~EE(dPrb2mLu%1RLQ4_y`U{6&&Z=479R_31PrJjcBM34ImzxLIenQ2;%l7hDDX;9BSp*TDc71it}lpm8IRR)e$}e+ANO(7Q1f0_ilK2YNXM={3--
z#$s3kFT+xJ1(w0zVL7aT*I*^Q4n^<=tb#XTHM|9D;B8n7@4z~E7uLgjBG_yVnLtZp
zwuN?(1=&Dv+vNF8p5N>U3T}hZa662F2jL<36Fdx$z@zYIm-aTl%q*GnhSuuGRZ5GyfVovle{v?E0cUN$rqDnG~b6!Pz)cz
zHrN5X(cs9l=R2&|?~rgE>DHB0=Xfg6!WBwl((yCkR0(;(Q-KDmK>Jjnc`DF471T;y
z|06YMJUqa+V`MGlX?33PL~Z2hRE>O$<2)6%s~y|bPVKbo^WbC+wPVlPRV}5|sj2o8
zHFY!LZ`pSc{}_ICtre7xCbV}y)X&xgUN6|Oabb@ITe1c)IW}t&W0yo4m=5S
z;VI&t2h}UtO(hg`!##HQ#sn{7)v7;^Q<~#5{
zd;ngpVOLsX3)|aZJM4g6fCe%53A?reEm9@|u^NK$L+KZU(X$AL2DHKP(2%}I0^5|n
zpyUOm&DVPDg3_dKSdP|l(myO$R#_+6ui)H#=mrJQ9eP7w@Q$yPtMQe=oQowb?g2`I
zkv2OcZFWZ5?2NS88ELbN2Vn*vZDJ-MZ31Z%j}sTthNh#hLYSVsSOE0q#X_J*FP?`N
zU=h3si{T|$2Fu}9SOKrWN_ZWLz&GY2))N0aY_G$A7k@qed-xmh-^WL@(O-3lP52+;
z7vq0~|1o?5pTcMGIqZO4u$yyA@%P|=f$zls2mW6CFR?-bDUl%jVEhpLIQkWo0ovTj
z7*sj^+j2Dym4V-iHh{KHSyV`ohIPznq+R37oElO?f7hWQ8CoxVMv>_AI<$T;0VVsd1Mn3HtdCBOfT_Z0U0kvzZ@X=J-YJ6&|wg#Wts;$MR#%k;E-^E{#zX3MFCMbr@
zum!flHlX&>-*#x!VEWt+trUL`{ulU8{D0u@#s3n2AO3#)uking@528YzYPBy`~k
z;vd8>$3Mh(&NTXFI-?c_zKL(c55Q++Nsi~~!JI?6=%G*>kQK&`>En4S89y%9>*7bT
zFNP7`uAH9-jOgiCz%}e2h?PbD)51D*>bCwU{$F4^%z&9N3(yd>s1Evk4!-&6(5crt
z^_o`IL2K&JsdJ3fJLvy8bn2SUv*~5*`vzY=#}TN48@
zw4@GNP>0cwW5_tIsDswiLF?(Df9Rlp=%9b-F!BL;ruB3fS3nP7RLmH{b-#t7a1#uJ
z;q3n%jDV4FD~y8MU^LtgW8n@M2Y-M+!g#m~?gr%jjIHYv9Ge4A!dzfv&6o$|5B*Mu
zf!rI
z6MZ0CHIsbTW&ij9t=a)vwPR`&0}GOtYQN~jc0T>(ZcqT-g+U9Y(?aRAP;TA;xM`u>
zYRqsj=RUgx~_Qr|Pj%SE#0p~o6zYza9{O9psAkIbjavW>}*KCAMPz;-43v7jLuoHH}
z9^gF+npa2b>S$aYZL6bcb+oLGhSkxoI@)zV+SQGA-Hqh0r-UEOHc{b*M=Hi!co
z#Gy3gJ!rFuKr5xwJJ26s|5Tvn=@0R~hMK2S^K@$52@OhZQ(E*fj!P~2IR0#Wv`ZKj~v)X4(uZb_L0Ltdl+aBS^)>GfP+@RVcZP=2NU2Pm2s7lX|ggUuI%%@>2s7lX|g
zW7>eaY1V>3pnjUc5CWl48^XX2)K#+%L_l3|0Cm-*uA0Z?h8#jcFO
zu8hI1jKQvqF%zLNBta8MhNh4L%^($;LmE)8u`6S+D`T)LW3Ve@OzJjvrNhjGHqaK@
zK^9~~d*}evee6mHcBKQm(qVRj&d>#r2NQXq#dVnZfJ~Ukgn0#Yhby56^n_k;6%@kN
z&>Q+dU$_SP!L`sIu7d$^Jq&~!0J-^Dt?nqUzYRvi?Jx%JArB_Py)X&xgUN6|Oo0br
zDj-`wtHpkt>u19gFbAH5x$qRsgQsCWJOc~hSy%|q!SnC}EP|Iv%My4QmclFSTLyoJ
z|mRB|Gu7s!~BBnz3?UMgZ)@$$;v*Kwy}H<(jIcKcdx^C9SBbm
zehdF?#-6L+L!{Aireiy`WM2lpY>BJiF+4-~S$Gb3Q%Fl&Nvr6jRji~{bkZtT(keP>
z6)R~KowSOTKKsJ$voGA(75lL(_6rT0(GaEx5Vb^*sLfV{s7s3LiAWK}7i43Ec9nb&
zBSg9wrsahWs~sNJJ^WyuNp%-QC)UraKcHb+;-bX8N$pcIQ|G3xY#!D;E-gMSC2e}z
zvGjV|r+
zLOn?0ZS%=D*mAaq`;@oXcHUkG^A^X>yO%S~_Hgs|+Rb|yIoreSo9*G|?X_FJkrNXr
zTUt_PeUvckql8%>CE|XV0uR8Cy~URAb1wAE5AS=OGG=|0_-1{S@P0?m`Y7QY&!w34
z;pXkNo440)-d?-UFzdt3+iN#(uid=8c56`(1N9*eTb~h5EuHa<3^+OaqvVXUKMJ|#
zYR*6V3=lVOp5458cJt=h&6{U8Z=T(}d3N*W+0C10H*cQN1H|(*FxJn^j}qU^j}qU^
zj}qU^j}qU^j}qU^j}qU^j}qU^j}qU^j}qU^j}qQ#$(bJ|zL_5-znYmJypK{dK5F5g
z>D?GTU*3326W;dnWZ=$Ccr%~5$=Ua
z@BmEZYwi!?KLme*hv5-;6#fi<;rMj;E8!XVkKxaRS%e?QpAApI9C#Au0<#9N8Z4{^
z3#%aqt04!g!NO{=uo^7h%~@Ct7FI(Jb1W^a28*$p9L8!a@2pC~n+bmmpMVR#hBEjD
zzJ-Hu2#&xpsN$OABF7NIVjRc9lCT)d$zd$V!jiDCBrL{sEUXC&Yr?{s$ibShuqG_5
z2@7k&!kVzKCQ`5_EUXC&Yr?{su&^d9tce_~2@7k&!kWmzny?rLval#DEDFnL3{BbJ
z0zVyE5>G393tB@abl`Xn$;LvQEh>xi}5sz@idF^G>h>x
zi}5sz@idF^Gz;s-!n(1rZY-=D3+u+hy0NfsEUX&~>&C*mv9N9|#@;N(-Ymx6EXLj}
z#@;N(-Ymx6EXLj}I!P8|Zx&;37M75OC1hagg(YNR30YV|7M75OC1hagg(YNR
z30YV|7M75OC1hagg(YNR30YV|7M75O
zC1haEFlX^$ifn`u!Jlu
zAqz{$!V_c+o`QMsG|Y!*U;!YvSVB2iLOEDMIaoqDSVB3Bby|#dT3AFD7LkQTWML6m
zSVR^UQ4SW7g+*jx5m}6bT3AIER*_{E!76wYR>NDc2Hu9Xl;1n}>tH>+2OHph_y9H$
zZ!!Ky_?z)RhAr?3d0-!
zwR$c>1NzPJaH`cL$6c!}C-1oG#kZd1+=gn4sTckB{mg6I&%CyBl`=V7BA--tg97Lc
zeSsMi;stzW=!zGCx!vL=SO&|1S^k1Ir-GUOVkH#8`|tsL2p_@6@CkehpTXy_19ky(
zg|K35jPBY_*p1b*HQKX}SzNxkYVy6EO`8A{q1ujQ76+rVHf;Gb29_Y%?va*Gtk`3Kyxz#&CLunH?z;&SSiKKuPw$pDfZ2)b^GSkx_$F%-M)FX
zZf2vonT_UVHkzB+Xl`bsxtWdTW;UAJH?P+1n^)@=-udWm-@ICWht9L^N9Louee-JF
z-drStD{qL$Pm8tlKyLRazl2SRw0}{pM!wtD6~cZf3x_eRE%>
z1#-4I=rLFxG0b_jYtO=S$_jB{g%mT-wU{}s#msLlW^QXS^ID6U(^|}Y)?)1~cpKh<
zcVPqf+X$PW7&gNe*b3XgJD=R`o4e}v&0Tf-=B~PZb64HIxvOs9+*P-4?yB22ch&8i
zyXyAMU3L5BuDW#%OTYjd)Pisn3vT78ybpZPgo}vJ>Mq9eraphe)Brb4-hb
zXo!V4Y^Qjr9=DNWHmw-DX$@`QD$co@pc8
zh^gqtN^~P@JxG~%^hjF%Rmevb@==9sRAKd3Vf9xb8&z2SRmet_=+8CRc@Fa~s)CWG
z!)PSAHlvDqUq!vIqTW|g@2jZyRn+?`>U|aUzKVKZMZK@0-dBk?h+`GJ39I2P;&~h1
z=hz4EA$$ZM!zb`5d8rDtS!WsqifIOvzCPsw!_rfD(Y+%b+(E+TSc9%qRv)PXRD~QRm}3N
zVwPtWvplPqrE+mC^e24k+?*TOH<c_dKS6hcNm)ONzVi$9XUCbqR
zF_+lITw)hu%hv+9kOmjh;6fT)NP`P$
za3KvYq`~!*Ex^~L=^OYK%E7zRq6`TtLxReXpfcZBmCM&6xR9hWB&iHZDnmC_GG0}V
zeyU{5svI3v$+%THda9DKE4hLxOk-XatwxyEnDd)LGiVNJ%vV=)ghVLPRz_`
z-VT@ZcDUTvvbc~wxzfqWSeHxdgp_z!Ubv9PGNiE#X)Hq;%aF$E6;N(;U?rM9kZ&ilNw<^QsTb1GRt;%ruR%N(o
z$()RrxqPcKT)tHqF5jvQ7h1xFmT;jZTxbawTEc~vaG@n!XbG2ALSAhLZwu%0wQw$9
z3+M8+a4ug9=km31E?*1h^0ja-Ukm5*wQw$93+M8+a4xh<8QP@`?NWwzDMP!IpZBU|&x-scFi6
znx@>RX)2jdQ7J}px4YrTR(U?oediMoIvtJSMq{|q7;ZF%8;!y05;W5yICb^G6866g
zOW_q*#_=<+MmUDXDEDaww@)*;eVT!}8XT+P$^_OW$~B2{J)&HTSSh~dzTd#NP!5O4
zx5KnUl-6m|U%jH?hf-hZlln@Z)K~hXo;ORp?}&$1#7BQyt$L-;tyaELE^1|jSEAiW
zv|Fu^=*51o)Y7JMZ6D7kYSlzP_D?{X=
zr6b7F5oGBIvQ&yJmD2i_()yOt`j*oAmeTs}
zMV3lweciOaZdzYAt*^ATPOj44zz8jT%t>=BO2xL2GCO
z+1#T&_sHQKDT|#vM`&4(B8#Q8tZrIXH!Z81meozmDs8%>tS#Q9UB&&-naF7M8>UiP
z)?LVGDKc70%X$MGi}85s%W3E~Q00
zN?*E^7V#+k=~7z6qx7juX%UaouP&uUJWAiXlos(Q{p(U%#G~}FOKB00($6lXMLbGh
zyOb93DE;kHT0}Q3qMH`cO^fKJMRe05x@i%mJs3=Dc*Y)Eval5OVniaP9Rz!vWdX%Tt9%XTsrR4TNf&z`~g
z7U4{2N0>E5Nb{+qAC*XQC6Zi;B+Jo{N+em1epDjG(!#6oS$GxV7WPk|CB6qH5zl=v
z8SaNE@Blo>eP+O8Fcba;v*2;!nvH)hBO|YKjT{~Mp_N!c|G7e}<$mjcbyf74rPU}$
zO%5Z;a@6E7k}O9}4kO7wHEMELwU&E0SGJf=eA#O5#g{GTAx1rz|A6FHBDs}FZY7d?
z7|E5RCWnz+IcidgSb_a0zY6j}d&cULtt
zT<1;?!zDCeGYnBc#49Q$L>5sI!@7!LT?JH3h$!ePCR8LSA|fIpARs!52@x?YCUjjz
z#DEIx8fP&f20&SKM)`kEb@vU!pn$yZ|9yVX-ury3s;jHJx+|PI=Ty~cMoO^{vC&AQ
zB8kog;rjW6&HgU?QScaG7YA$Q6ZYT0(}4YLHoJK27r@`aZ);oD)AK~zvYwtN+Lrb7
zJkhqSr{{^bWj#Glv@PrDd7^DuPtOx=%X)gAXj|6P^F-USo}MS#mi6>J(YCCo=WX~^
zN!Nj|)SwP11ZX+vc~$hhDtcZOJ+F$M7w>(nVwYLMq3q#9&bY?
z4q~|fj+9;}{LbJm!gqrTa385{pa6U;TyLRuT%P{+2##VMZeQB%iRgMyV#GWd|1b36
zZPn>M%XQC#ZPD$nw|ZrCyA7zrMu7QjyD4BlHEontyHM#afSpjR+70!+M{_<`*E@}4
zb_~&u*3gdDAQOo;<8%7~uG!JLUk6>U26aFo@B0h2;ZwS@>cxixLf)j8hw{OONIuvA
zpR*kP<|*WZjZiy?a_^A0S#DOzbmtj*5LX*-b0jS_)E2-kV}~Tv7Kq)HP+M>f=RIg;zs?S3`YQLwQ$2byq`iMf(4BUdMrg3csWA;aBLfte?j(#7_W5ODOOLDDVa-
z@CJwVx<pN(k7}fkYNQX5;;Yf~nRS=&Ce`$?YIu`sdRaBRNi{vK8s4Ou
z-d2s2QH_*Qjg(Q1lu?b8QH_*Qjg(Q1lu?a@Q4LR04L?$CmNkQ76m9FlKC
zT2&)_qm#ooIywAi)K~yIf^cVsto!^NK14z1UH0fHXuWIiiI4P$q)<(7s)iS-rUz9c
z2~>xYI`uDu$ry&A5)8g9LsR#^?tP)*CMhG(dzbymYORMSGM;TfuFrPc5Z)wI-V
zc!p|PYc)JWH7&Lpo}rpnTMf@pP0Ou@XQ-z2R>Lz?(}Js`T^_QYRmK!q&nn}JtY?+6
zMRpXGrDQ%B>cfaq#fVbH
zh*E`CstT=C6$lO%ku76|qEVTF1
zBr1!_Exv!QRKE^sQzTrp65A?KT9VTWN?meV!T7y`@p}d1_X@`E6^!32D9II+;tEP|
z1*IoBt%!13LCLJ3R8~+TD=3W>l*9^3VFe|yg12A6o3G%lSMbIwtb@%vwSf+`2fJ?i
zl9dYD>H4
zzqAYKuL%%q680f1<#rJM5g?TKzqGF=982xnDxqT!hrO`c{s?>m{tZ3_pMx*KSKw>#
zEm+HQ-Gl^N09B_Hp!MOdZOx8t4c}Z~9Rdyoy}=RIPH@r%tcECnnin9E79f!pAdwaz
zkrp7479f!p&@*KRwzlp9bHLr;9#8@91^1C=F1Q~&03HPM!2<9YSO^{mPk^VuV(yJ{Fm_mf&U8rtKc>8I(QQ-2k(Ft;Gf`M-~;dx_yqhLdw9;m!-}13)*zJ@AhNM+4bW{U_omANJT4utKAN6&eLL
z1vhz<&|{@Axm_zl^^GECtKJ8{jSQHh34j4?YARgG#UpdFKZ)A(J$-e^C&LSI8W0L$P9vic7r
zk8vzIj}u9I5`4qS_+tSYEO>!Rc!5fIfl7FRN_c@v>kjUPHp`k0&}h-ZmTi+>Lv$L?
zav!X3!5dV<8;IVb65c@c7M1V@qPM7oH~1~RMJ2p}SWgqnX;@9;okh08Rzjqks5H8X
zX3U2Lpo}r89JB&$Ks(SLgnRctXB=1tXI)7PTLuqMY4j2Y;fp@v52QO790J%YZXXVg
z;2hTMXl1U^MP&65m9(sttU*}GxF>t|KZh5PJ^P1-CheS3{QBhCirmxWo+kHR`}0-hkScZSR3J$Z_NrwD8;1licov9Slk69qg`z!S;p_`P`|
zSslMOqvyfw@i`py;XSbJz!Q}61f}Hck+WxEA;fwFd`=v;4lL{(@FX5j;_)ONPg2U0
zl=38{JV_}}Qp!_!JVhx_QA*ApIeX|lv-Q!AcW+0|h2&gF&cczo_gl^;0Rz=jgj_h!grERR)LAMjFnYn
z0I~Qf);`73r$E3!h@$Q!IOmRZp?#Db_qgOP(Tmiqwh3NzKb{Cn-nvT$(q^rTn7p
z7OKCc-AeL?+oG)&sxG^YUIensNT|9{bfMji$t8$Ic_*QScae96SmB2A&4bg6Dzk#Q8h;E$yvnZbfS=8e5^Z
zLTQD{3WXKwDwI{Is%T`9TWZdANZ+6&_GL`npD~hg5>6%@i#jp}$ao`Tjf^4L@j}K5
z87IsbVd%1g1`9og7Sm@#8^t0gEi=-|jpRLy_=BjggEDmZRPq*@dlp&+W=H73X{eOU
zqNdUB?(Oshm(r_;gR5vSBf!;wc@2ko3}*}&Yt?hE$G?Fz*i>`IgPRE73?_nGz$9=h
z6k-ZK7M0kK<2us;dQk_S*_jETnhsha2ThQ3FF?oZ%*79_kA-&fmXg*2y{_
zK<8I;yoUI%@u89Iy-7IC?>awlt{VSm@C(+m#5$P+X#4EFNwD{(9(!*R?7K;@@5W=_
zjmy3pk9{{{vCL)9jjQStP7&7tp!a64jhkb&EVRYfocok<4ttEMC4O7d?ux$~KC-Ps
zccAv*xC_{ixcxylz`iKOz9{zCB-mpkR?R$hC^(Gp;efG$JvLi!!*2l3aT+)soB;-c
zv$+0ja1NNjbKHzS5!?bMfi2l*VctW{259XS_B7eE^6T~hALRT);9)QiFgK#+gGa#v
zun;^Bo&d~~uxDkvYyz@prJi~PECH_q+JkxxECa8DH^7_VEwCKC4c-CR+hfm4f;}q<
z^&$8Od<;GTmEhlC75Ef<20jO0fG@#n>VYws{VASeRAhgO%l;IX{V6W{Q(X3^xatS6
z!E!Y;Rnw+4bd^0P3HFD$8t#YvAujtvT=s{!><@7@JPG?lT+Oaz_J_Fa4{`M_pgrgS
zm^sn#=DHKu4KP2+{t#Ewme?P%{dN(1U{i&5r)hWW57}O8Y@6Fw9Lh5d0~djd!C%3p
zU^uu8Tn?@PSAwf}2iCx|zr$sJhpVpzBf)iG6u>gSX1y)@I}-YOa03_zZUoR4eG`}f
zXv>IsqrY-B5_8OrxdMdaBOas#a^oIQ%+h)fR`osQ?gnp1`fJLP=aGi3=rhp(HMp#D$W$P!bnP;zCJWD2WRtaiJtGyWd=Pzq#sZ@C=~j
z6(tX~*gkt4-|`IKfwf>ASP#AjKY$IJ)@m%d>E?jl;<^PW2Q5J>&>FM>Z9zM*3uq5I
z0POx~R(5Li6M8p*jzUwensTLAyX^XMHCj-1eYx!Va@qCevg^xb*O$w#FPB|kF1x;5
z-3=TFx`TtjU~oPd0xkd-f~&YEYs2)_;2Ll(7zwTeqrhk|2HZ*7nP3)x;abKEO-t)PaHF
znD=0ewdw(p1>rvo-yuAQ%q_?K#uaETpch-DLI{>r*-Xj6;k!w9D;V{-Y_kfTO(eNNCc#sl$knkX4v#k+4NN7O_
zt&Fpr_|+V*A^vOpmYf74C+!JY31%#V(uQL3WoRr
zzZ-sM((gfh7qB1a*y#g5l50_@1b!rIRfs*?5kHbr$m$uM1ihy^hI{@A91Hq#@8iJ<
z;6!i|_%rFTC$9biPT}}e&=2$n19-;M!0F%&Fc83p!mp&%Ibaa?KMxEB=Yt{O0x%3*
z1TF@D1(#4pv>64D${t{kJ;0v2g6FvsTm?pes{vz;Vys~gu&Wqr6l0BoYAVJW_5i!;
zdT;|62W|x8!A*d1rUuWnC2K_q#W=(M--M!VvHv%rW`etUmwP}3z=Ddp574I6{on!c
zAoaH6c&A^pPSgnAsS&(WBY3Aq@J@~3of^SAHG+3)1n<-c-l-A1QzLk%M(|FJ;GG)P
z;GMS3R$eae^dIU4{f+twuriCiyPoMHz41OO!m4Kg0z)vOMr?$`X
z(6L;59H9Sb`j4jnX!;L(Z4>&>;AHR@K>yM7A5H(!^dCI{oCZz@XMlm=OaRZ%UfYB|
z2b>EAf%Cv%a6T9UE&vyTp_Ybk)9`H?zD>ioX?+Q}6buKKfy==a;7S08p|1xwfN|hP
z0NsTr+d6xJw_7FfWF_!qCGcb=@MIk`L3L-u%0UsvTh7$T8;AIf(Vv{sL#!fkJag4(Yz
zDwB+P0b^c@G0)GDy?w^IfUzza$=;qB>k2mgi2NNGD|$uH%6P1+Pr4Mx4L~DkWMht-
z5=KA97?)&>OEAWXtyoKo$>>#RFvV09iax@L9;>
z#uDCUW5XU+5)L{E2c3k2PQpPa;h>Xn&`CJxBph@S4mt@3orHrI{M`hX+Ak>DtBH25Pp2K?_?k4r+wlhE-bbUX_eA*=&}!8P9hy7kq(kb2T7!ZB+@|=TL`s(^Wc6ffG!8nwr=VRvw9AJki4{*DdgMcoeCUx6J@TPPKJ>_k9{JECAA00NkNjFC?K6qL8B7GX
zfJp$0eb5RYTH!-0d}xIat?;20KD5GzR`}2gA6nr>TQ?$ht{D3b~u4P-Dm=$VbHMN>qe5KK9
zZS7+1VRfA)pUx-k{_^fWr8~01fxT(0@m=FY^Kz^gTw^#4>`1~n_(;mWL+fy88EEHy
zBxSK$F1B`kBxK)#5;)TVB^61@J{o%8$>ktI`?@|7ve?%3;T(K82OsUcZ#ak5_+Nu{
zAmj?frmpY<y{L0ta6MY?VfKbj60Qj|M)pp_{^QKsx$rWH;A`3lN*RKBK>{T7b5I
za%c4S(YVL9a(yIQAIa8Ne*irJ96F=F&*<+n`umLjVlUTM%oica`be@qlB~}t?lX$}
zjN(30XbLHG+by48!L?U{tH20wHNdVX5~z;^>LY>rNT5CvsE-8dBZ2xzpgt0)j|A!?
zf%-_GJ`$*}CV*Rc2I>dSVS8=l`fw6HoP-Z2;Uk6mNTEJbsE-utBZZ1>TOSUhqEMe55`fsn191^O5>|H1j*&hHVe-Nn1l2^nZsm_`hR=mUgLWmzs8|X_uOIscDy*
zc8L}~*WRp;#OEXN`AB>|5}%L6=Ogj?XyJXd@IG32A1%DECjsaPR+fCMEcsYj@--tR
zoWD$gCG1eb%$NGim-@(YK5|?xUm-k&$Z(>!6lxsnErlYZ$p@hvCsxl>P~wp1m`&Qd
z042v9seDT!^oXBpBQITFU73n2?Q
z?@^#HI3An;P6Q``Q^2X9ALtKin`tlE@K
z&OZ$1fkyx>a=Un^=eds7S}T=(ndf)~ECH_qbQ0+3w#I^Zmajr50j1vh?^&$oS-t{m
z0K6+yI|bEFLA6s*?G#iy1=UV5znMbj%IC=fj++DOUQ_qF98mwvZ>Dr>&<3;x?Z7Ue
zJ?H>Bf?Yu;up8(MXe*kwvcvhjtGMR~a5cCFTnk2m>%b^58jJyBp#Z;!(%s4RGr=rC
zAIYg%Sa!)L~pS<_ItG`wbQmRZyAo3Ulq
zG*mCP%$kPkWi7LQzzoc4j=utHz}Mhg@EuqOz6Y#rLsKOdTGQ~PX?W6H3$1CSx7w_;
z)@GSC4WC+@W!5zOYHXP`4W+EjGHYy=H4VkAX_Yk%ADf1cO~c2g;bYVAv9VRwG<<9t
zK2|KUrjZ!`Ymt?3*lBp|G*b2US!Bh^Ba-z0O)IQ*u`bElTX^^Xm#wa*;rr9@{b~6A|JSXqrWqyE
z$OCEQfi&_!8hId%Jdj2nNFxuVkq6Sq18L-eH1a?ic_58EkVYOzBM)q=)zvg|LK-&ST&FX3z4NmPAS8KPnnnrf`HEXMBv_4{OHO=T+yS3GPE30WnRhFwzFd4gs=*tnLYr9Rfz$
zfH|N5on(McGC+O^kRN0YC_sJ)7;OVa+knwFV6+VwZ39Nz0DWb^h#N5C2FMZtvP6LX
zGC;EvFyaQzEHE3~1?GUe!9Ab?+y~|Ybi3#}1GGE=BW@7Q5e1C6frE|~Z4X}_XLajp
z{I9?o5Y7t)jJN?KuFMMs&JUzv^*kePz=#_#;s(*&P=F>VV8jiOLjv@rK{PiMAd3Xd
z4F%{<1GGZ{@<@O@5+IKR%o7ESya6`R1GGc|des0;QGk3BF!Bb-C;{4{fRQ&qV-z5x
z1gadg1Z}~tpcB{)><-dk56}hd2lfZuz#l+Qa4-nxkOD^EfYDdxkOD^FfDt%AW(m+J
z1!$B4G)e&)r2rWwK!ypBVFF~B02wAgh6#{i0%Vu~874r637As~m{SVW8DJnd6Xeb*
z4dVDbFc_QX8x^393eZLcXrltO
zQ32Yh0Bux&HYz|H6`+j@&_)GlqXM*10otelSt>x53Xr7&^vVHxD?t7VkiP=tuK@WgPz%69@Hlt^JPDoxe*=ra)8HBKEO-t)4;F(L
zz>DDT;3e=6@G^J>(9V&+0_3j%`72|AKg3rL`;0y32pbsIF1;}IpGFgC379f)a$YcRBS%6FyAd>~i
zWC5DA08LteCM`gd7NAKB(4+-u(gN011gMJxZ373mpbjVig`h4-fSo`QNP=SEff7&;
zl!E#o1sZ^cpb=;ce9#0m1d0@{NPpd;87bOO79
z&R}^FAUG48
z1iz(6&L}o2G@XV!ANi&7zIXyF<>mX9^3%Nfg8bia1)pS
zZUz&Z?gsaO3UDvD56lJkg9pHa
z;34oZmpMlTWy;Wp1fhEYsJ2O(V>R_uh
zfybd?yNXp2Bf!<*8Za7+0b@bDGhz~9*%2`n+yQ0)*$KgyWf+Y;Mq`f=SiZsTG4jgy
z*F8pF5AB}Ei0d)RdW^ENmH-1e0$wvw9I~Yy&>Vopeeu_7Nera
zsOT{o%6Hd2MnU=J`sOg7SbJgAok_41%z9@NW&dU;SU59;MXy*#Lw2leuxULMrTgL-*TsV#kz-GfSb
zP$>^8hd<(t<>%jMb-7^12B!HH`
zA_25S0%-YP2>>n{c
z8O>`P*-IJE_h&qp?>D5889WPq3|YZL!;~!vPQW3X&Q0U!3@raE5x%h2m8O!0J>-ZW&fbZ{=upmGDr&TUnqyX!MWw63wL6R
zJR++NJjVQlkxSMQ{+{!)8~bO%zrg!CASHDUD@EuM!K&qIsnp~dsi;(2KC
zJhXToT09Reo`)9CLyPC4#dFc(xoGiRw0JIBJlVHd#lFod_H9jB@EVZUe<`$enJ&?V5&CD70%(9k8&&?V5&CD70%(9k8&&?V5&CD70%knwi>4yRyK
z75i1I*sof}e$^`Wt5&gJwTk_!RqR)-V!vt?`&FyhuUf@^)hhO@R{qQ~
zziJixRjb&qTE%|VD)y^Zp^@{@$a!ewJT!718aWS*oQFovLnG&*k@L{Vd1&N3G;$sq
zIS-AThepmrBbU3{e*1Qzv*QqLoQpQjMH}a$jdRh)xoG2Dv~e!lI2Uc4i#ED
zN86S_?hSWGVTF@Dy;W%1JTz^xGT%eX=AvbD(Xz=tUypshRW;;cS!v?2=eG(CTPPR5
zM_6Rz5Af+z$j9U&!d=#+xxS!R(ogmx*YsjCTk78C~35#;^N1|0@1c@EYOQ0kpvA
z;l9RS2k76Kv5vmYcqco2L!De9;bOpw8{XPC<5)Ao0q2{8GQw@aZeTyKKj;S7ox
zg4w6oT1bNND#3UqmO>I{oEpIOr-9SK8DJoQ=V07PFzzI_d)#47C*y+8xZpD`_>2oa
zal2(^!r5A$36OZ!u0L1AIlop
ztp4gv&bAgJo&H{7&F
zHOAi=U@uP{iGLK}i-ziWfaPz6f}0lrwGo&i|zR?mTda&N2;u+MBQ`^?s|&kXAdn>Oe!
z0Gq9PFThv)bXTwsz;cw{4`3BrV?S1R0|$cc;2^+v*7RWf^T7~s0k{xg!&lD)v%qYC
z?OHtt@a+0A@_ZiuMXtrdm0kvx6Mh%}Us$>-f{u9536I%tk6CK50^~8v=`jQ2QTHBo
z?@{+2b?;I4p1DHyRHnE>_WGx|LiUcQxT4k-)^Y{4SxpI80Na@AU?6rKZUuP
zS;(%I11-x+ZrZTvgH5dH-?Rpc>Eb@MX&K+1;%g6^u=BNPrmZ`K=$Td6e
zhsA6pF3J(OX3tBCP{Mr4mQ{_Lu--xLRiq-$WGksQn$YidumW#w`Ud<6u(*a>72lLH
z*}(Dlnd5a5!uI=)`?;HbGB-=&QYYl+hBxQ^7B+~Q7kd!x})-x`|}h1y2X1IZQ{F))N^GRO_kfxIs>C@HBGVm~)+qM9-gJBummp~}=zrbIGNyG?uW}
zA2n{e4Tlje3u#AD=I!}jf!qX2vzD^2&eXfmoE&<%4H<1ADRnOStO@%RrC^zMXyPP)
zbM{BcU*7(I<|i#mD4w}{W+anxj(%Cn8iwj*$|+8<&AzlYsasqbVT~_t_LuG3(icg`
zc(fybnUa51?ka65ujGXqL}k9iOP;UNo6==om3*Oil2`V(Y4s+)T(IfK%sA`BPlEqF
z*Z!^^Z`zWf;G4b?iq1Xd-J{wzbS`}NpG@0d!>Ak6hL|R2A9b5UGM>oKP%pTrC|}`k
zs$T(*DvfMqQ^W=g(adXzx2=$W9tB%S0
zcROKS)1p7m+$xht#QB&LHQGc$lsc0(bM;mS;!)ew_J*+ab8)6`lVjNTg~Cbil#;31
z(Y7%{{8hvsC;K)5{Uu%UzDt*|2)-4okP
zoRN{9l?|kmkr$4T`-Pk#dn)6SjjpKO6JCA`Kk|*+TQ)^Ig5fjtl1TF1o4J_1`CGXm
z(=*a0{vhih{4^Xxn!ltoKhuk(hYN3M-aS4O`EkGE(A=%YX*r}%x
zBU$qy@8_BRB0I0*GvRnC{fqPR1i$+G9j*IU@B4dCqR%sb=u=K8ylWgIzRae{Kj#NM
zv#f$mSfS5}jDvBn&K_rD3ao56KEF*q9D5bDWbsuld9KZVrajP#;}h_g(&MF-gwho!
zIFhy`e|C{&L%dBYa~#LV>C6queT}JeL+>|DBT{M?`OTa*W54iq;So8}|KNC~7s{Au
zew=NW%`*(i6Gi8<`AT2O&wUy1-i&)a1vgnstCBm!xky$r8s*1uw1)l^{;k{)*QGMY
z;rVv-%!5GmBUkgbTSXVlHQ8E-@A3Qmkg`QIFC5g6HL*({%0TFPc=ej_5h
zGgK|g^EZ;mbnZ8kZA}8&?w6z!jetmzRZ!}vHB%Z@B2{eqnZHn^9sV<8I<3u6OZj$$
zWn`JKL<^B=46l*lYa<%T6Tw$)p*FVR8N)g^x##qu97>#1&T+r{{kd+#18$x)BWrAa
zYTILeqs@nW9VNXZ%DU#$QR6~sS28xXta+}+u^C7IH_M%N81fzw2NKqONQZX}-4Usk
zx8E50HQqPpkp8!WG$!#)p|Dv_BaYmHACEj+IK3UwQj$`W2GO{-rQ7WI+&9aqkTFQc
zK_556{h3tRHkltUCuMvTP9x;%gaA6kGPg5_b{jYTKFM&yUZh*gTZI
zX7h8Ky*o*^T=LmF)ySQ9uVZSxfK^>myGh^USXi;YUP95L;eh8T;HtjztOzIcO~4M)fXSwd_+t4{GwrbtEQibrQ8{T
zNPo<4by6xde^P?K{qEU12(Nd!N_w0r>rFq=?=-;fu+>huBU9#u^a4p&L>u8piEN&`
z)W(*mP4-D^mVBYrz?_t_=3Az?(yy9IiI|?Ag7O%v9r#k~@}1|}-d)aZiP~(r-Ywos
zWZhWPDS1jA%P*vC3G$WkS$e;`yUg%x{_Zl4O77v?<-g;Wb9Z@HX?yfG?kb~}$;|fIF_fa?cHPfQp#z2e{yAfwLD3D&oC}NBX@T!RvSf6yA!ji#qng;vqSke=WC8f
za*w0=l6GtBWY&~+WYOUoz*;;S?$GXk>k^eNS%KF)wZacPP
z&9t?xtyy**yN)&6F0{+6yX`C@i>p%81dz$r&J;Q#`+GIa$ziWH;znnsQZ-;NZ*=IPVPJMfj)5vLT4|aMuJ?$aR
zan5n}Q0HvtYXeb+ryo!ocry|oO#YX`(9_hGvB_?`J3~MJ=b~OdES1=
zS>n8AKkU5jylFq`eBgXwFLYKpU)zs6-#I_n&pSUmKimIMwrXa-tk^?tuTte|5Bqbq
zr#jI7Q5~duI$HHoI?aP+jis?C!y?H`{XE-Kg96S4PdtuLN>p`mFR%`MLDVR``xV
z0rY`YwuD=QouF7@E*$Vn(*BC^rN5Rl&b74K(t4%8m2jq%I9UVT!0N#KQybzNT8+5A
z8KL}N7_+O@B0qYwBRRiwgxr&g(ooSqjt`&T;XUNv1jL-iP9{l`r;q=_kA)gGk9P?F
zd~LzJgSY^Thp_3t+
z8$V25f)~T#=>(Ej0c9RTc&S{}r7r67Y*L>I-X`lyxC3?EhB|I&>bVhh9YWq@7wC>4
zd}C=HGOmPI<@)kwlA};o`AHktk-xB3rM1d^!}rgYk44KB9x*PLl1xcRiG&nco=r-j
zfq7eb{gGh=c7FXlESMVw=tI`rdrt?jJ5VVElR^RKOWWKpK_-yM#ji*cp2q$YMZ
zWh8W#hAHYlhJ4ZZkGx*4Q5t_p}rrp3vLZpJNU#QgQ2
zoG&pPggkrpA3uG~t78t+p+p?sBK(Ili#|`E{fBQM?#|I)-YFYfmvE??k#~_dak)B%
z!`WQOm0N;CN#!E@%rW;I`gT;7+4K1!;mbob%j6xV$ew8opOFhiUBvPP>&;BPhQ5ST
z)NupqxYX2hKwXEByUN=Mk0x&{^(@D^SH@v^Gs#hMVf8Vtw2K}23rkk=sqNP!DwDWu
z@_pgG|OWjdT65mZYXaNS}`X
z4UrB+3KCa-LJi8p;0|;{sZ4GdbM&>{JeD3bbd0Y=_?k2}$_#_KYiC;VwHE4p}ra`x3J&@g3n@f6p&`inb>2
z_S|2dbn{>5yr}pM#Ba+rd*F(klxC!r(7td4xxY^4sSn^u<$V0!Z3xRdwFLe^%d-J{}bYycXB7Ic;F%6OSF6}|?)FJAn!ufXLIPQgeP{&<4x4&u0
z`*5|4m2hzOn7U<_?%Au)u~w7Q&$yWH%;EO8mJaGaY_NTT8Lh2Nn~YYk5c(d_rn*?&
z(Ip>k{TU7Lxz8{}ff7da<~&&^`t?E9Vb&k5
z6VN-Kj<$Iix@JiynkxB@Yh!qic0A!;JYx^^)W=vST7R+5u+FnCvaX0yD!8>$xPcbD
zMQ8fw0oEU^!_h{cgwA}RHQ2fs&2{b1q8XX$qxmSOOoaRIY4x#=MgM)Kb-wji>niKo
zD2H%ft|_#!17)`leB;5^5!P{5KeXgStV^sB*2pMj9m=EuBY!JX_WQDjsTaESzE*$h
zZ0iE+QtN8#x}4H0Kohq!W5}*hvqP+-tm7%AbNG7Ca5U$m`VY8xsA^-}y^Pz-xP6T~
z(6|>HH%vLX|G8%kR`(e90prd$?i0p+#<(vUcZqS|7%=Fs1J%36ec!m1#{I&$-x&9M
z+@b0xakVyXv2hz4x7@fLjk}j|yPtN>X~T4H;~s6?zQ#S-xC4xPmT?Cgci6xS`=6$V
z8+U|pM;UjVaVHvgig9Nccg|V;2MyG7jl00O&lvY*sxFv(mKW&iP(74TvTW;KTgD*OFnA^#?U5vZ0al0G0mvQ?T_ZZ`zFyz8B
zhPtO1caU+18+VLxCmVN;apxQNxgkS`4Rx0p_kH88Htt4o>(nuB%DCmm?R??67Y?k`
z&A2^{+xx;HXAP`#v~l|y_hjP^Fz#8#9cc<4!W}4CCHw-1){`
zWZajA4(+^qoi~j8o^e+h_Z#DG6t}=JZjo^t4!vl=(1J4KwlQu;WH#)7|5)gm
zP|dA(MeenY^c%avAKQjY4qXLxEHe_ojtSY&QORNJU6PZ2Yh7h#Muhv`_KAFyUnRSxcCXuxM=a1y8ZLQ2ag5>u@d^gVbusMg0CyJI3hnF26q{bCU8tTknRtfUR{!G8PR>zTe9l&n)%~>mKVNYoYaw
z^^Bde{2U`po*q+Q58r9lO|WXa~$&ce3}gyV$;r2E56ZS@@lQWok<13v}&Uk04
zGuxTVZ1GdhOU^RBzxT1T+F9rPq#Tt{rK$Kb*u
zny99#*=nwuk1cA`7qBK6`ZFmFN<__%{FfvD!^rFaJFAn{pcA;M~DfF9MZ2E1ZCQme3(&YUn-!R==
z+O$>Ey_z1{^rWVPnqJv-Letqz7c_mT>B^?7n^rd~ZdTST-K=MLZL@N7ZR6%v^M=hk
zHt*5=gyw^rk8D1*`Ml;YHGjYPy0XHupsY(-@3MYn7nhAIn_c!q*|M@#Wj~p#b}oCb
zY)#oOElOIHx9HO1&=x1R7}8>7izzK0Xz^T&w_AMCqPo1Kyj6ME@;>GL%7>MYDW6t8
zul&XGmE~(%hFZtQ``^;WA@tv0kSY~8GN=hi)2pU`?x>k+LdwZ6CYqSkM;
zUe$VIo1!*lZMw8Mw9UzFhO`;kW=fj}+C10hZA;sZWw)XH#c%skSO)E)dfVkBbAPqV
zpk1!qWkPsvm&u{u9{ye0Li-~le`c7r!{81hI!p}fzrz$0=X99SVV()u9iE6{7I%0%
zig`au`&s0#iu|Yzb%@$jhp3Hph|}{$Ny)#%%E*5=^52g9w<7ELv9c7;;x=5%&;cha0aiL-5-woY>-D!%IJlsPS&a=zo)%4yBn
zK3I|a!P!8lH=*yH^@O@+;`WN-><(QR4VodP$y{MiB$5-5GzK9VjWF-Dgme#?(5soy
z(oE>JOlVmq^m-v)QT$*9cg?=xFdcOzlUI*n)K)1`G+WSJYkFig&^Cta*wyC+V|M=?Pu&IwzOf5
zeK~o?*(R)W!fsBuPENQWCtR2lW))oKKCC#)gm=mb7v+SLIpN}*Fsny0*OugjSs|8*
zXVph0Tt6p_wZTk$gPd@~oN%L@Fmo`O^nOmbNlv(FPPkc4c;}pOkP}7^p1EgPP8i*I
zCcZo;oSSdv+1g#6sdIM9N}acxmls2QwVMNv9nkX9XcKyw^=_xr9xg%Jmfoqc<8H1b
z^id|XA`@Df34NRi{WBAKFBAGC6Z%&s^nNDvK_>KJ7;4wvJXJ?}=ApFE(~<3B8yJVbvz8xtB7be`G>0XF{)JLPCwhx)y32hJ+f2A)&!xNN8{v63QEf
zgz|==w=yAUWEA&yCiG4iYTd`s#beQwokhF59LhMsnrh8~w|xTIxD?LzV{5hbJ=C$#
zF14G%)pmwH_Oy?*Pp}8rgP@Qj?Cb4GQe)6XN3Ss3mmM@FF_6JnKL6jzoBwaA3ZGofrA(G#>92xroSe$@%xWDj(ceXV}z2hB(+v?{!-
z(5ff|t%^d>swf17ibBw(C;e4;!s8iH5^&abAyXqdgkM67cVO3G?
z(-J$dh7LyeZDo#cCN9jUwK<-cIc{T)Z^<09iZXM(@PiG}zqD8FOzad%rFIcorxy`w
zZ$gU+bu^(@qC6fnNAfmx(JX{I;4ZwAXqAsqeRrcBP{d2Zy{E8sy3
z;ddLWvpKtvROcAKLY)N_SjQRBf2SFLLJj*#Ia=s3j6{>vAksg=b%Tvxp@!hkcc!Wf
z@#UR{8oxpf!^ux|;#^OsBUq(%GO&
z(7sGl3)Rayp$F+J^-Q<7yQof`IwR^#Ehs8zSg^8Sbz!RT;=-5f9#eN@-Gy~u&gq?d
z8g6y8+RON3)!xRRsk$1U(vdR7ZnW^Xv(Vm%Uy*bDJ|^a7wXg9fVy!bwxqp;0y#9db
zY`5@irk5XRj&D)jjXy~p6rB&R>Ji2MA&T9cRvoK)nsZ~-!N#AWdKv$Ab%^n&Dr8`u
zc!oO6_;;$_#-FK>e9as6F@8l(d+lWHrEfQ}w`$rcsitaLAO1{D>yxYWbmPy_v_g(6
z(9P1y8TqkAeHj}Dz^4pm1RM^JJc?0bqBR9BbB=n58Xc`3#vP;P;f_M`8ON_fTF_^zAdOi{ukPUYKfjx!C7n&V7Y!WYiu3vbfSp2nS{
zgcqz(!Ux`~ga@4KY{Y%r$e{0-Hr^15Uyf|i$?Ae-Qh5&H3n%lH9=W^lgERS3kK9rC
zzzV+B!@X$L0pojnF<6N(VD;%$0#l2MtH#mi_
z$2rdJO8CL4d_TgWK7*(f8aVe2GYVUMD(bX
zzRD9RxCY8lWSSfK+MJ|>Qy?W=0x65&O3L62Hme`(r%FA*k?^b{CEbJ-RVn*Q+*`1E
zEhVxFcM6uT<*uLM&cOP$-1`gMSy;f9ejPvMYL2F24O`BOTo?A8BK0-l8`U?s_wqi`
zQ^)0~z9s%<^&Rd+zHKKtufv_B*5lr)zQ>)(H|`|24Y(D*@;?9J{Aes}OMU)`I~hyc
z(sHVBr($he+RV?m)73AyGqJhNUA2Wf2fN$cTRXUOLoJ0?<}BQC)Z0s-=FRwW9{199
zaA)%MJh{Hmq}Yb`k8N+BlP@^YUigL+b*JH(of|d$vNK-8D?2yyEhkEXuQ~A+e9wuu
z(D2626u#+1JJRsPJVgWCX?%r)H{v@Sv?jj9AzC=hm`u|qaT=Wz3(4Z~S$8z0hET+>(
zbYI-DSWTA}cmnQtET>C-oP;|O>*-Q{C*w}Sg1WrLDY&;`MP1&dAMP~WA9p&o)a5Ns
z!@U!G>hcz6;Lg$map&kWaVzv$xc6dNUEbmx-23&pxUWThZ4lvE`aImb4W|{+2tAmX
zTlD$n>=4{J`U2bvzJ(~|utmzIhjM$kUxa(3z8Lpr{a4({`V!o!`cmAPdN}SZ
zeHrc?eK~H0z5@4NeI@P^BU@xf3V81BaI}5&Rh%2GN8sM9ug0CIufe@lUyD0UkHnp>
zufv_GN8!%Wqj4+r7~K1qrP|^Mf=qu2TI`W}EGb9p>v6~E8*s<#akw|@8*wM=@wm6?
zn{cP-3Aj`B&A8L_MBM567Tg(n67EcWEAA{k8F!Ap4Yxv1!JUh}Za6+O-lyWRLEp)l
z$$BR4bUh1qhMtW(Q{RQVM9;x}qsA57g)8ncsVZ=1>3eZ2^nJMZ>bbapYl`&!=IjHw
zuNl56q@)jWJXt>^>GZ>LPS3+-2B5)nw1E!S$TCxL+7^Au*y$w^+*)#`GiR9utEMVXitd6SG?svwtS0
za}?8_nCHw@yGJpNi3#US(oswuVm>x$;2`DBsqcyT!o$*w@6spPCpnZw)7#7&uiEGnJTkO$d
zre{(ad4g0zF-nnJgO<#RbZ6U-tkS|8-mZI)g{(m#`{
zLk)~PLrHC#30k+#O62BQOKOv`O}Y+Hvst{gYS6bqL$)8-4NjIm0H|GJyO(^|pbxRV
z@?zVUR5lPwBP+PGX;bxdgO0??4x3DD>X&*}1A1KpSlFD{FG{K#6hUXc$%}ofUTLbD
z*p+#)i|Uo9))2cmFZP~#?Njd)`#@gognFG)ONpJF7dyP(v8hGGj>wBWz1}dcwo~Wi
z#U5F2LTVbZ$L7U$t+zBaj#$~vlYO`H(!$i`#LC{^Y-~~KF{wes%1Vz+Z2b+T<5MR?
zU8?h9KQ3LA>O<^jd9h1M-%agL>>GKp3raVpIuiR-UhIt04XI|t&dG}%Q~GhLh}iLY
zu@{#9ME-XDOY&k*F8!|l8e#|J#M<@WC#Fwc4D`N!yq;HDhh6_gko)d-edd?y%O3Uk
zz3uuB5R+T?PU!>1Q1a4sIjNlDF{P`B`!Fx=@>0f$(j|FuGfQ74Zed>Bj8bOiOK0cB
zO)Dke(%iRqiWij5AZ~bGx|d2P5H~O{?v2uGh&v`P?%h&!b;knuB1+B8F4S=#q}&@9IiJ%FK$?=
zCT>Pv+=O}?h`T;7Zb3c9x_TGah-1{Oms|Tz$;^67i90ec-J*Jo@AYz9fK#%d-aO*k
zbiFI{Viy!GEP0FA
zv+`nR6wNPLOl)p_sgf~8FPF?GcK^Jz7Z$B7nN4io^Ol@k^l`~VVr8{q+-_A#ucB2Y
z*I0JRPkFJOlZlcGiCvW!+a%e(WB{?t@?v$eSIIHNK9L*ieUrSVqzAFN?Nxazlh2f-
zi5-`hc5!iGNjb5(^`*QAihGun65B5??d0MMOB`Z*=f#dF9_Otiwo6{@ImHiomBa>l
zvBwra;Jrm`xZW`u0laR-lfA{3&0TUz$7@$S&zn!|`+2dY#rJr#iOp@Vwl|TOc{%B9
zZxk`PZPoUM6O;Sywl|oV+`eji1Bl73d#89nq7QL>bMEaVx)o0)u18*6x_BIMo$})P
z7GFtRlf1ZNi-!!^Zd_6OB-FIn$&2figqkM5$%{KD2{lc=S0fH;n#`?zr>Jl88sg^X
zrMoZ*HRbx8XDK=-2{lb#pNX@Rm&5srY}Fh6@tFeLhtFeEyYFeKWMFeDn1FeF-%FeI9i
zFeKWNFeDn2FeF-&FeI82LObFqN7|VAzRXzkQ0XLB2kjRxr6>%;`BGT3xtPCyaXyUtzKfdbK>2+
z7-(uDOIhs1GiWOtBWua*<4NKIda*<)2p>EQo
z3a|S?V)XYpF+Z7@A59GJ<<^&Dxs$6ip}Jux(E}N{m}e?Se<3L-ji{Y^aY%2-gsQ?&
zqOsATl=B|4b}D?1^>RnO4wrg2Z?w_G{3jeMPaB-!*0A?ksn4o6EDgWw`6y7AB>gZv$kq|+!J@T0bqCT;S;uKsbs7yv!8B5w9-R+kt|tc0)m$O>=x*7Ci=ullXD6Wo
z=yP2-RKju0vBZ#n6l2##mr^(?bCr#T{aVX*<~Sp9XE@j4PH{%zPUMTgHu{q>xTBo0
zxFZ~%z!}chfo*4)!)VRQ_8W1}a>nBhaBjjq*gzxrHudVzjQFG36Yie92$jr5?85cjlxn>0<)W86$j
zkdl~!rd_UhOfNLoJguMA&+8ZTOLColTfd`M>i6|WSf=|#%GkMqc4Be8w2+&reYDKf
zbse-i_ge+r>1nHwJG^K$;12(=n(_oot)2BU{kqjczp3A1*9`S%o<#DHr?H(!a2;yn
zF8n6s5I!4E#%_vlosG_qs6&deqPLgYn=j1mtM*q1r~_4Z)l(g;4pE1yK3rG8yS%QO
zo3GDJ*YHQgOr}g{QsxcRW6Z7Cl-Tvu=LF|ADMjZ^=PPQafIS*X>ZT#PG~QMJQa`FH
zNT___?nY|;Zs#6)(rfJJ_?jIZ-z!HIs-~(;bzvvRr=&{KCTL%j{(5Drom3-g_b`2l
zzJqyiX>&JW@9$bQQWtAam+A(3XFWn+&6#Gj#aCGwQx`jd=c$X-7&S}1pq8rtsA~1I
zuB#jBGF`4)>Q=g~-c#?bd+B5JV0|Go3pU@=yhL54?ozL-x79D&W<|qJxwCkfNeEWoz&@Spc<-fQManw)XVBE^^@A9>+43kv2LyR
z();TDbWeS-K3|Vw_Q1BS7GE9w9x2wC={puC)hDV_ty15r@6=lD
zXsru%kxuGntmSH>chUQ^p6hUZg#MF02fK!2^^JN0^9ypvc4}8OUEQmesO9P%wNm|4
zeV{&6AE__ZI?eE{>*xaARJUVA*dO(=`b2$_{y#9+Gpik3h=ri@DdbqwukJq>ADf)i>fO+E9s;%m*{-91&e^w`}
zA?gA(PEAk`s)y7Q>PhvKdPXf)FR8E88ug9Zs5|OTdN;j??xGLUr?b*zn4YZf)Xb9T
zIr?tqKWwW^byeNepVaZ{EOjOOe{NKB)I7CN{Y@=WFRH)mU3F)Df<8r`t5KGb
z`U-u6o~38&dvt|$E;j->2v5
zhnR7JZ&JIc-PLL8Z1yYN$quFGiA%7P=?HZKYxf4Lo7E(aoA7J~Xw7+F3PMEz~ld(k+<5g{qkKkGA2OY`2TVxO*CR
zFXQfQTx3MzO?r1<6W-6bXo!eEz_{Ivd!TW<8}}gN_Au@rjN8+=2OGDSafRO4?xDs#
z%(%V9b*?e)b;e~pCT4_j8K(&g-{m-uKoKpsiz`L#!sMA%TD?J6VFbzJ
zsE$ehL?&gDdV@}r=b7}buj%g>WhkyZITllS@}1${$ej^xqM@MQM^AWw`i>rbp1zuM
zt$3H|)aV=3Whu4Sf;N2~t#cN%<{|YMJ?lfLVMq&G(x(oC9`uI-T&b^uu8oBPguP1o
zgEllc9Pe$$UwLzQS>_dnQlb{+iBw^ps(^C^&V0gw+uSX4TTtuD`J2t?PP*%z6Da4y
zL*G8dO4}_hOBL3|Y^&oq)=X=}Ro$(!%SdB>2OoZHFJxq^%F#`J{+l)zyJCFwh1V@WarU;>Z|;2
zy`LJ`{Dj)7VzrX(V}%!BN5+i$9J~FmfxeDvxf8kDt(u2lM%W#MTT?}~QyrNT!dN5R
zn_)x%TF9dilEgSFUnk-5Ok=(?$WLsBb-M+g!#r{<+Yu#L5OxAXVK+LU_5lCkHsCev
z2cp73U?3a@#={ZdNZbyjhvPtFI0^IwL3o?+cHy1EyMzz$im%@kK7lIrPYa(CJ|q0L
z@LAL%JT5#Td>(b{PXdYfOTrc5Dbyx>S$G=V2fr))p71r%i(L2_AV=IK`jHd=IB*+Y
zATdBUys`g+b$ktM)?>hac&)fs+%N7!-SHByMHbM-@H@hrfNOEDc!+HhkBGMc
zf8vrDfG_uE;jO~2p`*bnT0|>h28(vlA$&zVFZ@1hh%s?YjEGTS2H!3Ega<{Z=n;d!
zig-7WB_0(X5#B5OvhY6CuYM36r2_gTJ|a9Od>FXJN7}a!oyg@o%qcvJjBXufNf{HaQ`9pUSJ!4oIS~&VgDqC#TMqUB%Z=9{5mAy-@$IM
zzzWGgo7NzozhQc<>5VaaEE&tj%CYg-_SoszeX+O3-W&Ts?AKx+jr}5FNLUk&gf|gF
zH)Sf3OEePA#8_f3@v6jwiFYR6llXYzlZnqH9#4ERaV7CPiQh}Qlm27^U6r|HExA8=
zJo$l?n9`^0DObvy3Z-JHa%vlTD$iy=miFn=ie?R-j*>7k6+kc3_`k?=;;QNoE
z_iBjkM9uekKAVpLmHGc*|0o7JvjMI$`epwHww)fcNkfmzvk^=W#w@W!EE6lmMq;zE
zBe7S;9*(^y_I^H_k6|_z%*K@nBqE6fpUq%ml+WgY#HGZed^Vp>d^Yg~%;qbrX0tDO
zH2KTQY@B_wIfL1JF?$sqoZnDp!!R4R^5V+#D}S)^jg_yhd=;lJeR<`#RzAJ*p_O;9
zylUm#N^2#uqFMgGmtS1|$nuAmKe+tJ^7-X+%S+3*E$?04xxC}0um0lIzqtST`=3Ac
z{E6p}KEL<*h3ChgZ$6)XKKy*}dEfJn=k4DY|Ka{?|LfW>uKn!VPp`dr?SEeT;k6%J
zd;Z%0xc2#Lk6-)kYoEUME7#tC?S0qYbM299@3{8XYnQLpu9dH)ucfZVuLYj__vilY
zx!-$k@wuJP%{{mIxtZrCpBsCw_MGe4|9JN2&wTBfC!YE2GoN|pQ_p<-nU6lJMu7R^
z{Qv%k7LpTt5b}K(rwYFapVSYpBHK>6Aotl0%#WSGFIB`MMJmLHvf7!+6pLD8pzQY8
zM1xI}PUZ47&F~a!4*E1hBlzj{=yCB!qTX!KI$SP8G_TVc^cqhySgd}zS*gW2K)xSmWCxl;Ik7N
zhJgt?GsR4b568yvt#u}kz$W@vz5l2ba|Y9*H8z+oY7NFe>VM0AMXz-SzZD3jY=fhl
zJiTw^vBXxE#mB{Skj#692Ns^J?>XGg+bp8is=;Wq>`oIi7|IKFN!01|$IM1iudgl8
zI4i==a65~;dc$S9OiyU_y0g81t30>V4(;8uxO>;a)-7|hlM^FN-(c36^$vOm9L8ul
z%jYvZG|ke6?yogAJTx-ST50u{kwJL{?5x@9`8~$4DrIJ9D!=5Ltu*_4n_nsw^x~0-
z^2>tGk_=4y?x2^0QCmPN716!4)cI|}ASL}XzB}k;={rllB{Z!iGXALau<|M;o$2^l
z{_{;@JR?PHlKN^+xze$-{O23b5>1&`
zwEH=j6(ZU_G#c0eqDEY-*2`sD@)r1RXrv|cUKG#*n4_TvHqd)LzPR$<%ZW9~i(EZ9~!hyG=PyzB08CaQb#ss-;k9`1sj_`}oDocsY>rMD{iY3W?~C?eWTF
zW$u`Buc!}Ktj0zul(pKtLATv)bjFVDnLFX!LwC$tS0opR7A0RI=J9yVG*6unUHLg?
za2I5G5Owtf(EbAEI1wp74)o5Fz9s#Ok2ZuUwJ{$>ro1*g-Zlx
zN`rD>I#{KvpYJ}k)OJsdjSMwvr9vhZiv)ZwhtcRMgCu^C2k?Axb
znS>pf1WmYD0*Oc@h!6=w3qbZ)eq}quGHus-u+@FAg$LVl*o#{9Se)y8RR0r8OKr>K
zc%zojW{N4j(O*WFW^*tmdOZd%YwEzaNT+Jz@X(alqU|^(%3HCAC8wB<6S|eRG4>sI
z(iw<3^~GIcBU#9~vnR&Jk4z4G({;)ECMidI
z4l-5vI%KL-2(=+k;S%+Td0}TZB^rHYH{UaLK0%0coA_H&!V}JkR$C>UD?@s+Uk3q#
zUzeP*l&vvBzF=wPb*wIaLni!FCF%glFubR<0(b7poOykl(aj)S{0PDt<(B;DZ8;X4gI
z-??fo@^^xpWqFyOg0!fKd3gXa#tbk2OA+^i4Z0Pv-l{O)w&x-cOx0}IX+S`n_HhwR
ziHJJvFcDTL#Q&SIiK`lL7xki3+mj$(rt1$ZUCoEHTyb%>f#Ncd*2Hd{W_fx6@5Grb
z+DNRmxOB5K)-)vifq-PpS)^o2lI)ZEXvp9+*^LpGKf>6!GZ6H-*rUEk*liotg!~qt
z&Fyr#gAuJpw@qgY1dIV|&=~UuTqYxE7!!&RsXietG}=`M!_dj&qrMeEa|qxXI*e9i
zXE6<0N{z6Xb*Hm#@PA0rNRv#}J*pg5bqqUUEPINjUo)5z;a8fAo{UV