diff --git a/CHANGELOG.md b/CHANGELOG.md
index e50720ff721a8d8944a84da86489a0e3c3497cb6..1fdfe2d6bc24e1244fd7c367172db7e2267a1e1f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,7 +17,17 @@
 - No modifications / Keep major and minors versions in sync with all parts of the project
 -->
 
-## 3.2.0 (???)
+
+## 3.3.0 (???)
+
+### ✨ Feature
+- **CLI**: Show an information message when a new version of the CLI is available (and not required)
+
+### 🐛 Bugfix
+- Fix an error when providing template for assignment creation
+
+
+## 3.2.0 (2023-12-19)
 
 ### 🤏 Minor change
 - **Exercices**: Set names of students in exercise name in alphabetical order
diff --git a/ExpressAPI/.env.vault b/ExpressAPI/.env.vault
index 5d19782892be2d4b206459481dc142f69aebb60d..310bae9422161a920952c84428b8aa8ef0e432ab 100644
--- a/ExpressAPI/.env.vault
+++ b/ExpressAPI/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="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"
+DOTENV_VAULT_DEVELOPMENT="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"
 
 # production
-DOTENV_VAULT_PRODUCTION="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"
+DOTENV_VAULT_PRODUCTION="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"
 
 # test
-DOTENV_VAULT_TEST="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"
+DOTENV_VAULT_TEST="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"
 
diff --git a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
index 06c62978c2208dbe211875b1eba9227f3808a4ef..11dfb660040c8790d33da706ee86b3ea635a6aad 100644
--- a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
+++ b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
@@ -1,7 +1,7 @@
 openapi: 3.1.0
 info:
     title: Dojo API
-    version: 3.2.0
+    version: 3.3.0
     description: |
         **Backend API of the Dojo project.**
         
diff --git a/ExpressAPI/assets/assignment_gitlab_ci.yml b/ExpressAPI/assets/assignment_gitlab_ci.yml
index ad20a046e037406773064a11f934ebcf69e42f77..523f7c5f731e63540d3d1a928625600b3e56796f 100644
--- a/ExpressAPI/assets/assignment_gitlab_ci.yml
+++ b/ExpressAPI/assets/assignment_gitlab_ci.yml
@@ -18,7 +18,7 @@ dojo:
     tags:
         - dojo_assignment
     services:
-        - docker:dind
+        - docker:docker:24.0.6-dind
     image:
         name: dojohesso/dojo_assignment_checker:latest
     script:
diff --git a/ExpressAPI/assets/exercise_gitlab_ci.yml b/ExpressAPI/assets/exercise_gitlab_ci.yml
index f658fa51d5b7dd40f4506c417c52da0e6acef99d..27c2bd7e0042707a78822c7815ac2e1cd42dfdf0 100644
--- a/ExpressAPI/assets/exercise_gitlab_ci.yml
+++ b/ExpressAPI/assets/exercise_gitlab_ci.yml
@@ -18,7 +18,7 @@ dojo:
     tags:
         - dojo_exercise
     services:
-        - docker:dind
+        - docker:24.0.6-dind
     image:
         name: dojohesso/dojo_exercise_checker:latest
     script:
diff --git a/ExpressAPI/package-lock.json b/ExpressAPI/package-lock.json
index 7f4321f0646fcdf72220861400cb3bf2dc221dc2..1366d30570499f2c7d25230f52d9dedd9ed7c78b 100644
--- a/ExpressAPI/package-lock.json
+++ b/ExpressAPI/package-lock.json
@@ -1,17 +1,16 @@
 {
     "name": "dojo_backend_api",
-    "version": "3.2.0",
+    "version": "3.3.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "dojo_backend_api",
-            "version": "3.2.0",
+            "version": "3.3.0",
             "license": "AGPLv3",
             "dependencies": {
-                "@prisma/client": "^5.6.0",
-                "ajv": "^8.12.0",
-                "axios": "^1.6.2",
+                "@prisma/client": "^5.8.1",
+                "axios": "^1.6.5",
                 "compression": "^1.7.4",
                 "cors": "^2.8.5",
                 "dotenv": "^16.3.1",
@@ -32,32 +31,34 @@
                 "swagger-ui-express": "^5.0.0",
                 "tar-stream": "^3.1.6",
                 "uuid": "^9.0.1",
-                "winston": "^3.11.0"
+                "winston": "^3.11.0",
+                "zod": "^3.22.4",
+                "zod-validation-error": "^3.0.0"
             },
             "devDependencies": {
-                "@redocly/cli": "^1.5.0",
+                "@redocly/cli": "^1.6.0",
                 "@types/compression": "^1.7.5",
                 "@types/cors": "^2.8.17",
                 "@types/express": "^4.17.21",
                 "@types/jsonwebtoken": "^9.0.5",
                 "@types/morgan": "^1.9.9",
                 "@types/multer": "^1.4.11",
-                "@types/node": "^20.10.3",
+                "@types/node": "^20.11.5",
                 "@types/parse-link-header": "^2.0.3",
                 "@types/semver": "^7.5.6",
                 "@types/swagger-ui-express": "^4.1.6",
                 "@types/tar-stream": "^3.1.3",
                 "@types/uuid": "^9.0.7",
-                "@typescript-eslint/eslint-plugin": "^6.13.2",
-                "@typescript-eslint/parser": "^6.13.2",
+                "@typescript-eslint/eslint-plugin": "^6.18.1",
+                "@typescript-eslint/parser": "^6.18.1",
                 "dotenv-cli": "^7.3.0",
                 "dotenv-vault": "^1.25.0",
-                "genversion": "^3.1.1",
-                "nodemon": "^3.0.2",
-                "npm": "^10.2.4",
-                "prisma": "^5.6.0",
-                "ts-node": "^10.9.1",
-                "typescript": "^5.3.2"
+                "genversion": "^3.2.0",
+                "nodemon": "^3.0.3",
+                "npm": "^10.3.0",
+                "prisma": "^5.8.1",
+                "ts-node": "^10.9.2",
+                "typescript": "^5.3.3"
             }
         },
         "node_modules/@aashutoshrathi/word-wrap": {
@@ -71,9 +72,9 @@
             }
         },
         "node_modules/@babel/runtime": {
-            "version": "7.23.5",
-            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz",
-            "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==",
+            "version": "7.23.8",
+            "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+            "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
             "dev": true,
             "dependencies": {
                 "regenerator-runtime": "^0.14.0"
@@ -128,9 +129,9 @@
             "dev": true
         },
         "node_modules/@emotion/unitless": {
-            "version": "0.8.1",
-            "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz",
-            "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==",
+            "version": "0.8.0",
+            "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
+            "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==",
             "dev": true
         },
         "node_modules/@eslint-community/eslint-utils": {
@@ -181,23 +182,6 @@
                 "url": "https://opencollective.com/eslint"
             }
         },
-        "node_modules/@eslint/eslintrc/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,
-            "peer": 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/@eslint/eslintrc/node_modules/brace-expansion": {
             "version": "1.1.11",
             "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -209,13 +193,6 @@
                 "concat-map": "0.0.1"
             }
         },
-        "node_modules/@eslint/eslintrc/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,
-            "peer": true
-        },
         "node_modules/@eslint/eslintrc/node_modules/minimatch": {
             "version": "3.1.2",
             "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -230,9 +207,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "8.55.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
-            "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
+            "version": "8.56.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz",
+            "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==",
             "dev": true,
             "peer": true,
             "engines": {
@@ -246,14 +223,14 @@
             "dev": true
         },
         "node_modules/@humanwhocodes/config-array": {
-            "version": "0.11.13",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
-            "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+            "version": "0.11.14",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz",
+            "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==",
             "dev": true,
             "peer": true,
             "dependencies": {
-                "@humanwhocodes/object-schema": "^2.0.1",
-                "debug": "^4.1.1",
+                "@humanwhocodes/object-schema": "^2.0.2",
+                "debug": "^4.3.1",
                 "minimatch": "^3.0.5"
             },
             "engines": {
@@ -299,9 +276,9 @@
             }
         },
         "node_modules/@humanwhocodes/object-schema": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
-            "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz",
+            "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==",
             "dev": true,
             "peer": true
         },
@@ -752,13 +729,10 @@
             }
         },
         "node_modules/@prisma/client": {
-            "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz",
-            "integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==",
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.8.1.tgz",
+            "integrity": "sha512-xQtMPfbIwLlbm0VVIVQY2yqQVOxPwRQhvIp7Z3m2900g1bu/zRHKhYZJQWELqmjl6d8YwBy0K2NvMqh47v1ubw==",
             "hasInstallScript": true,
-            "dependencies": {
-                "@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee"
-            },
             "engines": {
                 "node": ">=16.13"
             },
@@ -771,17 +745,50 @@
                 }
             }
         },
+        "node_modules/@prisma/debug": {
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.8.1.tgz",
+            "integrity": "sha512-tjuw7eA0Us3T42jx9AmAgL58rzwzpFGYc3R7Y4Ip75EBYrKMBA1YihuWMcBC92ILmjlQ/u3p8VxcIE0hr+fZfg==",
+            "devOptional": true
+        },
         "node_modules/@prisma/engines": {
-            "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz",
-            "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==",
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.8.1.tgz",
+            "integrity": "sha512-TJgYLRrZr56uhqcXO4GmP5be+zjCIHtLDK20Cnfg+o9d905hsN065QOL+3Z0zQAy6YD31Ol4u2kzSfRmbJv/uA==",
             "devOptional": true,
-            "hasInstallScript": true
+            "hasInstallScript": true,
+            "dependencies": {
+                "@prisma/debug": "5.8.1",
+                "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2",
+                "@prisma/fetch-engine": "5.8.1",
+                "@prisma/get-platform": "5.8.1"
+            }
         },
         "node_modules/@prisma/engines-version": {
-            "version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee",
-            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz",
-            "integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw=="
+            "version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2",
+            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2.tgz",
+            "integrity": "sha512-f5C3JM3l9yhGr3cr4FMqWloFaSCpNpMi58Om22rjD2DOz3owci2mFdFXMgnAGazFPKrCbbEhcxdsRfspEYRoFQ==",
+            "devOptional": true
+        },
+        "node_modules/@prisma/fetch-engine": {
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.8.1.tgz",
+            "integrity": "sha512-+bgjjoSFa6uYEbAPlklfoVSStOEfcpheOjoBoNsNNSQdSzcwE2nM4Q0prun0+P8/0sCHo18JZ9xqa8gObvgOUw==",
+            "devOptional": true,
+            "dependencies": {
+                "@prisma/debug": "5.8.1",
+                "@prisma/engines-version": "5.8.1-1.78caf6feeaed953168c64e15a249c3e9a033ebe2",
+                "@prisma/get-platform": "5.8.1"
+            }
+        },
+        "node_modules/@prisma/get-platform": {
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.8.1.tgz",
+            "integrity": "sha512-wnA+6HTFcY+tkykMokix9GiAkaauPC5W/gg0O5JB0J8tCTNWrqpnQ7AsaGRfkYUbeOIioh6woDjQrGTTRf1Zag==",
+            "devOptional": true,
+            "dependencies": {
+                "@prisma/debug": "5.8.1"
+            }
         },
         "node_modules/@redocly/ajv": {
             "version": "8.11.0",
@@ -800,12 +807,12 @@
             }
         },
         "node_modules/@redocly/cli": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.5.0.tgz",
-            "integrity": "sha512-2E6yhYIs/dj6pFM9ahzuyI4AzFOjmOK1dkwYCtTWT1w5kROlW4HVVgHrxnOIUupRDTD5TdScWSH28n2U1VivWQ==",
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/@redocly/cli/-/cli-1.6.0.tgz",
+            "integrity": "sha512-0naVFJGR2tVcpMIHSFRr2HAoyy70qMqDAP6kXcnOdkGkwLRJ8s/5n1STwsym/yZwNkhrt2M0cKT6KAMlTUeCeg==",
             "dev": true,
             "dependencies": {
-                "@redocly/openapi-core": "1.5.0",
+                "@redocly/openapi-core": "1.6.0",
                 "chokidar": "^3.5.1",
                 "colorette": "^1.2.0",
                 "core-js": "^3.32.1",
@@ -832,9 +839,9 @@
             }
         },
         "node_modules/@redocly/openapi-core": {
-            "version": "1.5.0",
-            "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.5.0.tgz",
-            "integrity": "sha512-AnDLoDl1+a7mZO4+lx0KG8zH04BQx4ez6yh403PuNl9/0ygbicPPc9QG/y0/0OImChOA+knKLpJazNFjzhOAeg==",
+            "version": "1.6.0",
+            "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.6.0.tgz",
+            "integrity": "sha512-oao6Aey4peLKfagzWGb6N7OBI6CoDWEP4ka/XjrUNZw+UoKVVg3hVBXW4Vr3CJ2O8j6wEa2i+Lbb92VQQsoxwg==",
             "dev": true,
             "dependencies": {
                 "@redocly/ajv": "^8.11.0",
@@ -999,9 +1006,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "20.10.3",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.3.tgz",
-            "integrity": "sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==",
+            "version": "20.11.5",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.5.tgz",
+            "integrity": "sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==",
             "dev": true,
             "dependencies": {
                 "undici-types": "~5.26.4"
@@ -1014,9 +1021,9 @@
             "dev": true
         },
         "node_modules/@types/qs": {
-            "version": "6.9.10",
-            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
-            "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
+            "version": "6.9.11",
+            "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz",
+            "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==",
             "dev": true
         },
         "node_modules/@types/range-parser": {
@@ -1053,9 +1060,9 @@
             }
         },
         "node_modules/@types/stylis": {
-            "version": "4.2.4",
-            "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.4.tgz",
-            "integrity": "sha512-36ZrGJ8fgtBr6nwNnuJ9jXIj+bn/pF6UoqmrQT7+Y99+tFFeHHsoR54+194dHdyhPjgbeoNz3Qru0oRt0l6ASQ==",
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz",
+            "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==",
             "dev": true
         },
         "node_modules/@types/swagger-ui-express": {
@@ -1089,16 +1096,16 @@
             "dev": true
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.13.2.tgz",
-            "integrity": "sha512-3+9OGAWHhk4O1LlcwLBONbdXsAhLjyCFogJY/cWy2lxdVJ2JrcTF2pTGMaLl2AE7U1l31n8Py4a8bx5DLf/0dQ==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.19.0.tgz",
+            "integrity": "sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==",
             "dev": true,
             "dependencies": {
                 "@eslint-community/regexpp": "^4.5.1",
-                "@typescript-eslint/scope-manager": "6.13.2",
-                "@typescript-eslint/type-utils": "6.13.2",
-                "@typescript-eslint/utils": "6.13.2",
-                "@typescript-eslint/visitor-keys": "6.13.2",
+                "@typescript-eslint/scope-manager": "6.19.0",
+                "@typescript-eslint/type-utils": "6.19.0",
+                "@typescript-eslint/utils": "6.19.0",
+                "@typescript-eslint/visitor-keys": "6.19.0",
                 "debug": "^4.3.4",
                 "graphemer": "^1.4.0",
                 "ignore": "^5.2.4",
@@ -1124,15 +1131,15 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.13.2.tgz",
-            "integrity": "sha512-MUkcC+7Wt/QOGeVlM8aGGJZy1XV5YKjTpq9jK6r6/iLsGXhBVaGP5N0UYvFsu9BFlSpwY9kMretzdBH01rkRXg==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.19.0.tgz",
+            "integrity": "sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/scope-manager": "6.13.2",
-                "@typescript-eslint/types": "6.13.2",
-                "@typescript-eslint/typescript-estree": "6.13.2",
-                "@typescript-eslint/visitor-keys": "6.13.2",
+                "@typescript-eslint/scope-manager": "6.19.0",
+                "@typescript-eslint/types": "6.19.0",
+                "@typescript-eslint/typescript-estree": "6.19.0",
+                "@typescript-eslint/visitor-keys": "6.19.0",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -1152,13 +1159,13 @@
             }
         },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.13.2.tgz",
-            "integrity": "sha512-CXQA0xo7z6x13FeDYCgBkjWzNqzBn8RXaE3QVQVIUm74fWJLkJkaHmHdKStrxQllGh6Q4eUGyNpMe0b1hMkXFA==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.19.0.tgz",
+            "integrity": "sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "6.13.2",
-                "@typescript-eslint/visitor-keys": "6.13.2"
+                "@typescript-eslint/types": "6.19.0",
+                "@typescript-eslint/visitor-keys": "6.19.0"
             },
             "engines": {
                 "node": "^16.0.0 || >=18.0.0"
@@ -1169,13 +1176,13 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.13.2.tgz",
-            "integrity": "sha512-Qr6ssS1GFongzH2qfnWKkAQmMUyZSyOr0W54nZNU1MDfo+U4Mv3XveeLZzadc/yq8iYhQZHYT+eoXJqnACM1tw==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.19.0.tgz",
+            "integrity": "sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "6.13.2",
-                "@typescript-eslint/utils": "6.13.2",
+                "@typescript-eslint/typescript-estree": "6.19.0",
+                "@typescript-eslint/utils": "6.19.0",
                 "debug": "^4.3.4",
                 "ts-api-utils": "^1.0.1"
             },
@@ -1196,9 +1203,9 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz",
-            "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.19.0.tgz",
+            "integrity": "sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==",
             "dev": true,
             "engines": {
                 "node": "^16.0.0 || >=18.0.0"
@@ -1209,16 +1216,17 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz",
-            "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.19.0.tgz",
+            "integrity": "sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "6.13.2",
-                "@typescript-eslint/visitor-keys": "6.13.2",
+                "@typescript-eslint/types": "6.19.0",
+                "@typescript-eslint/visitor-keys": "6.19.0",
                 "debug": "^4.3.4",
                 "globby": "^11.1.0",
                 "is-glob": "^4.0.3",
+                "minimatch": "9.0.3",
                 "semver": "^7.5.4",
                 "ts-api-utils": "^1.0.1"
             },
@@ -1235,18 +1243,33 @@
                 }
             }
         },
+        "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+            "version": "9.0.3",
+            "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+            "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+            "dev": true,
+            "dependencies": {
+                "brace-expansion": "^2.0.1"
+            },
+            "engines": {
+                "node": ">=16 || 14 >=14.17"
+            },
+            "funding": {
+                "url": "https://github.com/sponsors/isaacs"
+            }
+        },
         "node_modules/@typescript-eslint/utils": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.13.2.tgz",
-            "integrity": "sha512-b9Ptq4eAZUym4idijCRzl61oPCwwREcfDI8xGk751Vhzig5fFZR9CyzDz4Sp/nxSLBYxUPyh4QdIDqWykFhNmQ==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.19.0.tgz",
+            "integrity": "sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==",
             "dev": true,
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
                 "@types/json-schema": "^7.0.12",
                 "@types/semver": "^7.5.0",
-                "@typescript-eslint/scope-manager": "6.13.2",
-                "@typescript-eslint/types": "6.13.2",
-                "@typescript-eslint/typescript-estree": "6.13.2",
+                "@typescript-eslint/scope-manager": "6.19.0",
+                "@typescript-eslint/types": "6.19.0",
+                "@typescript-eslint/typescript-estree": "6.19.0",
                 "semver": "^7.5.4"
             },
             "engines": {
@@ -1261,12 +1284,12 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "6.13.2",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz",
-            "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==",
+            "version": "6.19.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.19.0.tgz",
+            "integrity": "sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==",
             "dev": true,
             "dependencies": {
-                "@typescript-eslint/types": "6.13.2",
+                "@typescript-eslint/types": "6.19.0",
                 "eslint-visitor-keys": "^3.4.1"
             },
             "engines": {
@@ -1303,9 +1326,9 @@
             }
         },
         "node_modules/acorn": {
-            "version": "8.11.2",
-            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
-            "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+            "version": "8.11.3",
+            "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+            "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
             "dev": true,
             "bin": {
                 "acorn": "bin/acorn"
@@ -1325,22 +1348,24 @@
             }
         },
         "node_modules/acorn-walk": {
-            "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
-            "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
+            "version": "8.3.2",
+            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+            "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
             "dev": true,
             "engines": {
                 "node": ">=0.4.0"
             }
         },
         "node_modules/ajv": {
-            "version": "8.12.0",
-            "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-            "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+            "version": "6.12.6",
+            "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+            "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+            "dev": true,
+            "peer": true,
             "dependencies": {
                 "fast-deep-equal": "^3.1.1",
-                "json-schema-traverse": "^1.0.0",
-                "require-from-string": "^2.0.2",
+                "fast-json-stable-stringify": "^2.0.0",
+                "json-schema-traverse": "^0.4.1",
                 "uri-js": "^4.2.2"
             },
             "funding": {
@@ -1348,6 +1373,13 @@
                 "url": "https://github.com/sponsors/epoberezkin"
             }
         },
+        "node_modules/ajv/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,
+            "peer": true
+        },
         "node_modules/ansi-escapes": {
             "version": "4.3.2",
             "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
@@ -1466,11 +1498,11 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.6.2",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
-            "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
+            "version": "1.6.5",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+            "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
             "dependencies": {
-                "follow-redirects": "^1.15.0",
+                "follow-redirects": "^1.15.4",
                 "form-data": "^4.0.0",
                 "proxy-from-env": "^1.1.0"
             }
@@ -1805,9 +1837,9 @@
             "dev": true
         },
         "node_modules/classnames": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
-            "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==",
+            "version": "2.5.1",
+            "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz",
+            "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==",
             "dev": true
         },
         "node_modules/clean-stack": {
@@ -2095,9 +2127,9 @@
             "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
         },
         "node_modules/core-js": {
-            "version": "3.33.3",
-            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.3.tgz",
-            "integrity": "sha512-lo0kOocUlLKmm6kv/FswQL8zbkH7mVsLJ/FULClOhv8WRVmKLVcs6XPNQAzstfeJTCHMyButEwG+z1kHxHoDZw==",
+            "version": "3.35.0",
+            "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.0.tgz",
+            "integrity": "sha512-ntakECeqg81KqMueeGJ79Q5ZgQNR+6eaE8sxGCx62zMbAIj65q+uYvatToew3m6eAGdU4gNZwpZ34NMe4GYswg==",
             "dev": true,
             "hasInstallScript": true,
             "funding": {
@@ -2452,16 +2484,16 @@
             }
         },
         "node_modules/eslint": {
-            "version": "8.55.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
-            "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
+            "version": "8.56.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz",
+            "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==",
             "dev": true,
             "peer": true,
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.6.1",
                 "@eslint/eslintrc": "^2.1.4",
-                "@eslint/js": "8.55.0",
+                "@eslint/js": "8.56.0",
                 "@humanwhocodes/config-array": "^0.11.13",
                 "@humanwhocodes/module-importer": "^1.0.1",
                 "@nodelib/fs.walk": "^1.2.8",
@@ -2536,23 +2568,6 @@
                 "url": "https://opencollective.com/eslint"
             }
         },
-        "node_modules/eslint/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,
-            "peer": 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/eslint/node_modules/brace-expansion": {
             "version": "1.1.11",
             "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2577,13 +2592,6 @@
                 "node": ">=10.13.0"
             }
         },
-        "node_modules/eslint/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,
-            "peer": true
-        },
         "node_modules/eslint/node_modules/minimatch": {
             "version": "3.1.2",
             "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -2790,7 +2798,8 @@
         "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=="
+            "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+            "dev": true
         },
         "node_modules/fast-fifo": {
             "version": "1.3.2",
@@ -2845,9 +2854,9 @@
             }
         },
         "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==",
+            "version": "1.16.0",
+            "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
+            "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
             "dev": true,
             "dependencies": {
                 "reusify": "^1.0.4"
@@ -3009,9 +3018,9 @@
             "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
         },
         "node_modules/follow-redirects": {
-            "version": "1.15.3",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
-            "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
+            "version": "1.15.5",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+            "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
             "funding": [
                 {
                     "type": "individual",
@@ -3112,12 +3121,13 @@
             }
         },
         "node_modules/genversion": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/genversion/-/genversion-3.1.1.tgz",
-            "integrity": "sha512-/H861PMsihhjgX2qqhTN8egM11V04imhA+3JRFY3jjPua2Sy1NqaqqQPjSP8rdM9jZoKpFhVj9g3Fs9XPCjBYQ==",
+            "version": "3.2.0",
+            "resolved": "https://registry.npmjs.org/genversion/-/genversion-3.2.0.tgz",
+            "integrity": "sha512-OIYSX6XYA8PHecLDCTri30hadSZfAjZ8Iq1+BBDXqLWP4dRLuJNLoNjsSWtTpw97IccK2LDWzkEstxAB8GdN7g==",
             "dev": true,
             "dependencies": {
                 "commander": "^7.2.0",
+                "ejs": "^3.1.9",
                 "find-package": "^1.0.0"
             },
             "bin": {
@@ -3160,9 +3170,9 @@
             }
         },
         "node_modules/get-port-please": {
-            "version": "3.1.1",
-            "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.1.tgz",
-            "integrity": "sha512-3UBAyM3u4ZBVYDsxOQfJDxEa6XTbpBDrOjp4mf7ExFRt5BKs/QywQQiJsh2B+hxcZLSapWqCRvElUe8DnKcFHA==",
+            "version": "3.1.2",
+            "resolved": "https://registry.npmjs.org/get-port-please/-/get-port-please-3.1.2.tgz",
+            "integrity": "sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==",
             "dev": true
         },
         "node_modules/glob": {
@@ -3220,9 +3230,9 @@
             }
         },
         "node_modules/globals": {
-            "version": "13.23.0",
-            "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
-            "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+            "version": "13.24.0",
+            "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+            "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
             "dev": true,
             "peer": true,
             "dependencies": {
@@ -3808,7 +3818,8 @@
         "node_modules/json-schema-traverse": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
-            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+            "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+            "dev": true
         },
         "node_modules/json-stable-stringify-without-jsonify": {
             "version": "1.0.1",
@@ -4486,9 +4497,9 @@
             }
         },
         "node_modules/nodemon": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz",
-            "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.3.tgz",
+            "integrity": "sha512-7jH/NXbFPxVaMwmBCC2B9F/V6X1VkEdNgx3iu9jji8WxWcvhMWkmhNWhI5077zknOnZnBzba9hZP6bCPJLSReQ==",
             "dev": true,
             "dependencies": {
                 "chokidar": "^3.5.2",
@@ -4581,9 +4592,9 @@
             }
         },
         "node_modules/npm": {
-            "version": "10.2.4",
-            "resolved": "https://registry.npmjs.org/npm/-/npm-10.2.4.tgz",
-            "integrity": "sha512-umEuYneVEYO9KoEEI8n2sSGmNQeqco/3BSeacRlqIkCzw4E7XGtYSWMeJobxzr6hZ2n9cM+u5TsMTcC5bAgoWA==",
+            "version": "10.3.0",
+            "resolved": "https://registry.npmjs.org/npm/-/npm-10.3.0.tgz",
+            "integrity": "sha512-9u5GFc1UqI2DLlGI7QdjkpIaBs3UhTtY8KoCqYJK24gV/j/tByaI4BA4R7RkOc+ASqZMzFPKt4Pj2Z8JcGo//A==",
             "bundleDependencies": [
                 "@isaacs/string-locale-compare",
                 "@npmcli/arborist",
@@ -4665,12 +4676,12 @@
                 "@npmcli/fs": "^3.1.0",
                 "@npmcli/map-workspaces": "^3.0.4",
                 "@npmcli/package-json": "^5.0.0",
-                "@npmcli/promise-spawn": "^7.0.0",
-                "@npmcli/run-script": "^7.0.2",
+                "@npmcli/promise-spawn": "^7.0.1",
+                "@npmcli/run-script": "^7.0.3",
                 "@sigstore/tuf": "^2.2.0",
                 "abbrev": "^2.0.0",
                 "archy": "~1.0.0",
-                "cacache": "^18.0.0",
+                "cacache": "^18.0.2",
                 "chalk": "^5.3.0",
                 "ci-info": "^4.0.0",
                 "cli-columns": "^4.0.0",
@@ -4684,7 +4695,7 @@
                 "ini": "^4.1.1",
                 "init-package-json": "^6.0.0",
                 "is-cidr": "^5.0.3",
-                "json-parse-even-better-errors": "^3.0.0",
+                "json-parse-even-better-errors": "^3.0.1",
                 "libnpmaccess": "^8.0.1",
                 "libnpmdiff": "^6.0.3",
                 "libnpmexec": "^7.0.4",
@@ -4713,7 +4724,7 @@
                 "npm-user-validate": "^2.0.0",
                 "npmlog": "^7.0.1",
                 "p-map": "^4.0.0",
-                "pacote": "^17.0.4",
+                "pacote": "^17.0.5",
                 "parse-conflict-json": "^3.0.1",
                 "proc-log": "^3.0.0",
                 "qrcode-terminal": "^0.12.0",
@@ -4812,7 +4823,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/arborist": {
-            "version": "7.2.1",
+            "version": "7.3.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -4859,7 +4870,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/config": {
-            "version": "8.0.2",
+            "version": "8.1.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -4917,7 +4928,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/git": {
-            "version": "5.0.3",
+            "version": "5.0.4",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5018,7 +5029,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/promise-spawn": {
-            "version": "7.0.0",
+            "version": "7.0.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5042,7 +5053,7 @@
             }
         },
         "node_modules/npm/node_modules/@npmcli/run-script": {
-            "version": "7.0.2",
+            "version": "7.0.3",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5146,18 +5157,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/abort-controller": {
-            "version": "3.0.0",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "event-target-shim": "^5.0.0"
-            },
-            "engines": {
-                "node": ">=6.5"
-            }
-        },
         "node_modules/npm/node_modules/agent-base": {
             "version": "7.1.0",
             "dev": true,
@@ -5220,14 +5219,10 @@
             "license": "MIT"
         },
         "node_modules/npm/node_modules/are-we-there-yet": {
-            "version": "4.0.1",
+            "version": "4.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "delegates": "^1.0.0",
-                "readable-stream": "^4.1.0"
-            },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
@@ -5238,26 +5233,6 @@
             "inBundle": true,
             "license": "MIT"
         },
-        "node_modules/npm/node_modules/base64-js": {
-            "version": "1.5.1",
-            "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"
-                }
-            ],
-            "inBundle": true,
-            "license": "MIT"
-        },
         "node_modules/npm/node_modules/bin-links": {
             "version": "4.0.3",
             "dev": true,
@@ -5291,30 +5266,6 @@
                 "balanced-match": "^1.0.0"
             }
         },
-        "node_modules/npm/node_modules/buffer": {
-            "version": "6.0.3",
-            "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"
-                }
-            ],
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "base64-js": "^1.3.1",
-                "ieee754": "^1.2.1"
-            }
-        },
         "node_modules/npm/node_modules/builtins": {
             "version": "5.0.1",
             "dev": true,
@@ -5325,7 +5276,7 @@
             }
         },
         "node_modules/npm/node_modules/cacache": {
-            "version": "18.0.0",
+            "version": "18.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -5335,7 +5286,7 @@
                 "glob": "^10.2.2",
                 "lru-cache": "^10.0.1",
                 "minipass": "^7.0.3",
-                "minipass-collect": "^1.0.2",
+                "minipass-collect": "^2.0.1",
                 "minipass-flush": "^1.0.5",
                 "minipass-pipeline": "^1.2.4",
                 "p-map": "^4.0.0",
@@ -5620,12 +5571,6 @@
                 "url": "https://github.com/sponsors/sindresorhus"
             }
         },
-        "node_modules/npm/node_modules/delegates": {
-            "version": "1.0.0",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT"
-        },
         "node_modules/npm/node_modules/diff": {
             "version": "5.1.0",
             "dev": true,
@@ -5672,24 +5617,6 @@
             "inBundle": true,
             "license": "MIT"
         },
-        "node_modules/npm/node_modules/event-target-shim": {
-            "version": "5.0.1",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=6"
-            }
-        },
-        "node_modules/npm/node_modules/events": {
-            "version": "3.3.0",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.8.x"
-            }
-        },
         "node_modules/npm/node_modules/exponential-backoff": {
             "version": "3.1.1",
             "dev": true,
@@ -5885,28 +5812,8 @@
                 "node": ">=0.10.0"
             }
         },
-        "node_modules/npm/node_modules/ieee754": {
-            "version": "1.2.1",
-            "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"
-                }
-            ],
-            "inBundle": true,
-            "license": "BSD-3-Clause"
-        },
         "node_modules/npm/node_modules/ignore-walk": {
-            "version": "6.0.3",
+            "version": "6.0.4",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6044,7 +5951,7 @@
             }
         },
         "node_modules/npm/node_modules/json-parse-even-better-errors": {
-            "version": "3.0.0",
+            "version": "3.0.1",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
@@ -6083,7 +5990,7 @@
             "license": "MIT"
         },
         "node_modules/npm/node_modules/libnpmaccess": {
-            "version": "8.0.1",
+            "version": "8.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6096,7 +6003,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmdiff": {
-            "version": "6.0.3",
+            "version": "6.0.5",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6116,7 +6023,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmexec": {
-            "version": "7.0.4",
+            "version": "7.0.6",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6138,7 +6045,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmfund": {
-            "version": "5.0.1",
+            "version": "5.0.3",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6150,7 +6057,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmhook": {
-            "version": "10.0.0",
+            "version": "10.0.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6163,7 +6070,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmorg": {
-            "version": "6.0.1",
+            "version": "6.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6176,7 +6083,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmpack": {
-            "version": "6.0.3",
+            "version": "6.0.5",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6191,7 +6098,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmpublish": {
-            "version": "9.0.2",
+            "version": "9.0.3",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6210,7 +6117,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmsearch": {
-            "version": "7.0.0",
+            "version": "7.0.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6222,7 +6129,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmteam": {
-            "version": "6.0.0",
+            "version": "6.0.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6235,7 +6142,7 @@
             }
         },
         "node_modules/npm/node_modules/libnpmversion": {
-            "version": "5.0.1",
+            "version": "5.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6251,13 +6158,10 @@
             }
         },
         "node_modules/npm/node_modules/lru-cache": {
-            "version": "10.0.2",
+            "version": "10.1.0",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
-            "dependencies": {
-                "semver": "^7.3.5"
-            },
             "engines": {
                 "node": "14 || >=16.14"
             }
@@ -6309,27 +6213,15 @@
             }
         },
         "node_modules/npm/node_modules/minipass-collect": {
-            "version": "1.0.2",
-            "dev": true,
-            "inBundle": true,
-            "license": "ISC",
-            "dependencies": {
-                "minipass": "^3.0.0"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/npm/node_modules/minipass-collect/node_modules/minipass": {
-            "version": "3.3.6",
+            "version": "2.0.1",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "yallist": "^4.0.0"
+                "minipass": "^7.0.3"
             },
             "engines": {
-                "node": ">=8"
+                "node": ">=16 || 14 >=14.17"
             }
         },
         "node_modules/npm/node_modules/minipass-fetch": {
@@ -6616,12 +6508,12 @@
             }
         },
         "node_modules/npm/node_modules/npm-packlist": {
-            "version": "8.0.0",
+            "version": "8.0.2",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
             "dependencies": {
-                "ignore-walk": "^6.0.0"
+                "ignore-walk": "^6.0.4"
             },
             "engines": {
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -6713,7 +6605,7 @@
             }
         },
         "node_modules/npm/node_modules/pacote": {
-            "version": "17.0.4",
+            "version": "17.0.5",
             "dev": true,
             "inBundle": true,
             "license": "ISC",
@@ -6784,7 +6676,7 @@
             }
         },
         "node_modules/npm/node_modules/postcss-selector-parser": {
-            "version": "6.0.13",
+            "version": "6.0.15",
             "dev": true,
             "inBundle": true,
             "license": "MIT",
@@ -6805,15 +6697,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/process": {
-            "version": "0.11.10",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">= 0.6.0"
-            }
-        },
         "node_modules/npm/node_modules/promise-all-reject-late": {
             "version": "1.0.1",
             "dev": true,
@@ -6920,22 +6803,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/readable-stream": {
-            "version": "4.4.2",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "abort-controller": "^3.0.0",
-                "buffer": "^6.0.3",
-                "events": "^3.3.0",
-                "process": "^0.11.10",
-                "string_decoder": "^1.3.0"
-            },
-            "engines": {
-                "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
-            }
-        },
         "node_modules/npm/node_modules/retry": {
             "version": "0.12.0",
             "dev": true,
@@ -6945,26 +6812,6 @@
                 "node": ">= 4"
             }
         },
-        "node_modules/npm/node_modules/safe-buffer": {
-            "version": "5.2.1",
-            "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"
-                }
-            ],
-            "inBundle": true,
-            "license": "MIT"
-        },
         "node_modules/npm/node_modules/safer-buffer": {
             "version": "2.1.2",
             "dev": true,
@@ -7135,15 +6982,6 @@
                 "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
             }
         },
-        "node_modules/npm/node_modules/string_decoder": {
-            "version": "1.3.0",
-            "dev": true,
-            "inBundle": true,
-            "license": "MIT",
-            "dependencies": {
-                "safe-buffer": "~5.2.0"
-            }
-        },
         "node_modules/npm/node_modules/string-width": {
             "version": "4.2.3",
             "dev": true,
@@ -7971,9 +7809,9 @@
             }
         },
         "node_modules/postcss": {
-            "version": "8.4.32",
-            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
-            "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
+            "version": "8.4.31",
+            "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
+            "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
             "dev": true,
             "funding": [
                 {
@@ -7990,7 +7828,7 @@
                 }
             ],
             "dependencies": {
-                "nanoid": "^3.3.7",
+                "nanoid": "^3.3.6",
                 "picocolors": "^1.0.0",
                 "source-map-js": "^1.0.2"
             },
@@ -8015,13 +7853,13 @@
             }
         },
         "node_modules/prisma": {
-            "version": "5.6.0",
-            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz",
-            "integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==",
+            "version": "5.8.1",
+            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.8.1.tgz",
+            "integrity": "sha512-N6CpjzECnUHZ5beeYpDzkt2rYpEdAeqXX2dweu6BoQaeYkNZrC/WJHM+5MO/uidFHTak8QhkPKBWck1o/4MD4A==",
             "devOptional": true,
             "hasInstallScript": true,
             "dependencies": {
-                "@prisma/engines": "5.6.0"
+                "@prisma/engines": "5.8.1"
             },
             "bin": {
                 "prisma": "build/index.js"
@@ -8092,6 +7930,7 @@
             "version": "2.3.1",
             "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
             "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+            "dev": true,
             "engines": {
                 "node": ">=6"
             }
@@ -8303,9 +8142,9 @@
             }
         },
         "node_modules/regenerator-runtime": {
-            "version": "0.14.0",
-            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
-            "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==",
+            "version": "0.14.1",
+            "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+            "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
             "dev": true
         },
         "node_modules/require-directory": {
@@ -8321,6 +8160,7 @@
             "version": "2.0.2",
             "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
             "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+            "dev": true,
             "engines": {
                 "node": ">=0.10.0"
             }
@@ -8512,14 +8352,15 @@
             }
         },
         "node_modules/set-function-length": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
-            "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+            "version": "1.2.0",
+            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz",
+            "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
             "dependencies": {
                 "define-data-property": "^1.1.1",
-                "get-intrinsic": "^1.2.1",
+                "function-bind": "^1.1.2",
+                "get-intrinsic": "^1.2.2",
                 "gopd": "^1.0.1",
-                "has-property-descriptors": "^1.0.0"
+                "has-property-descriptors": "^1.0.1"
             },
             "engines": {
                 "node": ">= 0.4"
@@ -8794,9 +8635,9 @@
             }
         },
         "node_modules/streamx": {
-            "version": "2.15.5",
-            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz",
-            "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==",
+            "version": "2.15.6",
+            "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz",
+            "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==",
             "dependencies": {
                 "fast-fifo": "^1.1.0",
                 "queue-tick": "^1.0.1"
@@ -8850,20 +8691,20 @@
             }
         },
         "node_modules/styled-components": {
-            "version": "6.1.1",
-            "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.1.tgz",
-            "integrity": "sha512-cpZZP5RrKRIClBW5Eby4JM1wElLVP4NQrJbJ0h10TidTyJf4SIIwa3zLXOoPb4gJi8MsJ8mjq5mu2IrEhZIAcQ==",
+            "version": "6.1.8",
+            "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.8.tgz",
+            "integrity": "sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==",
             "dev": true,
             "dependencies": {
-                "@emotion/is-prop-valid": "^1.2.1",
-                "@emotion/unitless": "^0.8.0",
-                "@types/stylis": "^4.0.2",
-                "css-to-react-native": "^3.2.0",
-                "csstype": "^3.1.2",
-                "postcss": "^8.4.31",
-                "shallowequal": "^1.1.0",
-                "stylis": "^4.3.0",
-                "tslib": "^2.5.0"
+                "@emotion/is-prop-valid": "1.2.1",
+                "@emotion/unitless": "0.8.0",
+                "@types/stylis": "4.2.0",
+                "css-to-react-native": "3.2.0",
+                "csstype": "3.1.2",
+                "postcss": "8.4.31",
+                "shallowequal": "1.1.0",
+                "stylis": "4.3.1",
+                "tslib": "2.5.0"
             },
             "engines": {
                 "node": ">= 16"
@@ -8877,10 +8718,16 @@
                 "react-dom": ">= 16.8.0"
             }
         },
+        "node_modules/styled-components/node_modules/tslib": {
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
+            "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
+            "dev": true
+        },
         "node_modules/stylis": {
-            "version": "4.3.0",
-            "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz",
-            "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==",
+            "version": "4.3.1",
+            "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz",
+            "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==",
             "dev": true
         },
         "node_modules/supports-color": {
@@ -8924,9 +8771,9 @@
             }
         },
         "node_modules/swagger-ui-dist": {
-            "version": "5.10.3",
-            "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.10.3.tgz",
-            "integrity": "sha512-fu3aozjxFWsmcO1vyt1q1Ji2kN7KlTd1vHy27E9WgPyXo9nrEzhQPqgxaAjbMsOmb8XFKNGo4Sa3Q+84Fh+pFw=="
+            "version": "5.11.0",
+            "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.11.0.tgz",
+            "integrity": "sha512-j0PIATqQSEFGOLmiJOJZj1X1Jt6bFIur3JpY7+ghliUnfZs0fpWDdHEkn9q7QUlBtKbkn6TepvSxTqnE8l3s0A=="
         },
         "node_modules/swagger-ui-express": {
             "version": "5.0.0",
@@ -9030,8 +8877,7 @@
             "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,
-            "peer": true
+            "dev": true
         },
         "node_modules/through": {
             "version": "2.3.8",
@@ -9110,9 +8956,9 @@
             }
         },
         "node_modules/ts-node": {
-            "version": "10.9.1",
-            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
-            "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+            "version": "10.9.2",
+            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+            "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
             "dev": true,
             "dependencies": {
                 "@cspotcode/source-map-support": "^0.8.0",
@@ -9213,9 +9059,9 @@
             "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
         },
         "node_modules/typescript": {
-            "version": "5.3.2",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
-            "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
+            "version": "5.3.3",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+            "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
             "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
@@ -9271,6 +9117,7 @@
             "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"
             }
@@ -9575,6 +9422,25 @@
             "funding": {
                 "url": "https://github.com/sponsors/sindresorhus"
             }
+        },
+        "node_modules/zod": {
+            "version": "3.22.4",
+            "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz",
+            "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==",
+            "funding": {
+                "url": "https://github.com/sponsors/colinhacks"
+            }
+        },
+        "node_modules/zod-validation-error": {
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-3.0.0.tgz",
+            "integrity": "sha512-x+agsJJG9rvC7axF0xqTEdZhJkLHyIZkdOAWDJSmwGPzxNHMHwtU6w2yDOAAP6yuSfTAUhAMJRBfhVGY64ySEQ==",
+            "engines": {
+                "node": ">=18.0.0"
+            },
+            "peerDependencies": {
+                "zod": "^3.18.0"
+            }
         }
     }
 }
diff --git a/ExpressAPI/package.json b/ExpressAPI/package.json
index d2e1db43a36aac6028c8580257ede4a577cbb5cb..87fcbb9bf61cb2177f6b855c86df49a122713fbe 100644
--- a/ExpressAPI/package.json
+++ b/ExpressAPI/package.json
@@ -1,7 +1,7 @@
 {
     "name"           : "dojo_backend_api",
     "description"    : "Backend API of the Dojo project",
-    "version"        : "3.2.0",
+    "version"        : "3.3.0",
     "license"        : "AGPLv3",
     "author"         : "Michaël Minelli <dojo@minelli.me>",
     "main"           : "dist/src/app.js",
@@ -28,54 +28,55 @@
         "seed": "node dist/prisma/seed"
     },
     "dependencies"   : {
-        "@prisma/client"    : "^5.6.0",
-        "ajv"               : "^8.12.0",
-        "axios"             : "^1.6.2",
-        "compression"       : "^1.7.4",
-        "cors"              : "^2.8.5",
-        "dotenv"            : "^16.3.1",
-        "dotenv-expand"     : "^10.0.0",
-        "express"           : "^4.18.2",
-        "express-validator" : "^7.0.1",
-        "form-data"         : "^4.0.0",
-        "helmet"            : "^7.1.0",
-        "http-status-codes" : "^2.3.0",
-        "json5"             : "^2.2.3",
-        "jsonwebtoken"      : "^9.0.2",
-        "morgan"            : "^1.10.0",
-        "multer"            : "^1.4.5-lts.1",
-        "mysql"             : "^2.18.1",
-        "node"              : "^20.10.0",
-        "parse-link-header" : "^2.0.0",
-        "semver"            : "^7.5.4",
-        "swagger-ui-express": "^5.0.0",
-        "tar-stream"        : "^3.1.6",
-        "uuid"              : "^9.0.1",
-        "winston"           : "^3.11.0"
+        "@prisma/client"      : "^5.8.1",
+        "axios"               : "^1.6.5",
+        "compression"         : "^1.7.4",
+        "cors"                : "^2.8.5",
+        "dotenv"              : "^16.3.1",
+        "dotenv-expand"       : "^10.0.0",
+        "express"             : "^4.18.2",
+        "express-validator"   : "^7.0.1",
+        "form-data"           : "^4.0.0",
+        "helmet"              : "^7.1.0",
+        "http-status-codes"   : "^2.3.0",
+        "json5"               : "^2.2.3",
+        "jsonwebtoken"        : "^9.0.2",
+        "morgan"              : "^1.10.0",
+        "multer"              : "^1.4.5-lts.1",
+        "mysql"               : "^2.18.1",
+        "node"                : "^20.10.0",
+        "parse-link-header"   : "^2.0.0",
+        "semver"              : "^7.5.4",
+        "swagger-ui-express"  : "^5.0.0",
+        "tar-stream"          : "^3.1.6",
+        "uuid"                : "^9.0.1",
+        "winston"             : "^3.11.0",
+        "zod"                 : "^3.22.4",
+        "zod-validation-error": "^3.0.0"
     },
     "devDependencies": {
-        "@redocly/cli"                    : "^1.5.0",
+        "@redocly/cli"                    : "^1.6.0",
         "@types/compression"              : "^1.7.5",
         "@types/cors"                     : "^2.8.17",
         "@types/express"                  : "^4.17.21",
         "@types/jsonwebtoken"             : "^9.0.5",
         "@types/morgan"                   : "^1.9.9",
         "@types/multer"                   : "^1.4.11",
-        "@types/node"                     : "^20.10.3",
+        "@types/node"                     : "^20.11.5",
         "@types/parse-link-header"        : "^2.0.3",
         "@types/semver"                   : "^7.5.6",
         "@types/swagger-ui-express"       : "^4.1.6",
         "@types/tar-stream"               : "^3.1.3",
         "@types/uuid"                     : "^9.0.7",
-        "@typescript-eslint/eslint-plugin": "^6.13.2",
-        "@typescript-eslint/parser"       : "^6.13.2",
+        "@typescript-eslint/eslint-plugin": "^6.18.1",
+        "@typescript-eslint/parser"       : "^6.18.1",
         "dotenv-cli"                      : "^7.3.0",
         "dotenv-vault"                    : "^1.25.0",
-        "genversion"                      : "^3.1.1",
-        "nodemon"                         : "^3.0.2",
-        "npm"                             : "^10.2.4",
-        "prisma"                          : "^5.6.0",
-        "ts-node"                         : "^10.9.1",
-        "typescript"                      : "^5.3.2"
+        "genversion"                      : "^3.2.0",
+        "nodemon"                         : "^3.0.3",
+        "npm"                             : "^10.3.0",
+        "prisma"                          : "^5.8.1",
+        "ts-node"                         : "^10.9.2",
+        "typescript"                      : "^5.3.3"
     }
 }
diff --git a/ExpressAPI/src/config/Config.ts b/ExpressAPI/src/config/Config.ts
index e3a1b78e2926f988b8a6d61675ea78f570987bc3..ebbad6729d8b9c8c420a7455a42218cd28421a2c 100644
--- a/ExpressAPI/src/config/Config.ts
+++ b/ExpressAPI/src/config/Config.ts
@@ -21,6 +21,11 @@ class Config {
         }
     }; // { version: { CLIENT: CONDITION } }
 
+    public readonly dojoCLI: {
+        versionUpdatePeriodMs: number
+        repositoryId: number
+    };
+
     public readonly jwtConfig: {
         secret: string; expiresIn: number;
     };
@@ -64,6 +69,11 @@ class Config {
 
         this.requestClientValidation = JSON5.parse(process.env.REQUEST_CLIENT_VALIDATION || '{"version": {}}');
 
+        this.dojoCLI = {
+            versionUpdatePeriodMs: Number(process.env.DOJO_CLI_VERSION_UPDATE_PERIOD_MS || 3600),
+            repositoryId         : Number(process.env.DOJO_CLI_GITLAB_REPOSITORY_ID || 0)
+        };
+
         this.jwtConfig = {
             secret   : process.env.JWT_SECRET_KEY || '',
             expiresIn: Number(process.env.SESSION_TIMEOUT || 0)
diff --git a/ExpressAPI/src/express/API.ts b/ExpressAPI/src/express/API.ts
index dcc801cee1bbfd160e60d0f3d8f7f63e70e25acf..0d61b88e4f9d007c26b7d1ef13f98a4fa5ae3e85 100644
--- a/ExpressAPI/src/express/API.ts
+++ b/ExpressAPI/src/express/API.ts
@@ -16,6 +16,7 @@ import compression                    from 'compression';
 import ClientVersionCheckerMiddleware from '../middlewares/ClientVersionCheckerMiddleware';
 import swaggerUi                      from 'swagger-ui-express';
 import path                           from 'path';
+import DojoCliVersionHelper           from '../helpers/DojoCliVersionHelper';
 
 
 class API implements WorkerTask {
@@ -25,7 +26,7 @@ class API implements WorkerTask {
     constructor() {
         this.backend = express();
 
-        this.initSwagger();
+        this.initOpenAPI();
         this.initBaseMiddlewares();
 
         this.backend.use(ClientVersionCheckerMiddleware.register());
@@ -43,9 +44,14 @@ class API implements WorkerTask {
         this.backend.use(helmet()); //Help to secure express, https://helmetjs.github.io/
         this.backend.use(cors()); //Allow CORS requests
         this.backend.use(compression()); //Compress responses
+
+        this.backend.use(async (req, res, next) => {
+            res.header('dojocli-latest-version', await DojoCliVersionHelper.getLatestVersion());
+            next();
+        });
     }
 
-    private initSwagger() {
+    private initOpenAPI() {
         const options = {
             customSiteTitle: 'Dojo API',
             explorer       : false,
diff --git a/ExpressAPI/src/helpers/DojoCliVersionHelper.ts b/ExpressAPI/src/helpers/DojoCliVersionHelper.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a44e1ec54ed64170f491339b5d91f39423372ba6
--- /dev/null
+++ b/ExpressAPI/src/helpers/DojoCliVersionHelper.ts
@@ -0,0 +1,33 @@
+import Config        from '../config/Config';
+import GitlabRelease from '../shared/types/Gitlab/GitlabRelease';
+import GitlabManager from '../managers/GitlabManager';
+
+
+class DojoCliVersionHelper {
+    private latestUpdate: Date | undefined;
+    private latestVersion: string | undefined;
+
+    constructor() { }
+
+    private async updateVersion(): Promise<void> {
+        const releases: Array<GitlabRelease> = await GitlabManager.getRepositoryReleases(Config.dojoCLI.repositoryId);
+        for ( const release of releases ) {
+            if ( !isNaN(+release.tag_name.replace('.', '')) ) {
+                this.latestVersion = release.tag_name;
+                this.latestUpdate = new Date();
+                return;
+            }
+        }
+    }
+
+    public async getLatestVersion(): Promise<string> {
+        if ( !this.latestVersion || !this.latestUpdate || (new Date()).getTime() - this.latestUpdate.getTime() >= Config.dojoCLI.versionUpdatePeriodMs ) {
+            await this.updateVersion();
+        }
+
+        return this.latestVersion!;
+    }
+}
+
+
+export default new DojoCliVersionHelper();
\ No newline at end of file
diff --git a/ExpressAPI/src/helpers/DojoValidators.ts b/ExpressAPI/src/helpers/DojoValidators.ts
index 0293660deb7449cc45f47366e7fac2868c801f2e..98a28252c6bca786fe23ad6b08e56db54c33aca0 100644
--- a/ExpressAPI/src/helpers/DojoValidators.ts
+++ b/ExpressAPI/src/helpers/DojoValidators.ts
@@ -4,8 +4,9 @@ import { CustomValidator, ErrorMessage, FieldMessageFactory, Meta } from 'expres
 import { BailOptions, ValidationChain }                             from 'express-validator/src/chain';
 import GitlabManager                                                from '../managers/GitlabManager';
 import express                                                      from 'express';
-import SharedExerciseHelper                                         from '../shared/helpers/Dojo/SharedExerciseHelper';
 import logger                                                       from '../shared/logging/WinstonLogger';
+import Json5FileValidator                                           from '../shared/helpers/Json5FileValidator';
+import ExerciseResultsFile                                          from '../shared/types/Dojo/ExerciseResultsFile';
 
 
 declare type DojoMeta = Meta & {
@@ -98,7 +99,7 @@ class DojoValidators {
                                                                               return new Promise((resolve, reject) => {
                                                                                   const results = this.getParamValue(req, path) as string;
                                                                                   if ( results ) {
-                                                                                      SharedExerciseHelper.validateResultFile(results, false).isValid ? resolve(true) : reject();
+                                                                                      Json5FileValidator.validateFile(ExerciseResultsFile, results, false).isValid ? resolve(true) : reject();
                                                                                   } else {
                                                                                       reject();
                                                                                   }
diff --git a/ExpressAPI/src/managers/GitlabManager.ts b/ExpressAPI/src/managers/GitlabManager.ts
index 3fe6f6710cec46bf38f4270b0d83c05c9d076392..390fba57640e11b4514caa37df8131a4b9622886 100644
--- a/ExpressAPI/src/managers/GitlabManager.ts
+++ b/ExpressAPI/src/managers/GitlabManager.ts
@@ -13,6 +13,7 @@ import express           from 'express';
 import GitlabRoute       from '../shared/types/Gitlab/GitlabRoute';
 import SharedConfig      from '../shared/config/SharedConfig';
 import GitlabProfile     from '../shared/types/Gitlab/GitlabProfile';
+import GitlabRelease     from '../shared/types/Gitlab/GitlabRelease';
 
 
 class GitlabManager {
@@ -68,6 +69,12 @@ class GitlabManager {
         return response.data;
     }
 
+    async getRepositoryReleases(repoId: number): Promise<Array<GitlabRelease>> {
+        const response = await axios.get<Array<GitlabRelease>>(this.getApiUrl(GitlabRoute.REPOSITORY_RELEASES_GET).replace('{{id}}', String(repoId)));
+
+        return response.data;
+    }
+
     async createRepository(name: string, description: string, visibility: string, initializeWithReadme: boolean, namespace: number, sharedRunnersEnabled: boolean, wikiEnabled: boolean, import_url: string): Promise<GitlabRepository> {
         const response = await axios.post<GitlabRepository>(this.getApiUrl(GitlabRoute.REPOSITORY_CREATE), {
             name                  : name,
@@ -241,6 +248,18 @@ class GitlabManager {
     async updateFile(repoId: number, filePath: string, fileBase64: string, commitMessage: string, branch: string = 'main', authorName: string = 'Dojo', authorMail: string | undefined = undefined) {
         return this.createUpdateFile(false, repoId, filePath, fileBase64, commitMessage, branch, authorName, authorMail);
     }
+
+    async deleteFile(repoId: number, filePath: string, commitMessage: string, branch: string = 'main', authorName: string = 'Dojo', authorMail: string | undefined = undefined) {
+        await axios.delete(this.getApiUrl(GitlabRoute.REPOSITORY_FILE).replace('{{id}}', String(repoId)).replace('{{filePath}}', encodeURIComponent(filePath)), {
+            data: {
+                branch        : branch,
+                commit_message: commitMessage,
+                author_name   : authorName,
+                author_email  : authorMail
+            }
+        });
+
+    }
 }
 
 
diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts
index 645104b41c1ff85f3c9e1609922529a01f6027b2..ab2bd23456d446fd6a23a64e2bd9db7383b9b05c 100644
--- a/ExpressAPI/src/routes/AssignmentRoutes.ts
+++ b/ExpressAPI/src/routes/AssignmentRoutes.ts
@@ -120,6 +120,10 @@ class AssignmentRoutes implements RoutesManager {
             return GlobalHelper.repositoryCreationError('Repo params error', error, req, res, DojoStatusCode.ASSIGNMENT_CREATION_GITLAB_ERROR, DojoStatusCode.ASSIGNMENT_CREATION_INTERNAL_ERROR, repository);
         }
 
+        try {
+            await GitlabManager.deleteFile(repository.id, '.gitlab-ci.yml', 'Remove .gitlab-ci.yml');
+        } catch ( error ) { /* empty */ }
+
         try {
             await GitlabManager.createFile(repository.id, '.gitlab-ci.yml', fs.readFileSync(path.join(__dirname, '../../assets/assignment_gitlab_ci.yml'), 'base64'), 'Add .gitlab-ci.yml (DO NOT MODIFY THIS FILE)');
         } catch ( error ) {
diff --git a/ExpressAPI/src/shared b/ExpressAPI/src/shared
index 101cc26895eb0b5fe97e03bb96039e0cddd94391..89f3579ca9009f793742170928d808ab4c35d931 160000
--- a/ExpressAPI/src/shared
+++ b/ExpressAPI/src/shared
@@ -1 +1 @@
-Subproject commit 101cc26895eb0b5fe97e03bb96039e0cddd94391
+Subproject commit 89f3579ca9009f793742170928d808ab4c35d931
diff --git a/ExpressAPI/tsconfig.json b/ExpressAPI/tsconfig.json
index 63535307023b70888360cf0d89065d9f844e823f..3f3b0b260d612c2899d7c8fc7903f59bd2a55c66 100644
--- a/ExpressAPI/tsconfig.json
+++ b/ExpressAPI/tsconfig.json
@@ -2,7 +2,7 @@
     "compilerOptions": {
         "outDir"          : "dist",
         "strict"          : true,
-        "target"          : "es6",
+        "target"          : "ES2022",
         "module"          : "commonjs",
         "sourceMap"       : true,
         "esModuleInterop" : true,