Repository: perry-mitchell/webdav-client
Pull request #291 (2022-02-17 08:52:28)

Correctly calculate byte size of the utf8 strings
The original implementation started causing problems when the webdav client was used in combination with axios 0.22 and later, as in 0.22 axios [started considering the `Content-Length` passed in the request](https://github.com/axios/axios/pull/2880/files#diff-586c04c24608b86a074073c5514cc195be5c4c87ddb56da233f6d998ada4159fR89-R91) where it previously ignored it and calculated the length on its own.


Patch:
diff --git a/.prettierrc b/.prettierrc
index 3bd2c5b..50d5a18 100644
--- a/.prettierrc
+++ b/.prettierrc
@@ -1,6 +1,4 @@
 {
     "printWidth": 100,
-    "tabWidth": 4,
-    "trailingComma": "none",
-    "arrowParens": "avoid"
+    "tabWidth": 4
 }
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 439fd63..5ce5b94 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,5 @@
 # WebDAV-Client changelog
 
-## v4.9.0
-_2022-04-20_
-
- * [#237](https://github.com/perry-mitchell/webdav-client/issues/237) `path` support for quota queries
- * **Bugfix**:
-   * [#300](https://github.com/perry-mitchell/webdav-client/issues/300) Vulnerable dependency `url-parse`
-
 ## v4.8.0
 _2022-01-11_
 
diff --git a/README.md b/README.md
index 81526b2..437dcb0 100644
--- a/README.md
+++ b/README.md
@@ -463,7 +463,6 @@ const quota: DiskQuota = await client.getQuota();
 |-------------------|-----------|-----------------------------------------------|
 | `options`         | No        | Configuration options.                        |
 | `options.details` | No        | Return detailed results (headers etc.). Defaults to `false`. |
-| `options.path`    | No        | Path used to make the quota request.          |
 
 _`options` extends [method options](#method-options)._
 
diff --git a/package-lock.json b/package-lock.json
index 348f2d8..0210874 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,82 +1,67 @@
 {
   "name": "webdav",
-  "version": "4.9.0",
+  "version": "4.8.0",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "webdav",
-      "version": "4.9.0",
+      "version": "4.8.0",
       "license": "MIT",
       "dependencies": {
-        "axios": "^0.26.1",
+        "axios": "^0.24.0",
         "base-64": "^1.0.0",
         "fast-xml-parser": "^3.19.0",
         "he": "^1.2.0",
         "hot-patcher": "^0.5.0",
         "layerr": "^0.1.2",
         "md5": "^2.3.0",
-        "minimatch": "^5.0.1",
+        "minimatch": "^3.0.4",
         "nested-property": "^4.0.0",
         "path-posix": "^1.0.0",
         "url-join": "^4.0.1",
-        "url-parse": "^1.5.10"
+        "url-parse": "^1.5.3"
       },
       "devDependencies": {
-        "@babel/core": "^7.17.9",
-        "@babel/preset-env": "^7.16.11",
+        "@babel/core": "^7.15.0",
+        "@babel/preset-env": "^7.15.0",
         "@babel/preset-typescript": "^7.15.0",
-        "@types/node": "^17.0.25",
-        "@types/url-parse": "^1.4.8",
-        "babel-loader": "^8.2.5",
+        "@types/node": "^17.0.8",
+        "@types/url-parse": "^1.4.4",
+        "babel-loader": "^8.2.2",
         "babel-plugin-transform-async-to-promises": "^0.8.18",
         "buffer-equals": "^2.0.0",
-        "chai": "^4.3.6",
+        "chai": "^4.3.4",
         "chai-as-promised": "^7.1.1",
-        "concurrently": "^7.1.0",
+        "concurrently": "^6.2.1",
         "copy-dir": "^1.3.0",
         "directory-exists": "^2.0.1",
         "exists-file": "^3.0.2",
         "husky": "^4.3.8",
-        "karma": "^6.3.19",
+        "karma": "^6.3.4",
         "karma-chai": "^0.1.0",
-        "karma-chrome-launcher": "^3.1.1",
+        "karma-chrome-launcher": "^3.1.0",
         "karma-firefox-launcher": "^2.1.1",
         "karma-mocha": "^2.0.1",
         "karma-sinon": "^1.0.5",
-        "karma-spec-reporter": "^0.0.34",
+        "karma-spec-reporter": "^0.0.33",
         "karma-webpack": "^5.0.0",
-        "lint-staged": "^12.3.8",
+        "lint-staged": "^11.1.2",
         "mkdirp": "^1.0.4",
-        "mocha": "^9.2.2",
-        "nock": "^13.2.4",
+        "mocha": "^9.1.0",
+        "nock": "^13.1.2",
         "nodemon": "^2.0.12",
         "npm-run-all": "^4.1.5",
         "nyc": "^15.1.0",
-        "prettier": "^2.6.2",
+        "prettier": "^1.19.1",
         "prettier-check": "^2.0.0",
         "rimraf": "^3.0.2",
-        "sinon": "^13.0.2",
-        "typescript": "^4.6.3",
-        "wait-on": "^6.0.1",
+        "sinon": "^12.0.1",
+        "typescript": "^4.3.5",
+        "wait-on": "^6.0.0",
         "webdav-server": "^2.6.2",
-        "webpack": "^5.72.0",
-        "webpack-cli": "^4.9.2"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/@ampproject/remapping": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
-      "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/trace-mapping": "^0.3.0"
-      },
-      "engines": {
-        "node": ">=6.0.0"
+        "webpack": "^5.51.1",
+        "webpack-cli": "^4.8.0"
       }
     },
     "node_modules/@babel/code-frame": {
@@ -92,35 +77,35 @@
       }
     },
     "node_modules/@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz",
+      "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==",
       "dev": true,
       "engines": {
         "node": ">=6.9.0"
       }
     },
     "node_modules/@babel/core": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
-      "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz",
+      "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==",
       "dev": true,
       "dependencies": {
-        "@ampproject/remapping": "^2.1.0",
         "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
-        "@babel/helper-compilation-targets": "^7.17.7",
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helpers": "^7.17.9",
-        "@babel/parser": "^7.17.9",
+        "@babel/generator": "^7.16.7",
+        "@babel/helper-compilation-targets": "^7.16.7",
+        "@babel/helper-module-transforms": "^7.16.7",
+        "@babel/helpers": "^7.16.7",
+        "@babel/parser": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0",
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.1",
-        "semver": "^6.3.0"
+        "json5": "^2.1.2",
+        "semver": "^6.3.0",
+        "source-map": "^0.5.0"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -139,13 +124,22 @@
         "semver": "bin/semver.js"
       }
     },
+    "node_modules/@babel/core/node_modules/source-map": {
+      "version": "0.5.7",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/@babel/generator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
-      "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
+      "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0",
+        "@babel/types": "^7.16.8",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
       },
@@ -188,12 +182,12 @@
       }
     },
     "node_modules/@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+      "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
       "dev": true,
       "dependencies": {
-        "@babel/compat-data": "^7.17.7",
+        "@babel/compat-data": "^7.16.4",
         "@babel/helper-validator-option": "^7.16.7",
         "browserslist": "^4.17.5",
         "semver": "^6.3.0"
@@ -215,15 +209,15 @@
       }
     },
     "node_modules/@babel/helper-create-class-features-plugin": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz",
-      "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz",
+      "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==",
       "dev": true,
       "dependencies": {
         "@babel/helper-annotate-as-pure": "^7.16.7",
         "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-member-expression-to-functions": "^7.17.7",
+        "@babel/helper-function-name": "^7.16.7",
+        "@babel/helper-member-expression-to-functions": "^7.16.7",
         "@babel/helper-optimise-call-expression": "^7.16.7",
         "@babel/helper-replace-supers": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7"
@@ -304,13 +298,26 @@
       }
     },
     "node_modules/@babel/helper-function-name": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
-      "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
+      "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
       "dev": true,
       "dependencies": {
+        "@babel/helper-get-function-arity": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@babel/helper-get-function-arity": {
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
+      "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
+      "dev": true,
+      "dependencies": {
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -329,12 +336,12 @@
       }
     },
     "node_modules/@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
+      "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -353,19 +360,19 @@
       }
     },
     "node_modules/@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+      "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
       "dev": true,
       "dependencies": {
         "@babel/helper-environment-visitor": "^7.16.7",
         "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -423,12 +430,12 @@
       }
     },
     "node_modules/@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+      "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
       "dev": true,
       "dependencies": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -492,14 +499,14 @@
       }
     },
     "node_modules/@babel/helpers": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
-      "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz",
+      "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==",
       "dev": true,
       "dependencies": {
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       },
       "engines": {
         "node": ">=6.9.0"
@@ -520,9 +527,9 @@
       }
     },
     "node_modules/@babel/parser": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
-      "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz",
+      "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==",
       "dev": true,
       "bin": {
         "parser": "bin/babel-parser.js"
@@ -762,12 +769,12 @@
       }
     },
     "node_modules/@babel/plugin-proposal-private-methods": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
-      "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz",
+      "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==",
       "dev": true,
       "dependencies": {
-        "@babel/helper-create-class-features-plugin": "^7.16.10",
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7"
       },
       "engines": {
@@ -1527,9 +1534,9 @@
       }
     },
     "node_modules/@babel/preset-env": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
-      "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz",
+      "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==",
       "dev": true,
       "dependencies": {
         "@babel/compat-data": "^7.16.8",
@@ -1550,7 +1557,7 @@
         "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
         "@babel/plugin-proposal-optional-catch-binding": "^7.16.7",
         "@babel/plugin-proposal-optional-chaining": "^7.16.7",
-        "@babel/plugin-proposal-private-methods": "^7.16.11",
+        "@babel/plugin-proposal-private-methods": "^7.16.7",
         "@babel/plugin-proposal-private-property-in-object": "^7.16.7",
         "@babel/plugin-proposal-unicode-property-regex": "^7.16.7",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
@@ -1683,19 +1690,19 @@
       }
     },
     "node_modules/@babel/traverse": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
-      "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz",
+      "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==",
       "dev": true,
       "dependencies": {
         "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
+        "@babel/generator": "^7.16.8",
         "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
+        "@babel/helper-function-name": "^7.16.7",
         "@babel/helper-hoist-variables": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/parser": "^7.17.9",
-        "@babel/types": "^7.17.0",
+        "@babel/parser": "^7.16.8",
+        "@babel/types": "^7.16.8",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       },
@@ -1704,9 +1711,9 @@
       }
     },
     "node_modules/@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz",
+      "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==",
       "dev": true,
       "dependencies": {
         "@babel/helper-validator-identifier": "^7.16.7",
@@ -1716,15 +1723,6 @@
         "node": ">=6.9.0"
       }
     },
-    "node_modules/@colors/colors": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
-      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.1.90"
-      }
-    },
     "node_modules/@discoveryjs/json-ext": {
       "version": "0.5.3",
       "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
@@ -1735,9 +1733,9 @@
       }
     },
     "node_modules/@hapi/hoek": {
-      "version": "9.2.1",
-      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
-      "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==",
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
+      "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==",
       "dev": true
     },
     "node_modules/@hapi/topo": {
@@ -1783,35 +1781,10 @@
         "node": ">=8"
       }
     },
-    "node_modules/@jridgewell/resolve-uri": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
-      "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
-      "dev": true,
-      "engines": {
-        "node": ">=6.0.0"
-      }
-    },
-    "node_modules/@jridgewell/sourcemap-codec": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
-      "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
-      "dev": true
-    },
-    "node_modules/@jridgewell/trace-mapping": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.7.tgz",
-      "integrity": "sha512-8XC0l0PwCbdg2Uc8zIIf6djNX3lYiz9GqQlC1LJ9WQvTYvcfP8IA9K2IKRnPm5tAX6X/+orF+WwKZ0doGcgJlg==",
-      "dev": true,
-      "dependencies": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
     "node_modules/@sideway/address": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
-      "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz",
+      "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==",
       "dev": true,
       "dependencies": {
         "@hapi/hoek": "^9.0.0"
@@ -1848,18 +1821,18 @@
       }
     },
     "node_modules/@sinonjs/fake-timers": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
-      "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
+      "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
       "dev": true,
       "dependencies": {
         "@sinonjs/commons": "^1.7.0"
       }
     },
     "node_modules/@sinonjs/samsam": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
-      "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz",
+      "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==",
       "dev": true,
       "dependencies": {
         "@sinonjs/commons": "^1.6.0",
@@ -1873,15 +1846,6 @@
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "dev": true
     },
-    "node_modules/@socket.io/base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
-      "dev": true,
-      "engines": {
-        "node": ">= 0.6.0"
-      }
-    },
     "node_modules/@szmarczak/http-timer": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
@@ -1913,9 +1877,9 @@
       "dev": true
     },
     "node_modules/@types/eslint": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
-      "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
+      "version": "7.28.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
+      "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
       "dev": true,
       "dependencies": {
         "@types/estree": "*",
@@ -1923,9 +1887,9 @@
       }
     },
     "node_modules/@types/eslint-scope": {
-      "version": "3.7.3",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
-      "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
+      "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
       "dev": true,
       "dependencies": {
         "@types/eslint": "*",
@@ -1933,9 +1897,9 @@
       }
     },
     "node_modules/@types/estree": {
-      "version": "0.0.51",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
-      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "version": "0.0.50",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
+      "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
       "dev": true
     },
     "node_modules/@types/json-schema": {
@@ -1945,9 +1909,9 @@
       "dev": true
     },
     "node_modules/@types/node": {
-      "version": "17.0.25",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz",
-      "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==",
+      "version": "17.0.8",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz",
+      "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==",
       "dev": true
     },
     "node_modules/@types/parse-json": {
@@ -1957,9 +1921,9 @@
       "dev": true
     },
     "node_modules/@types/url-parse": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.8.tgz",
-      "integrity": "sha512-zqqcGKyNWgTLFBxmaexGUKQyWqeG7HjXj20EuQJSJWwXe54BjX0ihIo5cJB9yAQzH8dNugJ9GvkBYMjPXs/PJw==",
+      "version": "1.4.6",
+      "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.6.tgz",
+      "integrity": "sha512-Xo6pU78oG9NNk5UJaumUXzrwu9hPiVN2N83mcdXQ1C3/R037fMPlVCh+LqP/2BELXMnlQH0sKec0u33ZnktqHQ==",
       "dev": true
     },
     "node_modules/@ungap/promise-all-settled": {
@@ -2115,9 +2079,9 @@
       }
     },
     "node_modules/@webpack-cli/configtest": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
-      "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz",
+      "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==",
       "dev": true,
       "peerDependencies": {
         "webpack": "4.x.x || 5.x.x",
@@ -2125,9 +2089,9 @@
       }
     },
     "node_modules/@webpack-cli/info": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
-      "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz",
+      "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==",
       "dev": true,
       "dependencies": {
         "envinfo": "^7.7.3"
@@ -2137,9 +2101,9 @@
       }
     },
     "node_modules/@webpack-cli/serve": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
-      "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz",
+      "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==",
       "dev": true,
       "peerDependencies": {
         "webpack-cli": "4.x.x"
@@ -2371,21 +2335,21 @@
       }
     },
     "node_modules/axios": {
-      "version": "0.26.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
-      "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
+      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
       "dependencies": {
-        "follow-redirects": "^1.14.8"
+        "follow-redirects": "^1.14.4"
       }
     },
     "node_modules/babel-loader": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
-      "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==",
+      "version": "8.2.3",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
+      "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
       "dev": true,
       "dependencies": {
         "find-cache-dir": "^3.3.1",
-        "loader-utils": "^2.0.0",
+        "loader-utils": "^1.4.0",
         "make-dir": "^3.1.0",
         "schema-utils": "^2.6.5"
       },
@@ -2487,6 +2451,15 @@
       "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
       "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
     },
+    "node_modules/base64-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
+      "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.6.0"
+      }
+    },
     "node_modules/base64id": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@@ -2670,7 +2643,6 @@
       "version": "1.1.8",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
       "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
-      "dev": true,
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -2872,16 +2844,15 @@
       }
     },
     "node_modules/chai": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
-      "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
+      "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
       "dev": true,
       "dependencies": {
         "assertion-error": "^1.1.0",
         "check-error": "^1.0.2",
         "deep-eql": "^3.0.1",
         "get-func-name": "^2.0.0",
-        "loupe": "^2.3.1",
         "pathval": "^1.1.1",
         "type-detect": "^4.0.5"
       },
@@ -2933,16 +2904,10 @@
       }
     },
     "node_modules/chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
       "dev": true,
-      "funding": [
-        {
-          "type": "individual",
-          "url": "https://paulmillr.com/funding/"
-        }
-      ],
       "dependencies": {
         "anymatch": "~3.1.2",
         "braces": "~3.0.2",
@@ -3008,71 +2973,21 @@
       }
     },
     "node_modules/cli-truncate": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
-      "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
-      "dev": true,
-      "dependencies": {
-        "slice-ansi": "^5.0.0",
-        "string-width": "^5.0.0"
-      },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/cli-truncate/node_modules/ansi-regex": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-      "dev": true,
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
-      }
-    },
-    "node_modules/cli-truncate/node_modules/emoji-regex": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-      "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-      "dev": true
-    },
-    "node_modules/cli-truncate/node_modules/string-width": {
-      "version": "5.1.2",
-      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-      "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
       "dev": true,
       "dependencies": {
-        "eastasianwidth": "^0.2.0",
-        "emoji-regex": "^9.2.2",
-        "strip-ansi": "^7.0.1"
+        "slice-ansi": "^3.0.0",
+        "string-width": "^4.2.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/cli-truncate/node_modules/strip-ansi": {
-      "version": "7.0.1",
-      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-      "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
-      "dev": true,
-      "dependencies": {
-        "ansi-regex": "^6.0.1"
-      },
-      "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
-      }
-    },
     "node_modules/cliui": {
       "version": "7.0.4",
       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
@@ -3123,9 +3038,9 @@
       "dev": true
     },
     "node_modules/colorette": {
-      "version": "2.0.16",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+      "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
       "dev": true
     },
     "node_modules/colors": {
@@ -3164,13 +3079,12 @@
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
     },
     "node_modules/concurrently": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz",
-      "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==",
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz",
+      "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==",
       "dev": true,
       "dependencies": {
         "chalk": "^4.1.0",
@@ -3183,10 +3097,10 @@
         "yargs": "^16.2.0"
       },
       "bin": {
-        "concurrently": "dist/bin/concurrently.js"
+        "concurrently": "bin/concurrently.js"
       },
       "engines": {
-        "node": "^12.20.0 || ^14.13.0 || >=16.0.0"
+        "node": ">=10.0.0"
       }
     },
     "node_modules/concurrently/node_modules/ansi-styles": {
@@ -3481,18 +3395,18 @@
       }
     },
     "node_modules/date-format": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.7.tgz",
-      "integrity": "sha512-k5xqlzDGIfv2N/DHR/BR8Kc4N9CRy9ReuDkmdxeX/jNfit94QXd36emWMm40ZOEDKNm/c91yV9EO3uGPkR7wWQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
+      "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==",
       "dev": true,
       "engines": {
         "node": ">=4.0"
       }
     },
     "node_modules/debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
       "dev": true,
       "dependencies": {
         "ms": "2.1.2"
@@ -3656,12 +3570,6 @@
       "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
       "dev": true
     },
-    "node_modules/eastasianwidth": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "dev": true
-    },
     "node_modules/ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -3708,9 +3616,9 @@
       }
     },
     "node_modules/engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz",
+      "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
       "dev": true,
       "dependencies": {
         "@types/cookie": "^0.4.1",
@@ -3721,7 +3629,7 @@
         "cookie": "~0.4.1",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
+        "engine.io-parser": "~5.0.0",
         "ws": "~8.2.3"
       },
       "engines": {
@@ -3729,21 +3637,21 @@
       }
     },
     "node_modules/engine.io-parser": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
-      "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz",
+      "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==",
       "dev": true,
       "dependencies": {
-        "@socket.io/base64-arraybuffer": "~1.0.2"
+        "base64-arraybuffer": "~1.0.1"
       },
       "engines": {
         "node": ">=10.0.0"
       }
     },
     "node_modules/enhanced-resolve": {
-      "version": "5.9.3",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
-      "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
+      "version": "5.8.3",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
+      "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.4",
@@ -3753,6 +3661,18 @@
         "node": ">=10.13.0"
       }
     },
+    "node_modules/enquirer": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+      "dev": true,
+      "dependencies": {
+        "ansi-colors": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=8.6"
+      }
+    },
     "node_modules/ent": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
@@ -4193,15 +4113,15 @@
       }
     },
     "node_modules/flatted": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
-      "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
       "dev": true
     },
     "node_modules/follow-redirects": {
-      "version": "1.14.9",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
-      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
+      "version": "1.14.7",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
+      "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==",
       "funding": [
         {
           "type": "individual",
@@ -4310,17 +4230,17 @@
       ]
     },
     "node_modules/fs-extra": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+      "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
       "dev": true,
       "dependencies": {
         "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=6 <7 || >=8"
       }
     },
     "node_modules/fs.realpath": {
@@ -4390,6 +4310,12 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/get-own-enumerable-property-symbols": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+      "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+      "dev": true
+    },
     "node_modules/get-package-type": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -4409,9 +4335,9 @@
       }
     },
     "node_modules/glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
       "dev": true,
       "dependencies": {
         "fs.realpath": "^1.0.0",
@@ -4446,18 +4372,6 @@
       "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
       "dev": true
     },
-    "node_modules/glob/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/global-dirs": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz",
@@ -5120,6 +5034,15 @@
         "node": ">=0.12.0"
       }
     },
+    "node_modules/is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true,
+      "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",
@@ -5162,6 +5085,15 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -5496,14 +5428,14 @@
       }
     },
     "node_modules/joi": {
-      "version": "17.6.0",
-      "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
-      "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+      "version": "17.4.2",
+      "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
+      "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==",
       "dev": true,
       "dependencies": {
         "@hapi/hoek": "^9.0.0",
         "@hapi/topo": "^5.0.0",
-        "@sideway/address": "^4.1.3",
+        "@sideway/address": "^4.1.0",
         "@sideway/formula": "^3.0.0",
         "@sideway/pinpoint": "^2.0.0"
       }
@@ -5570,10 +5502,13 @@
       "dev": true
     },
     "node_modules/json5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
-      "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+      "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
       "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.5"
+      },
       "bin": {
         "json5": "lib/cli.js"
       },
@@ -5582,13 +5517,10 @@
       }
     },
     "node_modules/jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
       "dev": true,
-      "dependencies": {
-        "universalify": "^2.0.0"
-      },
       "optionalDependencies": {
         "graceful-fs": "^4.1.6"
       }
@@ -5609,15 +5541,15 @@
       "dev": true
     },
     "node_modules/karma": {
-      "version": "6.3.19",
-      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.19.tgz",
-      "integrity": "sha512-NDhWckzES/Y9xMiddyU1RzaKL76/scCsu8Mp0vR0Z3lQRvC3p72+Ab4ppoxs36S9tyPNX5V48yvaV++RNEBPZw==",
+      "version": "6.3.10",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz",
+      "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==",
       "dev": true,
       "dependencies": {
-        "@colors/colors": "1.5.0",
         "body-parser": "^1.19.0",
         "braces": "^3.0.2",
         "chokidar": "^3.5.1",
+        "colors": "^1.4.0",
         "connect": "^3.7.0",
         "di": "^0.0.1",
         "dom-serialize": "^2.2.1",
@@ -5626,14 +5558,13 @@
         "http-proxy": "^1.18.1",
         "isbinaryfile": "^4.0.8",
         "lodash": "^4.17.21",
-        "log4js": "^6.4.1",
+        "log4js": "^6.3.0",
         "mime": "^2.5.2",
         "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.5",
         "qjobs": "^1.2.0",
         "range-parser": "^1.2.1",
         "rimraf": "^3.0.2",
-        "socket.io": "^4.4.1",
+        "socket.io": "^4.2.0",
         "source-map": "^0.6.1",
         "tmp": "^0.2.1",
         "ua-parser-js": "^0.7.30",
@@ -5657,9 +5588,9 @@
       }
     },
     "node_modules/karma-chrome-launcher": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz",
-      "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+      "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
       "dev": true,
       "dependencies": {
         "which": "^1.2.1"
@@ -5713,9 +5644,9 @@
       }
     },
     "node_modules/karma-spec-reporter": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz",
-      "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==",
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.33.tgz",
+      "integrity": "sha512-xRVevDUkiIVhKbDQ3CmeGEpyzA4b3HeVl95Sx5yJAvurpdKUSYF6ZEbQOqKJ7vrtDniABV1hyFez9KX9+7ruBA==",
       "dev": true,
       "dependencies": {
         "colors": "1.4.0"
@@ -5741,40 +5672,24 @@
         "webpack": "^5.0.0"
       }
     },
-    "node_modules/karma-webpack/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/karma/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+    "node_modules/karma/node_modules/glob": {
+      "version": "7.1.7",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
       "dev": true,
       "dependencies": {
-        "brace-expansion": "^1.1.7"
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
       },
       "engines": {
         "node": "*"
-      }
-    },
-    "node_modules/karma/node_modules/mkdirp": {
-      "version": "0.5.6",
-      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
-      "dev": true,
-      "dependencies": {
-        "minimist": "^1.2.6"
       },
-      "bin": {
-        "mkdirp": "bin/cmd.js"
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
       }
     },
     "node_modules/keyv": {
@@ -5812,15 +5727,6 @@
       "resolved": "https://registry.npmjs.org/layerr/-/layerr-0.1.2.tgz",
       "integrity": "sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ=="
     },
-    "node_modules/lilconfig": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
-      "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
-      "dev": true,
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/lines-and-columns": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
@@ -5828,32 +5734,29 @@
       "dev": true
     },
     "node_modules/lint-staged": {
-      "version": "12.3.8",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.8.tgz",
-      "integrity": "sha512-0+UpNaqIwKRSGAFOCcpuYNIv/j5QGVC+xUVvmSdxHO+IfIGoHbFLo3XcPmV/LLnsVj5EAncNHVtlITSoY5qWGQ==",
+      "version": "11.2.6",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz",
+      "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==",
       "dev": true,
       "dependencies": {
-        "cli-truncate": "^3.1.0",
-        "colorette": "^2.0.16",
-        "commander": "^8.3.0",
-        "debug": "^4.3.3",
+        "cli-truncate": "2.1.0",
+        "colorette": "^1.4.0",
+        "commander": "^8.2.0",
+        "cosmiconfig": "^7.0.1",
+        "debug": "^4.3.2",
+        "enquirer": "^2.3.6",
         "execa": "^5.1.1",
-        "lilconfig": "2.0.4",
-        "listr2": "^4.0.1",
+        "listr2": "^3.12.2",
         "micromatch": "^4.0.4",
         "normalize-path": "^3.0.0",
-        "object-inspect": "^1.12.0",
-        "pidtree": "^0.5.0",
-        "string-argv": "^0.3.1",
-        "supports-color": "^9.2.1",
-        "yaml": "^1.10.2"
+        "please-upgrade-node": "^3.2.0",
+        "string-argv": "0.3.1",
+        "stringify-object": "3.3.0",
+        "supports-color": "8.1.1"
       },
       "bin": {
         "lint-staged": "bin/lint-staged.js"
       },
-      "engines": {
-        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
-      },
       "funding": {
         "url": "https://opencollective.com/lint-staged"
       }
@@ -5867,34 +5770,34 @@
         "node": ">= 12"
       }
     },
-    "node_modules/lint-staged/node_modules/pidtree": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz",
-      "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
+    "node_modules/lint-staged/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,
-      "bin": {
-        "pidtree": "bin/pidtree.js"
-      },
       "engines": {
-        "node": ">=0.10"
+        "node": ">=8"
       }
     },
     "node_modules/lint-staged/node_modules/supports-color": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
-      "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==",
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
       "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
       "engines": {
-        "node": ">=12"
+        "node": ">=10"
       },
       "funding": {
         "url": "https://github.com/chalk/supports-color?sponsor=1"
       }
     },
     "node_modules/listr2": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz",
-      "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+      "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
       "dev": true,
       "dependencies": {
         "cli-truncate": "^2.1.0",
@@ -5902,12 +5805,12 @@
         "log-update": "^4.0.0",
         "p-map": "^4.0.0",
         "rfdc": "^1.3.0",
-        "rxjs": "^7.5.5",
+        "rxjs": "^7.5.1",
         "through": "^2.3.8",
         "wrap-ansi": "^7.0.0"
       },
       "engines": {
-        "node": ">=12"
+        "node": ">=10.0.0"
       },
       "peerDependencies": {
         "enquirer": ">= 2.3.0 < 3"
@@ -5918,78 +5821,21 @@
         }
       }
     },
-    "node_modules/listr2/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/listr2/node_modules/cli-truncate": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
-      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
-      "dev": true,
-      "dependencies": {
-        "slice-ansi": "^3.0.0",
-        "string-width": "^4.2.0"
-      },
-      "engines": {
-        "node": ">=8"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
-      }
-    },
-    "node_modules/listr2/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/listr2/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==",
+    "node_modules/listr2/node_modules/colorette": {
+      "version": "2.0.16",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
       "dev": true
     },
     "node_modules/listr2/node_modules/rxjs": {
-      "version": "7.5.5",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-      "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+      "version": "7.5.2",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz",
+      "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==",
       "dev": true,
       "dependencies": {
         "tslib": "^2.1.0"
       }
     },
-    "node_modules/listr2/node_modules/slice-ansi": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
-      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
-      "dev": true,
-      "dependencies": {
-        "ansi-styles": "^4.0.0",
-        "astral-regex": "^2.0.0",
-        "is-fullwidth-code-point": "^3.0.0"
-      },
-      "engines": {
-        "node": ">=8"
-      }
-    },
     "node_modules/listr2/node_modules/tslib": {
       "version": "2.3.1",
       "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -6021,17 +5867,29 @@
       }
     },
     "node_modules/loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+      "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
       "dev": true,
       "dependencies": {
         "big.js": "^5.2.2",
         "emojis-list": "^3.0.0",
-        "json5": "^2.1.2"
+        "json5": "^1.0.1"
       },
       "engines": {
-        "node": ">=8.9.0"
+        "node": ">=4.0.0"
+      }
+    },
+    "node_modules/loader-utils/node_modules/json5": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+      "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.0"
+      },
+      "bin": {
+        "json5": "lib/cli.js"
       }
     },
     "node_modules/locate-path": {
@@ -6245,30 +6103,21 @@
       }
     },
     "node_modules/log4js": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.5.tgz",
-      "integrity": "sha512-43RJcYZ7nfUxpPO2woTl8CJ0t5+gucLJZ43mtp2PlInT+LygCp/bl6hNJtKulCJ+++fQsjIv4EO3Mp611PfeLQ==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz",
+      "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==",
       "dev": true,
       "dependencies": {
-        "date-format": "^4.0.7",
-        "debug": "^4.3.4",
-        "flatted": "^3.2.5",
-        "rfdc": "^1.3.0",
-        "streamroller": "^3.0.7"
+        "date-format": "^3.0.0",
+        "debug": "^4.1.1",
+        "flatted": "^2.0.1",
+        "rfdc": "^1.1.4",
+        "streamroller": "^2.2.4"
       },
       "engines": {
         "node": ">=8.0"
       }
     },
-    "node_modules/loupe": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
-      "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
-      "dev": true,
-      "dependencies": {
-        "get-func-name": "^2.0.0"
-      }
-    },
     "node_modules/lowercase-keys": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
@@ -6411,28 +6260,20 @@
       }
     },
     "node_modules/minimatch": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-      "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dependencies": {
-        "brace-expansion": "^2.0.1"
+        "brace-expansion": "^1.1.7"
       },
       "engines": {
-        "node": ">=10"
-      }
-    },
-    "node_modules/minimatch/node_modules/brace-expansion": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-      "dependencies": {
-        "balanced-match": "^1.0.0"
+        "node": "*"
       }
     },
     "node_modules/minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
     "node_modules/mkdirp": {
@@ -6448,32 +6289,32 @@
       }
     },
     "node_modules/mocha": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
-      "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
+      "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
       "dev": true,
       "dependencies": {
         "@ungap/promise-all-settled": "1.1.2",
         "ansi-colors": "4.1.1",
         "browser-stdout": "1.3.1",
-        "chokidar": "3.5.3",
-        "debug": "4.3.3",
+        "chokidar": "3.5.2",
+        "debug": "4.3.2",
         "diff": "5.0.0",
         "escape-string-regexp": "4.0.0",
         "find-up": "5.0.0",
-        "glob": "7.2.0",
+        "glob": "7.1.7",
         "growl": "1.10.5",
         "he": "1.2.0",
         "js-yaml": "4.1.0",
         "log-symbols": "4.1.0",
-        "minimatch": "4.2.1",
+        "minimatch": "3.0.4",
         "ms": "2.1.3",
-        "nanoid": "3.3.1",
+        "nanoid": "3.1.25",
         "serialize-javascript": "6.0.0",
         "strip-json-comments": "3.1.1",
         "supports-color": "8.1.1",
         "which": "2.0.2",
-        "workerpool": "6.2.0",
+        "workerpool": "6.1.5",
         "yargs": "16.2.0",
         "yargs-parser": "20.2.4",
         "yargs-unparser": "2.0.0"
@@ -6496,29 +6337,6 @@
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
       "dev": true
     },
-    "node_modules/mocha/node_modules/debug": {
-      "version": "4.3.3",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-      "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
-      "dev": true,
-      "dependencies": {
-        "ms": "2.1.2"
-      },
-      "engines": {
-        "node": ">=6.0"
-      },
-      "peerDependenciesMeta": {
-        "supports-color": {
-          "optional": true
-        }
-      }
-    },
-    "node_modules/mocha/node_modules/debug/node_modules/ms": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-      "dev": true
-    },
     "node_modules/mocha/node_modules/escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -6547,6 +6365,26 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
+    "node_modules/mocha/node_modules/glob": {
+      "version": "7.1.7",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+      "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/mocha/node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -6583,18 +6421,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/mocha/node_modules/minimatch": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
-      "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
-      "dev": true,
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/mocha/node_modules/ms": {
       "version": "2.1.3",
       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -6689,9 +6515,9 @@
       "dev": true
     },
     "node_modules/nanoid": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
-      "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
+      "version": "3.1.25",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+      "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
       "dev": true,
       "bin": {
         "nanoid": "bin/nanoid.cjs"
@@ -6727,22 +6553,22 @@
       "dev": true
     },
     "node_modules/nise": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
-      "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz",
+      "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==",
       "dev": true,
       "dependencies": {
-        "@sinonjs/commons": "^1.8.3",
-        "@sinonjs/fake-timers": ">=5",
+        "@sinonjs/commons": "^1.7.0",
+        "@sinonjs/fake-timers": "^7.0.4",
         "@sinonjs/text-encoding": "^0.7.1",
         "just-extend": "^4.0.2",
         "path-to-regexp": "^1.7.0"
       }
     },
     "node_modules/nock": {
-      "version": "13.2.4",
-      "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz",
-      "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.2.tgz",
+      "integrity": "sha512-PcBHuvl9i6zfaJ50A7LS55oU+nFLv8htXIhffJO+FxyfibdZ4jEvd9kTuvkrJireBFIGMZ+oUIRpMK5gU9h//g==",
       "dev": true,
       "dependencies": {
         "debug": "^4.1.0",
@@ -6810,18 +6636,6 @@
         "ms": "^2.1.1"
       }
     },
-    "node_modules/nodemon/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/nodemon/node_modules/semver": {
       "version": "5.7.1",
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -6917,18 +6731,6 @@
         "node": ">=4.8"
       }
     },
-    "node_modules/npm-run-all/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/npm-run-all/node_modules/read-pkg": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -7136,15 +6938,6 @@
         "node": ">=0.10.0"
       }
     },
-    "node_modules/object-inspect": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true,
-      "funding": {
-        "url": "https://github.com/sponsors/ljharb"
-      }
-    },
     "node_modules/object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -7497,18 +7290,15 @@
       }
     },
     "node_modules/prettier": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
-      "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
       "dev": true,
       "bin": {
         "prettier": "bin-prettier.js"
       },
       "engines": {
-        "node": ">=10.13.0"
-      },
-      "funding": {
-        "url": "https://github.com/prettier/prettier?sponsor=1"
+        "node": ">=4"
       }
     },
     "node_modules/prettier-check": {
@@ -8100,16 +7890,16 @@
       "dev": true
     },
     "node_modules/sinon": {
-      "version": "13.0.2",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
-      "integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
+      "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
       "dev": true,
       "dependencies": {
         "@sinonjs/commons": "^1.8.3",
-        "@sinonjs/fake-timers": "^9.1.2",
-        "@sinonjs/samsam": "^6.1.1",
+        "@sinonjs/fake-timers": "^8.1.0",
+        "@sinonjs/samsam": "^6.0.2",
         "diff": "^5.0.0",
-        "nise": "^5.1.1",
+        "nise": "^5.1.0",
         "supports-color": "^7.2.0"
       },
       "funding": {
@@ -8117,6 +7907,15 @@
         "url": "https://opencollective.com/sinon"
       }
     },
+    "node_modules/sinon/node_modules/@sinonjs/fake-timers": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
+      "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+      "dev": true,
+      "dependencies": {
+        "@sinonjs/commons": "^1.7.0"
+      }
+    },
     "node_modules/sinon/node_modules/has-flag": {
       "version": "4.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -8148,45 +7947,52 @@
       }
     },
     "node_modules/slice-ansi": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
-      "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
       "dev": true,
       "dependencies": {
-        "ansi-styles": "^6.0.0",
-        "is-fullwidth-code-point": "^4.0.0"
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
       },
       "engines": {
-        "node": ">=12"
-      },
-      "funding": {
-        "url": "https://github.com/chalk/slice-ansi?sponsor=1"
+        "node": ">=8"
       }
     },
     "node_modules/slice-ansi/node_modules/ansi-styles": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
-      "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
+      "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": ">=12"
+        "node": ">=8"
       },
       "funding": {
         "url": "https://github.com/chalk/ansi-styles?sponsor=1"
       }
     },
-    "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
-      "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+    "node_modules/slice-ansi/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,
-      "engines": {
-        "node": ">=12"
+      "dependencies": {
+        "color-name": "~1.1.4"
       },
-      "funding": {
-        "url": "https://github.com/sponsors/sindresorhus"
+      "engines": {
+        "node": ">=7.0.0"
       }
     },
+    "node_modules/slice-ansi/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/sliced": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
@@ -8335,19 +8141,28 @@
       }
     },
     "node_modules/streamroller": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.7.tgz",
-      "integrity": "sha512-kh68kwiDGuIPiPDWwRbEC5us+kfARP1e9AsQiaLaSqGrctOvMn0mtL8iNY3r4/o5nIoYi3gPI1jexguZsXDlxw==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz",
+      "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==",
       "dev": true,
       "dependencies": {
-        "date-format": "^4.0.7",
-        "debug": "^4.3.4",
-        "fs-extra": "^10.0.1"
+        "date-format": "^2.1.0",
+        "debug": "^4.1.1",
+        "fs-extra": "^8.1.0"
       },
       "engines": {
         "node": ">=8.0"
       }
     },
+    "node_modules/streamroller/node_modules/date-format": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
+      "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
+      "dev": true,
+      "engines": {
+        "node": ">=4.0"
+      }
+    },
     "node_modules/string-argv": {
       "version": "0.3.1",
       "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz",
@@ -8385,6 +8200,20 @@
         "node": ">= 0.4"
       }
     },
+    "node_modules/stringify-object": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+      "dev": true,
+      "dependencies": {
+        "get-own-enumerable-property-symbols": "^3.0.0",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
     "node_modules/strip-ansi": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -8562,18 +8391,6 @@
         "node": ">=8"
       }
     },
-    "node_modules/test-exclude/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/through": {
       "version": "2.3.8",
       "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
@@ -8702,9 +8519,9 @@
       }
     },
     "node_modules/typescript": {
-      "version": "4.6.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
-      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
+      "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
@@ -8792,12 +8609,12 @@
       }
     },
     "node_modules/universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true,
       "engines": {
-        "node": ">= 10.0.0"
+        "node": ">= 4.0.0"
       }
     },
     "node_modules/unpipe": {
@@ -8955,9 +8772,9 @@
       "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
     },
     "node_modules/url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",
+      "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==",
       "dependencies": {
         "querystringify": "^2.1.1",
         "requires-port": "^1.0.0"
@@ -9023,16 +8840,16 @@
       }
     },
     "node_modules/wait-on": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz",
-      "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz",
+      "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==",
       "dev": true,
       "dependencies": {
-        "axios": "^0.25.0",
-        "joi": "^17.6.0",
+        "axios": "^0.21.1",
+        "joi": "^17.4.0",
         "lodash": "^4.17.21",
         "minimist": "^1.2.5",
-        "rxjs": "^7.5.4"
+        "rxjs": "^7.1.0"
       },
       "bin": {
         "wait-on": "bin/wait-on"
@@ -9042,27 +8859,27 @@
       }
     },
     "node_modules/wait-on/node_modules/axios": {
-      "version": "0.25.0",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz",
-      "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
+      "version": "0.21.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+      "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
       "dev": true,
       "dependencies": {
-        "follow-redirects": "^1.14.7"
+        "follow-redirects": "^1.14.0"
       }
     },
     "node_modules/wait-on/node_modules/rxjs": {
-      "version": "7.5.5",
-      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-      "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz",
+      "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==",
       "dev": true,
       "dependencies": {
-        "tslib": "^2.1.0"
+        "tslib": "~2.1.0"
       }
     },
     "node_modules/wait-on/node_modules/tslib": {
-      "version": "2.3.1",
-      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-      "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+      "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
       "dev": true
     },
     "node_modules/watchpack": {
@@ -9092,13 +8909,13 @@
       }
     },
     "node_modules/webpack": {
-      "version": "5.72.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz",
-      "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==",
+      "version": "5.65.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
+      "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==",
       "dev": true,
       "dependencies": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^0.0.51",
+        "@types/eslint-scope": "^3.7.0",
+        "@types/estree": "^0.0.50",
         "@webassemblyjs/ast": "1.11.1",
         "@webassemblyjs/wasm-edit": "1.11.1",
         "@webassemblyjs/wasm-parser": "1.11.1",
@@ -9106,12 +8923,12 @@
         "acorn-import-assertions": "^1.7.6",
         "browserslist": "^4.14.5",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.9.2",
+        "enhanced-resolve": "^5.8.3",
         "es-module-lexer": "^0.9.0",
         "eslint-scope": "5.1.1",
         "events": "^3.2.0",
         "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.9",
+        "graceful-fs": "^4.2.4",
         "json-parse-better-errors": "^1.0.2",
         "loader-runner": "^4.2.0",
         "mime-types": "^2.1.27",
@@ -9120,7 +8937,7 @@
         "tapable": "^2.1.1",
         "terser-webpack-plugin": "^5.1.3",
         "watchpack": "^2.3.1",
-        "webpack-sources": "^3.2.3"
+        "webpack-sources": "^3.2.2"
       },
       "bin": {
         "webpack": "bin/webpack.js"
@@ -9139,15 +8956,15 @@
       }
     },
     "node_modules/webpack-cli": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
-      "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
+      "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
       "dev": true,
       "dependencies": {
         "@discoveryjs/json-ext": "^0.5.0",
-        "@webpack-cli/configtest": "^1.1.1",
-        "@webpack-cli/info": "^1.4.1",
-        "@webpack-cli/serve": "^1.6.1",
+        "@webpack-cli/configtest": "^1.1.0",
+        "@webpack-cli/info": "^1.4.0",
+        "@webpack-cli/serve": "^1.6.0",
         "colorette": "^2.0.14",
         "commander": "^7.0.0",
         "execa": "^5.0.0",
@@ -9181,6 +8998,12 @@
         }
       }
     },
+    "node_modules/webpack-cli/node_modules/colorette": {
+      "version": "2.0.16",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+      "dev": true
+    },
     "node_modules/webpack-cli/node_modules/commander": {
       "version": "7.2.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -9213,9 +9036,9 @@
       }
     },
     "node_modules/webpack-sources": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
-      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz",
+      "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
       "dev": true,
       "engines": {
         "node": ">=10.13.0"
@@ -9309,9 +9132,9 @@
       "dev": true
     },
     "node_modules/workerpool": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
-      "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+      "version": "6.1.5",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+      "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
       "dev": true
     },
     "node_modules/wrap-ansi": {
@@ -9449,9 +9272,9 @@
       "dev": true
     },
     "node_modules/yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+      "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
       "dev": true,
       "engines": {
         "node": ">= 6"
@@ -9546,15 +9369,6 @@
     }
   },
   "dependencies": {
-    "@ampproject/remapping": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
-      "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/trace-mapping": "^0.3.0"
-      }
-    },
     "@babel/code-frame": {
       "version": "7.16.7",
       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
@@ -9565,32 +9379,32 @@
       }
     },
     "@babel/compat-data": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
-      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz",
+      "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==",
       "dev": true
     },
     "@babel/core": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
-      "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.7.tgz",
+      "integrity": "sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA==",
       "dev": true,
       "requires": {
-        "@ampproject/remapping": "^2.1.0",
         "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
-        "@babel/helper-compilation-targets": "^7.17.7",
-        "@babel/helper-module-transforms": "^7.17.7",
-        "@babel/helpers": "^7.17.9",
-        "@babel/parser": "^7.17.9",
+        "@babel/generator": "^7.16.7",
+        "@babel/helper-compilation-targets": "^7.16.7",
+        "@babel/helper-module-transforms": "^7.16.7",
+        "@babel/helpers": "^7.16.7",
+        "@babel/parser": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0",
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7",
         "convert-source-map": "^1.7.0",
         "debug": "^4.1.0",
         "gensync": "^1.0.0-beta.2",
-        "json5": "^2.2.1",
-        "semver": "^6.3.0"
+        "json5": "^2.1.2",
+        "semver": "^6.3.0",
+        "source-map": "^0.5.0"
       },
       "dependencies": {
         "semver": {
@@ -9598,16 +9412,22 @@
           "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
           "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
           "dev": true
+        },
+        "source-map": {
+          "version": "0.5.7",
+          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+          "dev": true
         }
       }
     },
     "@babel/generator": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
-      "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz",
+      "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0",
+        "@babel/types": "^7.16.8",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
       },
@@ -9640,12 +9460,12 @@
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
-      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz",
+      "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.17.7",
+        "@babel/compat-data": "^7.16.4",
         "@babel/helper-validator-option": "^7.16.7",
         "browserslist": "^4.17.5",
         "semver": "^6.3.0"
@@ -9660,15 +9480,15 @@
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz",
-      "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz",
+      "integrity": "sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw==",
       "dev": true,
       "requires": {
         "@babel/helper-annotate-as-pure": "^7.16.7",
         "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
-        "@babel/helper-member-expression-to-functions": "^7.17.7",
+        "@babel/helper-function-name": "^7.16.7",
+        "@babel/helper-member-expression-to-functions": "^7.16.7",
         "@babel/helper-optimise-call-expression": "^7.16.7",
         "@babel/helper-replace-supers": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7"
@@ -9727,13 +9547,23 @@
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
-      "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz",
+      "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==",
       "dev": true,
       "requires": {
+        "@babel/helper-get-function-arity": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz",
+      "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==",
+      "dev": true,
+      "requires": {
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-hoist-variables": {
@@ -9746,12 +9576,12 @@
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
-      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz",
+      "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-module-imports": {
@@ -9764,19 +9594,19 @@
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
-      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz",
+      "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==",
       "dev": true,
       "requires": {
         "@babel/helper-environment-visitor": "^7.16.7",
         "@babel/helper-module-imports": "^7.16.7",
-        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-simple-access": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
         "@babel/helper-validator-identifier": "^7.16.7",
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.3",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-optimise-call-expression": {
@@ -9819,12 +9649,12 @@
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.17.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
-      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz",
+      "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.17.0"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
@@ -9870,14 +9700,14 @@
       }
     },
     "@babel/helpers": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
-      "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz",
+      "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==",
       "dev": true,
       "requires": {
         "@babel/template": "^7.16.7",
-        "@babel/traverse": "^7.17.9",
-        "@babel/types": "^7.17.0"
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/highlight": {
@@ -9892,9 +9722,9 @@
       }
     },
     "@babel/parser": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
-      "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz",
+      "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==",
       "dev": true
     },
     "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
@@ -10044,12 +9874,12 @@
       }
     },
     "@babel/plugin-proposal-private-methods": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
-      "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz",
+      "integrity": "sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.16.10",
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
         "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
@@ -10536,9 +10366,9 @@
       }
     },
     "@babel/preset-env": {
-      "version": "7.16.11",
-      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz",
-      "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.8.tgz",
+      "integrity": "sha512-9rNKgVCdwHb3z1IlbMyft6yIXIeP3xz6vWvGaLHrJThuEIqWfHb0DNBH9VuTgnDfdbUDhkmkvMZS/YMCtP7Elg==",
       "dev": true,
       "requires": {
         "@babel/compat-data": "^7.16.8",
@@ -10559,7 +10389,7 @@
         "@babel/plugin-proposal-object-rest-spread": "^7.16.7",
         "@babel/plugin-proposal-optional-catch-binding": "^7.16.7",
         "@babel/plugin-proposal-optional-chaining": "^7.16.7",
-        "@babel/plugin-proposal-private-methods": "^7.16.11",
+        "@babel/plugin-proposal-private-methods": "^7.16.7",
         "@babel/plugin-proposal-private-property-in-object": "^7.16.7",
         "@babel/plugin-proposal-unicode-property-regex": "^7.16.7",
         "@babel/plugin-syntax-async-generators": "^7.8.4",
@@ -10670,39 +10500,33 @@
       }
     },
     "@babel/traverse": {
-      "version": "7.17.9",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
-      "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz",
+      "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.16.7",
-        "@babel/generator": "^7.17.9",
+        "@babel/generator": "^7.16.8",
         "@babel/helper-environment-visitor": "^7.16.7",
-        "@babel/helper-function-name": "^7.17.9",
+        "@babel/helper-function-name": "^7.16.7",
         "@babel/helper-hoist-variables": "^7.16.7",
         "@babel/helper-split-export-declaration": "^7.16.7",
-        "@babel/parser": "^7.17.9",
-        "@babel/types": "^7.17.0",
+        "@babel/parser": "^7.16.8",
+        "@babel/types": "^7.16.8",
         "debug": "^4.1.0",
         "globals": "^11.1.0"
       }
     },
     "@babel/types": {
-      "version": "7.17.0",
-      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz",
-      "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz",
+      "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==",
       "dev": true,
       "requires": {
         "@babel/helper-validator-identifier": "^7.16.7",
         "to-fast-properties": "^2.0.0"
       }
     },
-    "@colors/colors": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
-      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
-      "dev": true
-    },
     "@discoveryjs/json-ext": {
       "version": "0.5.3",
       "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz",
@@ -10710,9 +10534,9 @@
       "dev": true
     },
     "@hapi/hoek": {
-      "version": "9.2.1",
-      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz",
-      "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==",
+      "version": "9.2.0",
+      "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz",
+      "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==",
       "dev": true
     },
     "@hapi/topo": {
@@ -10751,32 +10575,10 @@
       "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
       "dev": true
     },
-    "@jridgewell/resolve-uri": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz",
-      "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==",
-      "dev": true
-    },
-    "@jridgewell/sourcemap-codec": {
-      "version": "1.4.11",
-      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz",
-      "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==",
-      "dev": true
-    },
-    "@jridgewell/trace-mapping": {
-      "version": "0.3.7",
-      "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.7.tgz",
-      "integrity": "sha512-8XC0l0PwCbdg2Uc8zIIf6djNX3lYiz9GqQlC1LJ9WQvTYvcfP8IA9K2IKRnPm5tAX6X/+orF+WwKZ0doGcgJlg==",
-      "dev": true,
-      "requires": {
-        "@jridgewell/resolve-uri": "^3.0.3",
-        "@jridgewell/sourcemap-codec": "^1.4.10"
-      }
-    },
     "@sideway/address": {
-      "version": "4.1.4",
-      "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz",
-      "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==",
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.2.tgz",
+      "integrity": "sha512-idTz8ibqWFrPU8kMirL0CoPH/A29XOzzAzpyN3zQ4kAWnzmNfFmRaoMNN6VI8ske5M73HZyhIaW4OuSFIdM4oA==",
       "dev": true,
       "requires": {
         "@hapi/hoek": "^9.0.0"
@@ -10810,18 +10612,18 @@
       }
     },
     "@sinonjs/fake-timers": {
-      "version": "9.1.2",
-      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
-      "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-7.1.2.tgz",
+      "integrity": "sha512-iQADsW4LBMISqZ6Ci1dupJL9pprqwcVFTcOsEmQOEhW+KLCVn/Y4Jrvg2k19fIHCp+iFprriYPTdRcQR8NbUPg==",
       "dev": true,
       "requires": {
         "@sinonjs/commons": "^1.7.0"
       }
     },
     "@sinonjs/samsam": {
-      "version": "6.1.1",
-      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz",
-      "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==",
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.0.2.tgz",
+      "integrity": "sha512-jxPRPp9n93ci7b8hMfJOFDPRLFYadN6FSpeROFTR4UNF4i5b+EK6m4QXPO46BDhFgRy1JuS87zAnFOzCUwMJcQ==",
       "dev": true,
       "requires": {
         "@sinonjs/commons": "^1.6.0",
@@ -10835,12 +10637,6 @@
       "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
       "dev": true
     },
-    "@socket.io/base64-arraybuffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npmjs.org/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz",
-      "integrity": "sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==",
-      "dev": true
-    },
     "@szmarczak/http-timer": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
@@ -10869,9 +10665,9 @@
       "dev": true
     },
     "@types/eslint": {
-      "version": "8.4.1",
-      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz",
-      "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==",
+      "version": "7.28.0",
+      "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz",
+      "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==",
       "dev": true,
       "requires": {
         "@types/estree": "*",
@@ -10879,9 +10675,9 @@
       }
     },
     "@types/eslint-scope": {
-      "version": "3.7.3",
-      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
-      "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+      "version": "3.7.1",
+      "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz",
+      "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==",
       "dev": true,
       "requires": {
         "@types/eslint": "*",
@@ -10889,9 +10685,9 @@
       }
     },
     "@types/estree": {
-      "version": "0.0.51",
-      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
-      "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+      "version": "0.0.50",
+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
+      "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
       "dev": true
     },
     "@types/json-schema": {
@@ -10901,9 +10697,9 @@
       "dev": true
     },
     "@types/node": {
-      "version": "17.0.25",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.25.tgz",
-      "integrity": "sha512-wANk6fBrUwdpY4isjWrKTufkrXdu1D2YHCot2fD/DfWxF5sMrVSA+KN7ydckvaTCh0HiqX9IVl0L5/ZoXg5M7w==",
+      "version": "17.0.8",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.8.tgz",
+      "integrity": "sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==",
       "dev": true
     },
     "@types/parse-json": {
@@ -10913,9 +10709,9 @@
       "dev": true
     },
     "@types/url-parse": {
-      "version": "1.4.8",
-      "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.8.tgz",
-      "integrity": "sha512-zqqcGKyNWgTLFBxmaexGUKQyWqeG7HjXj20EuQJSJWwXe54BjX0ihIo5cJB9yAQzH8dNugJ9GvkBYMjPXs/PJw==",
+      "version": "1.4.6",
+      "resolved": "https://registry.npmjs.org/@types/url-parse/-/url-parse-1.4.6.tgz",
+      "integrity": "sha512-Xo6pU78oG9NNk5UJaumUXzrwu9hPiVN2N83mcdXQ1C3/R037fMPlVCh+LqP/2BELXMnlQH0sKec0u33ZnktqHQ==",
       "dev": true
     },
     "@ungap/promise-all-settled": {
@@ -11071,25 +10867,25 @@
       }
     },
     "@webpack-cli/configtest": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
-      "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz",
+      "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==",
       "dev": true,
       "requires": {}
     },
     "@webpack-cli/info": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz",
-      "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz",
+      "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==",
       "dev": true,
       "requires": {
         "envinfo": "^7.7.3"
       }
     },
     "@webpack-cli/serve": {
-      "version": "1.6.1",
-      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
-      "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz",
+      "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==",
       "dev": true,
       "requires": {}
     },
@@ -11267,21 +11063,21 @@
       "dev": true
     },
     "axios": {
-      "version": "0.26.1",
-      "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz",
-      "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==",
+      "version": "0.24.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
+      "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
       "requires": {
-        "follow-redirects": "^1.14.8"
+        "follow-redirects": "^1.14.4"
       }
     },
     "babel-loader": {
-      "version": "8.2.5",
-      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz",
-      "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==",
+      "version": "8.2.3",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
+      "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
       "dev": true,
       "requires": {
         "find-cache-dir": "^3.3.1",
-        "loader-utils": "^2.0.0",
+        "loader-utils": "^1.4.0",
         "make-dir": "^3.1.0",
         "schema-utils": "^2.6.5"
       },
@@ -11362,6 +11158,12 @@
       "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz",
       "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg=="
     },
+    "base64-arraybuffer": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
+      "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==",
+      "dev": true
+    },
     "base64id": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@@ -11498,7 +11300,6 @@
       "version": "1.1.8",
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
       "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
-      "dev": true,
       "requires": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -11647,16 +11448,15 @@
       }
     },
     "chai": {
-      "version": "4.3.6",
-      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
-      "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
+      "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
       "dev": true,
       "requires": {
         "assertion-error": "^1.1.0",
         "check-error": "^1.0.2",
         "deep-eql": "^3.0.1",
         "get-func-name": "^2.0.0",
-        "loupe": "^2.3.1",
         "pathval": "^1.1.1",
         "type-detect": "^4.0.5"
       }
@@ -11693,9 +11493,9 @@
       "dev": true
     },
     "chokidar": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
-      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "version": "3.5.2",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
+      "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
       "dev": true,
       "requires": {
         "anymatch": "~3.1.2",
@@ -11742,47 +11542,13 @@
       }
     },
     "cli-truncate": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz",
-      "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==",
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
       "dev": true,
       "requires": {
-        "slice-ansi": "^5.0.0",
-        "string-width": "^5.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "6.0.1",
-          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
-          "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
-          "dev": true
-        },
-        "emoji-regex": {
-          "version": "9.2.2",
-          "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
-          "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
-          "dev": true
-        },
-        "string-width": {
-          "version": "5.1.2",
-          "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
-          "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
-          "dev": true,
-          "requires": {
-            "eastasianwidth": "^0.2.0",
-            "emoji-regex": "^9.2.2",
-            "strip-ansi": "^7.0.1"
-          }
-        },
-        "strip-ansi": {
-          "version": "7.0.1",
-          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
-          "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^6.0.1"
-          }
-        }
+        "slice-ansi": "^3.0.0",
+        "string-width": "^4.2.0"
       }
     },
     "cliui": {
@@ -11832,9 +11598,9 @@
       "dev": true
     },
     "colorette": {
-      "version": "2.0.16",
-      "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
-      "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+      "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
       "dev": true
     },
     "colors": {
@@ -11870,13 +11636,12 @@
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
-      "dev": true
+      "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
     },
     "concurrently": {
-      "version": "7.1.0",
-      "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-7.1.0.tgz",
-      "integrity": "sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==",
+      "version": "6.5.1",
+      "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-6.5.1.tgz",
+      "integrity": "sha512-FlSwNpGjWQfRwPLXvJ/OgysbBxPkWpiVjy1042b0U7on7S7qwwMIILRj7WTN1mTgqa582bG6NFuScOoh6Zgdag==",
       "dev": true,
       "requires": {
         "chalk": "^4.1.0",
@@ -12117,15 +11882,15 @@
       "dev": true
     },
     "date-format": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.7.tgz",
-      "integrity": "sha512-k5xqlzDGIfv2N/DHR/BR8Kc4N9CRy9ReuDkmdxeX/jNfit94QXd36emWMm40ZOEDKNm/c91yV9EO3uGPkR7wWQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz",
+      "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==",
       "dev": true
     },
     "debug": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
-      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+      "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
       "dev": true,
       "requires": {
         "ms": "2.1.2"
@@ -12252,12 +12017,6 @@
       "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
       "dev": true
     },
-    "eastasianwidth": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
-      "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
-      "dev": true
-    },
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -12298,9 +12057,9 @@
       }
     },
     "engine.io": {
-      "version": "6.1.3",
-      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.3.tgz",
-      "integrity": "sha512-rqs60YwkvWTLLnfazqgZqLa/aKo+9cueVfEi/dZ8PyGyaf8TLOxj++4QMIgeG3Gn0AhrWiFXvghsoY9L9h25GA==",
+      "version": "6.1.0",
+      "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz",
+      "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==",
       "dev": true,
       "requires": {
         "@types/cookie": "^0.4.1",
@@ -12311,29 +12070,38 @@
         "cookie": "~0.4.1",
         "cors": "~2.8.5",
         "debug": "~4.3.1",
-        "engine.io-parser": "~5.0.3",
+        "engine.io-parser": "~5.0.0",
         "ws": "~8.2.3"
       }
     },
     "engine.io-parser": {
-      "version": "5.0.3",
-      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.3.tgz",
-      "integrity": "sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==",
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.2.tgz",
+      "integrity": "sha512-wuiO7qO/OEkPJSFueuATIXtrxF7/6GTbAO9QLv7nnbjwZ5tYhLm9zxvLwxstRs0dcT0KUlWTjtIOs1T86jt12g==",
       "dev": true,
       "requires": {
-        "@socket.io/base64-arraybuffer": "~1.0.2"
+        "base64-arraybuffer": "~1.0.1"
       }
     },
     "enhanced-resolve": {
-      "version": "5.9.3",
-      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
-      "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
+      "version": "5.8.3",
+      "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz",
+      "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.4",
         "tapable": "^2.2.0"
       }
     },
+    "enquirer": {
+      "version": "2.3.6",
+      "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+      "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+      "dev": true,
+      "requires": {
+        "ansi-colors": "^4.1.1"
+      }
+    },
     "ent": {
       "version": "2.2.0",
       "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
@@ -12667,15 +12435,15 @@
       "dev": true
     },
     "flatted": {
-      "version": "3.2.5",
-      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
-      "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
+      "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
       "dev": true
     },
     "follow-redirects": {
-      "version": "1.14.9",
-      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
-      "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w=="
+      "version": "1.14.7",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
+      "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="
     },
     "foreground-child": {
       "version": "2.0.0",
@@ -12737,14 +12505,14 @@
       "dev": true
     },
     "fs-extra": {
-      "version": "10.1.0",
-      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
-      "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+      "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.2.0",
-        "jsonfile": "^6.0.1",
-        "universalify": "^2.0.0"
+        "jsonfile": "^4.0.0",
+        "universalify": "^0.1.0"
       }
     },
     "fs.realpath": {
@@ -12795,6 +12563,12 @@
         "has-symbols": "^1.0.1"
       }
     },
+    "get-own-enumerable-property-symbols": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
+      "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+      "dev": true
+    },
     "get-package-type": {
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -12808,9 +12582,9 @@
       "dev": true
     },
     "glob": {
-      "version": "7.2.0",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
-      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "version": "7.1.6",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+      "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
       "dev": true,
       "requires": {
         "fs.realpath": "^1.0.0",
@@ -12819,17 +12593,6 @@
         "minimatch": "^3.0.4",
         "once": "^1.3.0",
         "path-is-absolute": "^1.0.0"
-      },
-      "dependencies": {
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        }
       }
     },
     "glob-parent": {
@@ -13317,6 +13080,12 @@
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
       "dev": true
     },
+    "is-obj": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+      "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+      "dev": true
+    },
     "is-path-inside": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
@@ -13347,6 +13116,12 @@
         "has": "^1.0.1"
       }
     },
+    "is-regexp": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "dev": true
+    },
     "is-stream": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
@@ -13599,14 +13374,14 @@
       }
     },
     "joi": {
-      "version": "17.6.0",
-      "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz",
-      "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==",
+      "version": "17.4.2",
+      "resolved": "https://registry.npmjs.org/joi/-/joi-17.4.2.tgz",
+      "integrity": "sha512-Lm56PP+n0+Z2A2rfRvsfWVDXGEWjXxatPopkQ8qQ5mxCEhwHG+Ettgg5o98FFaxilOxozoa14cFhrE/hOzh/Nw==",
       "dev": true,
       "requires": {
         "@hapi/hoek": "^9.0.0",
         "@hapi/topo": "^5.0.0",
-        "@sideway/address": "^4.1.3",
+        "@sideway/address": "^4.1.0",
         "@sideway/formula": "^3.0.0",
         "@sideway/pinpoint": "^2.0.0"
       }
@@ -13664,19 +13439,21 @@
       "dev": true
     },
     "json5": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
-      "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
-      "dev": true
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
+      "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
+      }
     },
     "jsonfile": {
-      "version": "6.1.0",
-      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
-      "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
       "dev": true,
       "requires": {
-        "graceful-fs": "^4.1.6",
-        "universalify": "^2.0.0"
+        "graceful-fs": "^4.1.6"
       }
     },
     "jsonify": {
@@ -13692,15 +13469,15 @@
       "dev": true
     },
     "karma": {
-      "version": "6.3.19",
-      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.19.tgz",
-      "integrity": "sha512-NDhWckzES/Y9xMiddyU1RzaKL76/scCsu8Mp0vR0Z3lQRvC3p72+Ab4ppoxs36S9tyPNX5V48yvaV++RNEBPZw==",
+      "version": "6.3.10",
+      "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz",
+      "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==",
       "dev": true,
       "requires": {
-        "@colors/colors": "1.5.0",
         "body-parser": "^1.19.0",
         "braces": "^3.0.2",
         "chokidar": "^3.5.1",
+        "colors": "^1.4.0",
         "connect": "^3.7.0",
         "di": "^0.0.1",
         "dom-serialize": "^2.2.1",
@@ -13709,36 +13486,31 @@
         "http-proxy": "^1.18.1",
         "isbinaryfile": "^4.0.8",
         "lodash": "^4.17.21",
-        "log4js": "^6.4.1",
+        "log4js": "^6.3.0",
         "mime": "^2.5.2",
         "minimatch": "^3.0.4",
-        "mkdirp": "^0.5.5",
         "qjobs": "^1.2.0",
         "range-parser": "^1.2.1",
         "rimraf": "^3.0.2",
-        "socket.io": "^4.4.1",
+        "socket.io": "^4.2.0",
         "source-map": "^0.6.1",
         "tmp": "^0.2.1",
         "ua-parser-js": "^0.7.30",
         "yargs": "^16.1.1"
       },
       "dependencies": {
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.6",
-          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
-          "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+        "glob": {
+          "version": "7.1.7",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+          "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
           "dev": true,
           "requires": {
-            "minimist": "^1.2.6"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -13751,9 +13523,9 @@
       "requires": {}
     },
     "karma-chrome-launcher": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz",
-      "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==",
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz",
+      "integrity": "sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg==",
       "dev": true,
       "requires": {
         "which": "^1.2.1"
@@ -13797,9 +13569,9 @@
       "requires": {}
     },
     "karma-spec-reporter": {
-      "version": "0.0.34",
-      "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.34.tgz",
-      "integrity": "sha512-l5H/Nh9q4g2Ysx2CDU2m+NIPyLQpCVbk9c4V02BTZHw3NM6RO1dq3eRpKXCSSdPt4RGfhHk8jDt3XYkGp+5PWg==",
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/karma-spec-reporter/-/karma-spec-reporter-0.0.33.tgz",
+      "integrity": "sha512-xRVevDUkiIVhKbDQ3CmeGEpyzA4b3HeVl95Sx5yJAvurpdKUSYF6ZEbQOqKJ7vrtDniABV1hyFez9KX9+7ruBA==",
       "dev": true,
       "requires": {
         "colors": "1.4.0"
@@ -13814,17 +13586,6 @@
         "glob": "^7.1.3",
         "minimatch": "^3.0.4",
         "webpack-merge": "^4.1.5"
-      },
-      "dependencies": {
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        }
       }
     },
     "keyv": {
@@ -13856,12 +13617,6 @@
       "resolved": "https://registry.npmjs.org/layerr/-/layerr-0.1.2.tgz",
       "integrity": "sha512-ob5kTd9H3S4GOG2nVXyQhOu9O8nBgP555XxWPkJI0tR0JeRilfyTp8WtPdIJHLXBmHMSdEq5+KMxiYABeScsIQ=="
     },
-    "lilconfig": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz",
-      "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==",
-      "dev": true
-    },
     "lines-and-columns": {
       "version": "1.1.6",
       "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
@@ -13869,25 +13624,25 @@
       "dev": true
     },
     "lint-staged": {
-      "version": "12.3.8",
-      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.3.8.tgz",
-      "integrity": "sha512-0+UpNaqIwKRSGAFOCcpuYNIv/j5QGVC+xUVvmSdxHO+IfIGoHbFLo3XcPmV/LLnsVj5EAncNHVtlITSoY5qWGQ==",
+      "version": "11.2.6",
+      "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.2.6.tgz",
+      "integrity": "sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg==",
       "dev": true,
       "requires": {
-        "cli-truncate": "^3.1.0",
-        "colorette": "^2.0.16",
-        "commander": "^8.3.0",
-        "debug": "^4.3.3",
+        "cli-truncate": "2.1.0",
+        "colorette": "^1.4.0",
+        "commander": "^8.2.0",
+        "cosmiconfig": "^7.0.1",
+        "debug": "^4.3.2",
+        "enquirer": "^2.3.6",
         "execa": "^5.1.1",
-        "lilconfig": "2.0.4",
-        "listr2": "^4.0.1",
+        "listr2": "^3.12.2",
         "micromatch": "^4.0.4",
         "normalize-path": "^3.0.0",
-        "object-inspect": "^1.12.0",
-        "pidtree": "^0.5.0",
-        "string-argv": "^0.3.1",
-        "supports-color": "^9.2.1",
-        "yaml": "^1.10.2"
+        "please-upgrade-node": "^3.2.0",
+        "string-argv": "0.3.1",
+        "stringify-object": "3.3.0",
+        "supports-color": "8.1.1"
       },
       "dependencies": {
         "commander": {
@@ -13896,24 +13651,27 @@
           "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
           "dev": true
         },
-        "pidtree": {
-          "version": "0.5.0",
-          "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz",
-          "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
+        "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
         },
         "supports-color": {
-          "version": "9.2.2",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz",
-          "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==",
-          "dev": true
+          "version": "8.1.1",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+          "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
         }
       }
     },
     "listr2": {
-      "version": "4.0.5",
-      "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz",
-      "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==",
+      "version": "3.14.0",
+      "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz",
+      "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==",
       "dev": true,
       "requires": {
         "cli-truncate": "^2.1.0",
@@ -13921,65 +13679,26 @@
         "log-update": "^4.0.0",
         "p-map": "^4.0.0",
         "rfdc": "^1.3.0",
-        "rxjs": "^7.5.5",
+        "rxjs": "^7.5.1",
         "through": "^2.3.8",
         "wrap-ansi": "^7.0.0"
       },
       "dependencies": {
-        "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,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "cli-truncate": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
-          "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
-          "dev": true,
-          "requires": {
-            "slice-ansi": "^3.0.0",
-            "string-width": "^4.2.0"
-          }
-        },
-        "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,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "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==",
+        "colorette": {
+          "version": "2.0.16",
+          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+          "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
           "dev": true
         },
         "rxjs": {
-          "version": "7.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-          "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+          "version": "7.5.2",
+          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.2.tgz",
+          "integrity": "sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==",
           "dev": true,
           "requires": {
             "tslib": "^2.1.0"
           }
         },
-        "slice-ansi": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
-          "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.0.0",
-            "astral-regex": "^2.0.0",
-            "is-fullwidth-code-point": "^3.0.0"
-          }
-        },
         "tslib": {
           "version": "2.3.1",
           "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -14007,14 +13726,25 @@
       "dev": true
     },
     "loader-utils": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz",
-      "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==",
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+      "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
       "dev": true,
       "requires": {
         "big.js": "^5.2.2",
         "emojis-list": "^3.0.0",
-        "json5": "^2.1.2"
+        "json5": "^1.0.1"
+      },
+      "dependencies": {
+        "json5": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+          "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+          "dev": true,
+          "requires": {
+            "minimist": "^1.2.0"
+          }
+        }
       }
     },
     "locate-path": {
@@ -14178,25 +13908,16 @@
       }
     },
     "log4js": {
-      "version": "6.4.5",
-      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.4.5.tgz",
-      "integrity": "sha512-43RJcYZ7nfUxpPO2woTl8CJ0t5+gucLJZ43mtp2PlInT+LygCp/bl6hNJtKulCJ+++fQsjIv4EO3Mp611PfeLQ==",
-      "dev": true,
-      "requires": {
-        "date-format": "^4.0.7",
-        "debug": "^4.3.4",
-        "flatted": "^3.2.5",
-        "rfdc": "^1.3.0",
-        "streamroller": "^3.0.7"
-      }
-    },
-    "loupe": {
-      "version": "2.3.4",
-      "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
-      "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.3.0.tgz",
+      "integrity": "sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw==",
       "dev": true,
       "requires": {
-        "get-func-name": "^2.0.0"
+        "date-format": "^3.0.0",
+        "debug": "^4.1.1",
+        "flatted": "^2.0.1",
+        "rfdc": "^1.1.4",
+        "streamroller": "^2.2.4"
       }
     },
     "lowercase-keys": {
@@ -14304,27 +14025,17 @@
       "dev": true
     },
     "minimatch": {
-      "version": "5.0.1",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
-      "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+      "version": "3.0.4",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+      "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "requires": {
-        "brace-expansion": "^2.0.1"
-      },
-      "dependencies": {
-        "brace-expansion": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
-          "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
-          "requires": {
-            "balanced-match": "^1.0.0"
-          }
-        }
+        "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
-      "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+      "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
     "mkdirp": {
@@ -14334,32 +14045,32 @@
       "dev": true
     },
     "mocha": {
-      "version": "9.2.2",
-      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz",
-      "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==",
+      "version": "9.1.3",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
+      "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
       "dev": true,
       "requires": {
         "@ungap/promise-all-settled": "1.1.2",
         "ansi-colors": "4.1.1",
         "browser-stdout": "1.3.1",
-        "chokidar": "3.5.3",
-        "debug": "4.3.3",
+        "chokidar": "3.5.2",
+        "debug": "4.3.2",
         "diff": "5.0.0",
         "escape-string-regexp": "4.0.0",
         "find-up": "5.0.0",
-        "glob": "7.2.0",
+        "glob": "7.1.7",
         "growl": "1.10.5",
         "he": "1.2.0",
         "js-yaml": "4.1.0",
         "log-symbols": "4.1.0",
-        "minimatch": "4.2.1",
+        "minimatch": "3.0.4",
         "ms": "2.1.3",
-        "nanoid": "3.3.1",
+        "nanoid": "3.1.25",
         "serialize-javascript": "6.0.0",
         "strip-json-comments": "3.1.1",
         "supports-color": "8.1.1",
         "which": "2.0.2",
-        "workerpool": "6.2.0",
+        "workerpool": "6.1.5",
         "yargs": "16.2.0",
         "yargs-parser": "20.2.4",
         "yargs-unparser": "2.0.0"
@@ -14371,23 +14082,6 @@
           "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
           "dev": true
         },
-        "debug": {
-          "version": "4.3.3",
-          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz",
-          "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==",
-          "dev": true,
-          "requires": {
-            "ms": "2.1.2"
-          },
-          "dependencies": {
-            "ms": {
-              "version": "2.1.2",
-              "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
-              "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
-              "dev": true
-            }
-          }
-        },
         "escape-string-regexp": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -14404,6 +14098,20 @@
             "path-exists": "^4.0.0"
           }
         },
+        "glob": {
+          "version": "7.1.7",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
+          "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+          "dev": true,
+          "requires": {
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
+          }
+        },
         "has-flag": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -14428,15 +14136,6 @@
             "p-locate": "^5.0.0"
           }
         },
-        "minimatch": {
-          "version": "4.2.1",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz",
-          "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
         "ms": {
           "version": "2.1.3",
           "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -14500,9 +14199,9 @@
       "dev": true
     },
     "nanoid": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz",
-      "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==",
+      "version": "3.1.25",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
+      "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
       "dev": true
     },
     "negotiator": {
@@ -14529,22 +14228,22 @@
       "dev": true
     },
     "nise": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz",
-      "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==",
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.0.tgz",
+      "integrity": "sha512-W5WlHu+wvo3PaKLsJJkgPup2LrsXCcm7AWwyNZkUnn5rwPkuPBi3Iwk5SQtN0mv+K65k7nKKjwNQ30wg3wLAQQ==",
       "dev": true,
       "requires": {
-        "@sinonjs/commons": "^1.8.3",
-        "@sinonjs/fake-timers": ">=5",
+        "@sinonjs/commons": "^1.7.0",
+        "@sinonjs/fake-timers": "^7.0.4",
         "@sinonjs/text-encoding": "^0.7.1",
         "just-extend": "^4.0.2",
         "path-to-regexp": "^1.7.0"
       }
     },
     "nock": {
-      "version": "13.2.4",
-      "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz",
-      "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==",
+      "version": "13.2.2",
+      "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.2.tgz",
+      "integrity": "sha512-PcBHuvl9i6zfaJ50A7LS55oU+nFLv8htXIhffJO+FxyfibdZ4jEvd9kTuvkrJireBFIGMZ+oUIRpMK5gU9h//g==",
       "dev": true,
       "requires": {
         "debug": "^4.1.0",
@@ -14595,15 +14294,6 @@
             "ms": "^2.1.1"
           }
         },
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
         "semver": {
           "version": "5.7.1",
           "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
@@ -14675,15 +14365,6 @@
             "which": "^1.2.9"
           }
         },
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
         "read-pkg": {
           "version": "3.0.0",
           "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
@@ -14850,12 +14531,6 @@
       "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
       "dev": true
     },
-    "object-inspect": {
-      "version": "1.12.0",
-      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
-      "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
-      "dev": true
-    },
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
@@ -15111,9 +14786,9 @@
       "dev": true
     },
     "prettier": {
-      "version": "2.6.2",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
-      "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+      "version": "1.19.1",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
       "dev": true
     },
     "prettier-check": {
@@ -15591,19 +15266,28 @@
       "dev": true
     },
     "sinon": {
-      "version": "13.0.2",
-      "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
-      "integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
+      "version": "12.0.1",
+      "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
+      "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
       "dev": true,
       "requires": {
         "@sinonjs/commons": "^1.8.3",
-        "@sinonjs/fake-timers": "^9.1.2",
-        "@sinonjs/samsam": "^6.1.1",
+        "@sinonjs/fake-timers": "^8.1.0",
+        "@sinonjs/samsam": "^6.0.2",
         "diff": "^5.0.0",
-        "nise": "^5.1.1",
+        "nise": "^5.1.0",
         "supports-color": "^7.2.0"
       },
       "dependencies": {
+        "@sinonjs/fake-timers": {
+          "version": "8.1.0",
+          "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
+          "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+          "dev": true,
+          "requires": {
+            "@sinonjs/commons": "^1.7.0"
+          }
+        },
         "has-flag": {
           "version": "4.0.0",
           "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -15628,25 +15312,38 @@
       "dev": true
     },
     "slice-ansi": {
-      "version": "5.0.0",
-      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz",
-      "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==",
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
       "dev": true,
       "requires": {
-        "ansi-styles": "^6.0.0",
-        "is-fullwidth-code-point": "^4.0.0"
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
       },
       "dependencies": {
         "ansi-styles": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
-          "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
-          "dev": true
+          "version": "4.3.0",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
         },
-        "is-fullwidth-code-point": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz",
-          "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==",
+        "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,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "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
         }
       }
@@ -15780,14 +15477,22 @@
       "dev": true
     },
     "streamroller": {
-      "version": "3.0.7",
-      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.0.7.tgz",
-      "integrity": "sha512-kh68kwiDGuIPiPDWwRbEC5us+kfARP1e9AsQiaLaSqGrctOvMn0mtL8iNY3r4/o5nIoYi3gPI1jexguZsXDlxw==",
+      "version": "2.2.4",
+      "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz",
+      "integrity": "sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ==",
       "dev": true,
       "requires": {
-        "date-format": "^4.0.7",
-        "debug": "^4.3.4",
-        "fs-extra": "^10.0.1"
+        "date-format": "^2.1.0",
+        "debug": "^4.1.1",
+        "fs-extra": "^8.1.0"
+      },
+      "dependencies": {
+        "date-format": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz",
+          "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==",
+          "dev": true
+        }
       }
     },
     "string-argv": {
@@ -15818,6 +15523,17 @@
         "function-bind": "^1.0.2"
       }
     },
+    "stringify-object": {
+      "version": "3.3.0",
+      "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+      "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+      "dev": true,
+      "requires": {
+        "get-own-enumerable-property-symbols": "^3.0.0",
+        "is-obj": "^1.0.1",
+        "is-regexp": "^1.0.0"
+      }
+    },
     "strip-ansi": {
       "version": "6.0.0",
       "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
@@ -15941,17 +15657,6 @@
         "@istanbuljs/schema": "^0.1.2",
         "glob": "^7.1.4",
         "minimatch": "^3.0.4"
-      },
-      "dependencies": {
-        "minimatch": {
-          "version": "3.1.2",
-          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-          "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-          "dev": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        }
       }
     },
     "through": {
@@ -16049,9 +15754,9 @@
       }
     },
     "typescript": {
-      "version": "4.6.3",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz",
-      "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==",
+      "version": "4.5.4",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz",
+      "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==",
       "dev": true
     },
     "ua-parser-js": {
@@ -16104,9 +15809,9 @@
       }
     },
     "universalify": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
-      "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+      "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
       "dev": true
     },
     "unpipe": {
@@ -16227,9 +15932,9 @@
       "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA=="
     },
     "url-parse": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
-      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "version": "1.5.4",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",
+      "integrity": "sha512-ITeAByWWoqutFClc/lRZnFplgXgEZr3WJ6XngMM/N9DMIm4K8zXPCZ1Jdu0rERwO84w1WC5wkle2ubwTA4NTBg==",
       "requires": {
         "querystringify": "^2.1.1",
         "requires-port": "^1.0.0"
@@ -16279,40 +15984,40 @@
       "dev": true
     },
     "wait-on": {
-      "version": "6.0.1",
-      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz",
-      "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==",
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.0.tgz",
+      "integrity": "sha512-tnUJr9p5r+bEYXPUdRseolmz5XqJTTj98JgOsfBn7Oz2dxfE2g3zw1jE+Mo8lopM3j3et/Mq1yW7kKX6qw7RVw==",
       "dev": true,
       "requires": {
-        "axios": "^0.25.0",
-        "joi": "^17.6.0",
+        "axios": "^0.21.1",
+        "joi": "^17.4.0",
         "lodash": "^4.17.21",
         "minimist": "^1.2.5",
-        "rxjs": "^7.5.4"
+        "rxjs": "^7.1.0"
       },
       "dependencies": {
         "axios": {
-          "version": "0.25.0",
-          "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz",
-          "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
+          "version": "0.21.4",
+          "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz",
+          "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==",
           "dev": true,
           "requires": {
-            "follow-redirects": "^1.14.7"
+            "follow-redirects": "^1.14.0"
           }
         },
         "rxjs": {
-          "version": "7.5.5",
-          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz",
-          "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==",
+          "version": "7.3.0",
+          "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.3.0.tgz",
+          "integrity": "sha512-p2yuGIg9S1epc3vrjKf6iVb3RCaAYjYskkO+jHIaV0IjOPlJop4UnodOoFb2xeNwlguqLYvGw1b1McillYb5Gw==",
           "dev": true,
           "requires": {
-            "tslib": "^2.1.0"
+            "tslib": "~2.1.0"
           }
         },
         "tslib": {
-          "version": "2.3.1",
-          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
-          "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==",
+          "version": "2.1.0",
+          "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
+          "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
           "dev": true
         }
       }
@@ -16338,13 +16043,13 @@
       }
     },
     "webpack": {
-      "version": "5.72.0",
-      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.72.0.tgz",
-      "integrity": "sha512-qmSmbspI0Qo5ld49htys8GY9XhS9CGqFoHTsOVAnjBdg0Zn79y135R+k4IR4rKK6+eKaabMhJwiVB7xw0SJu5w==",
+      "version": "5.65.0",
+      "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz",
+      "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==",
       "dev": true,
       "requires": {
-        "@types/eslint-scope": "^3.7.3",
-        "@types/estree": "^0.0.51",
+        "@types/eslint-scope": "^3.7.0",
+        "@types/estree": "^0.0.50",
         "@webassemblyjs/ast": "1.11.1",
         "@webassemblyjs/wasm-edit": "1.11.1",
         "@webassemblyjs/wasm-parser": "1.11.1",
@@ -16352,12 +16057,12 @@
         "acorn-import-assertions": "^1.7.6",
         "browserslist": "^4.14.5",
         "chrome-trace-event": "^1.0.2",
-        "enhanced-resolve": "^5.9.2",
+        "enhanced-resolve": "^5.8.3",
         "es-module-lexer": "^0.9.0",
         "eslint-scope": "5.1.1",
         "events": "^3.2.0",
         "glob-to-regexp": "^0.4.1",
-        "graceful-fs": "^4.2.9",
+        "graceful-fs": "^4.2.4",
         "json-parse-better-errors": "^1.0.2",
         "loader-runner": "^4.2.0",
         "mime-types": "^2.1.27",
@@ -16366,7 +16071,7 @@
         "tapable": "^2.1.1",
         "terser-webpack-plugin": "^5.1.3",
         "watchpack": "^2.3.1",
-        "webpack-sources": "^3.2.3"
+        "webpack-sources": "^3.2.2"
       },
       "dependencies": {
         "@types/json-schema": {
@@ -16404,15 +16109,15 @@
       }
     },
     "webpack-cli": {
-      "version": "4.9.2",
-      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz",
-      "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==",
+      "version": "4.9.1",
+      "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
+      "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
       "dev": true,
       "requires": {
         "@discoveryjs/json-ext": "^0.5.0",
-        "@webpack-cli/configtest": "^1.1.1",
-        "@webpack-cli/info": "^1.4.1",
-        "@webpack-cli/serve": "^1.6.1",
+        "@webpack-cli/configtest": "^1.1.0",
+        "@webpack-cli/info": "^1.4.0",
+        "@webpack-cli/serve": "^1.6.0",
         "colorette": "^2.0.14",
         "commander": "^7.0.0",
         "execa": "^5.0.0",
@@ -16423,6 +16128,12 @@
         "webpack-merge": "^5.7.3"
       },
       "dependencies": {
+        "colorette": {
+          "version": "2.0.16",
+          "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz",
+          "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==",
+          "dev": true
+        },
         "commander": {
           "version": "7.2.0",
           "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
@@ -16451,9 +16162,9 @@
       }
     },
     "webpack-sources": {
-      "version": "3.2.3",
-      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
-      "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+      "version": "3.2.2",
+      "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz",
+      "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==",
       "dev": true
     },
     "which": {
@@ -16493,9 +16204,9 @@
       "dev": true
     },
     "workerpool": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz",
-      "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==",
+      "version": "6.1.5",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
+      "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
       "dev": true
     },
     "wrap-ansi": {
@@ -16597,9 +16308,9 @@
       "dev": true
     },
     "yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
-      "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
+      "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
       "dev": true
     },
     "yargs": {
diff --git a/package.json b/package.json
index 908012f..c4c6892 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "webdav",
-  "version": "4.9.0",
+  "version": "4.8.0",
   "description": "WebDAV client for NodeJS",
   "main": "dist/node/index.js",
   "scripts": {
@@ -57,58 +57,58 @@
   },
   "homepage": "https://github.com/perry-mitchell/webdav-client#readme",
   "dependencies": {
-    "axios": "^0.26.1",
+    "axios": "^0.24.0",
     "base-64": "^1.0.0",
     "fast-xml-parser": "^3.19.0",
     "he": "^1.2.0",
     "hot-patcher": "^0.5.0",
     "layerr": "^0.1.2",
     "md5": "^2.3.0",
-    "minimatch": "^5.0.1",
+    "minimatch": "^3.0.4",
     "nested-property": "^4.0.0",
     "path-posix": "^1.0.0",
     "url-join": "^4.0.1",
-    "url-parse": "^1.5.10"
+    "url-parse": "^1.5.3"
   },
   "devDependencies": {
-    "@babel/core": "^7.17.9",
-    "@babel/preset-env": "^7.16.11",
+    "@babel/core": "^7.15.0",
+    "@babel/preset-env": "^7.15.0",
     "@babel/preset-typescript": "^7.15.0",
-    "@types/node": "^17.0.25",
-    "@types/url-parse": "^1.4.8",
-    "babel-loader": "^8.2.5",
+    "@types/node": "^17.0.8",
+    "@types/url-parse": "^1.4.4",
+    "babel-loader": "^8.2.2",
     "babel-plugin-transform-async-to-promises": "^0.8.18",
     "buffer-equals": "^2.0.0",
-    "chai": "^4.3.6",
+    "chai": "^4.3.4",
     "chai-as-promised": "^7.1.1",
-    "concurrently": "^7.1.0",
+    "concurrently": "^6.2.1",
     "copy-dir": "^1.3.0",
     "directory-exists": "^2.0.1",
     "exists-file": "^3.0.2",
     "husky": "^4.3.8",
-    "karma": "^6.3.19",
+    "karma": "^6.3.4",
     "karma-chai": "^0.1.0",
-    "karma-chrome-launcher": "^3.1.1",
+    "karma-chrome-launcher": "^3.1.0",
     "karma-firefox-launcher": "^2.1.1",
     "karma-mocha": "^2.0.1",
     "karma-sinon": "^1.0.5",
-    "karma-spec-reporter": "^0.0.34",
+    "karma-spec-reporter": "^0.0.33",
     "karma-webpack": "^5.0.0",
-    "lint-staged": "^12.3.8",
+    "lint-staged": "^11.1.2",
     "mkdirp": "^1.0.4",
-    "mocha": "^9.2.2",
-    "nock": "^13.2.4",
+    "mocha": "^9.1.0",
+    "nock": "^13.1.2",
     "nodemon": "^2.0.12",
     "npm-run-all": "^4.1.5",
     "nyc": "^15.1.0",
-    "prettier": "^2.6.2",
+    "prettier": "^1.19.1",
     "prettier-check": "^2.0.0",
     "rimraf": "^3.0.2",
-    "sinon": "^13.0.2",
-    "typescript": "^4.6.3",
-    "wait-on": "^6.0.1",
+    "sinon": "^12.0.1",
+    "typescript": "^4.3.5",
+    "wait-on": "^6.0.0",
     "webdav-server": "^2.6.2",
-    "webpack": "^5.72.0",
-    "webpack-cli": "^4.9.2"
+    "webpack": "^5.51.1",
+    "webpack-cli": "^4.8.0"
   }
 }
diff --git a/source/operations/getQuota.ts b/source/operations/getQuota.ts
index ba05b30..70b8206 100644
--- a/source/operations/getQuota.ts
+++ b/source/operations/getQuota.ts
@@ -9,10 +9,9 @@ export async function getQuota(
     context: WebDAVClientContext,
     options: GetQuotaOptions = {}
 ): Promise<DiskQuota | null | ResponseDataDetailed<DiskQuota | null>> {
-    const path = options.path || "/";
     const requestOptions = prepareRequestOptions(
         {
-            url: joinURL(context.remoteURL, path),
+            url: joinURL(context.remoteURL, "/"),
             method: "PROPFIND",
             headers: {
                 Accept: "text/plain",
diff --git a/source/operations/putFileContents.ts b/source/operations/putFileContents.ts
index 72b2ade..1cdab22 100644
--- a/source/operations/putFileContents.ts
+++ b/source/operations/putFileContents.ts
@@ -28,12 +28,7 @@ export async function putFileContents(
     const headers: Headers = {
         "Content-Type": "application/octet-stream"
     };
-    if (
-        typeof WEB === "undefined" &&
-        typeof Stream !== "undefined" &&
-        typeof Stream?.Readable !== "undefined" &&
-        data instanceof Stream.Readable
-    ) {
+    if (typeof WEB === "undefined" && data instanceof Stream.Readable) {
         // Skip, no content-length
     } else if (contentLength === false) {
         // Skip, disabled
diff --git a/source/request.ts b/source/request.ts
index 4a8b7d2..87d9433 100644
--- a/source/request.ts
+++ b/source/request.ts
@@ -86,7 +86,7 @@ export function request(requestOptions: RequestOptionsWithState): Promise<Respon
     }
 
     // Perform the request and handle digest authentication
-    return _request(requestOptions).then(function (response: Response) {
+    return _request(requestOptions).then(function(response: Response) {
         if (response.status == 401) {
             _digest.hasDigestAuth = parseDigestAuth(response, _digest);
 
@@ -97,7 +97,7 @@ export function request(requestOptions: RequestOptionsWithState): Promise<Respon
                     }
                 });
 
-                return _request(requestOptions).then(function (response2: Response) {
+                return _request(requestOptions).then(function(response2: Response) {
                     if (response2.status == 401) {
                         _digest.hasDigestAuth = false;
                     } else {
diff --git a/source/tools/path.ts b/source/tools/path.ts
index 71db964..bb786fc 100644
--- a/source/tools/path.ts
+++ b/source/tools/path.ts
@@ -6,7 +6,11 @@ const SEP_PATH_WINDOWS = "__PATH_SEPARATOR_WINDOWS__";
 export function encodePath(path) {
     const replaced = path.replace(/\//g, SEP_PATH_POSIX).replace(/\\\\/g, SEP_PATH_WINDOWS);
     const formatted = encodeURIComponent(replaced);
-    return formatted.split(SEP_PATH_WINDOWS).join("\\\\").split(SEP_PATH_POSIX).join("/");
+    return formatted
+        .split(SEP_PATH_WINDOWS)
+        .join("\\\\")
+        .split(SEP_PATH_POSIX)
+        .join("/");
 }
 
 export function getAllDirectories(path: string): Array<string> {
diff --git a/source/tools/size.ts b/source/tools/size.ts
index f5b09f0..3850fe5 100644
--- a/source/tools/size.ts
+++ b/source/tools/size.ts
@@ -9,7 +9,7 @@ export function calculateDataLength(data: string | BufferLike): number {
     } else if (isBuffer(data)) {
         return (<Buffer>data).length;
     } else if (typeof data === "string") {
-        return (<string>data).length;
+        return Buffer.byteLength(<string>data);
     }
     throw new Layerr(
         {
diff --git a/source/types.ts b/source/types.ts
index f868e1d..8fd8eea 100644
--- a/source/types.ts
+++ b/source/types.ts
@@ -116,7 +116,6 @@ export interface GetFileContentsOptions extends WebDAVMethodOptions {
 
 export interface GetQuotaOptions extends WebDAVMethodOptions {
     details?: boolean;
-    path?: string;
 }
 
 export interface Headers {


Test patch:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 9238dbd..beebbbe 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,8 +1,6 @@
 name: Tests
 
-on:
-  push:
-  pull_request:
+on: push
 
 jobs:
   specs:
diff --git a/test/karma.conf.js b/test/karma.conf.js
index f5740f7..1044946 100644
--- a/test/karma.conf.js
+++ b/test/karma.conf.js
@@ -9,7 +9,7 @@ if (process.env.CI) {
     browsers.push("CustomChrome");
 }
 
-module.exports = function (config) {
+module.exports = function(config) {
     config.set({
         basePath: "../",
         frameworks: ["mocha", "chai", "sinon"],
diff --git a/test/node/auth.spec.js b/test/node/auth.spec.js
index 89f1804..0842185 100644
--- a/test/node/auth.spec.js
+++ b/test/node/auth.spec.js
@@ -11,15 +11,15 @@ const {
 
 const DUMMYSERVER = "https://dummy.webdav.server";
 
-describe("auth", function () {
-    afterEach(function () {
+describe("auth", function() {
+    afterEach(function() {
         nock.cleanAll();
     });
 
-    it("should connect unauthenticated if no credentials are passed", function () {
+    it("should connect unauthenticated if no credentials are passed", function() {
         nock(DUMMYSERVER)
             .get("/file")
-            .reply(200, function () {
+            .reply(200, function() {
                 expect(this.req.headers.authorization).to.be.undefined;
                 return "";
             });
@@ -27,10 +27,10 @@ describe("auth", function () {
         return webdav.getFileContents("/file");
     });
 
-    it("should connect using HTTP Basic if user and password are provided", function () {
+    it("should connect using HTTP Basic if user and password are provided", function() {
         nock(DUMMYSERVER)
             .get("/file")
-            .reply(200, function () {
+            .reply(200, function() {
                 expect(this.req.headers.authorization).to.equal("Basic dXNlcjpwYXNz");
                 return "";
             });
@@ -41,10 +41,10 @@ describe("auth", function () {
         return webdav.getFileContents("/file");
     });
 
-    it("should connect using a Bearer token if an object is provided", function () {
+    it("should connect using a Bearer token if an object is provided", function() {
         nock(DUMMYSERVER)
             .get("/file")
-            .reply(200, function () {
+            .reply(200, function() {
                 expect(this.req.headers.authorization).to.deep.equal("Bearer ABC123");
                 return "";
             });
@@ -58,8 +58,8 @@ describe("auth", function () {
         return webdav.getFileContents("/file");
     });
 
-    describe("using Digest-enabled server", function () {
-        beforeEach(function () {
+    describe("using Digest-enabled server", function() {
+        beforeEach(function() {
             this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
                 username: SERVER_USERNAME,
                 password: SERVER_PASSWORD,
@@ -70,12 +70,12 @@ describe("auth", function () {
             return this.server.start();
         });
 
-        afterEach(function () {
+        afterEach(function() {
             return this.server.stop();
         });
 
-        it("should connect using Digest authentication if digest enabled", function () {
-            return this.client.exists("/alrighty.jpg").then(function (exists) {
+        it("should connect using Digest authentication if digest enabled", function() {
+            return this.client.exists("/alrighty.jpg").then(function(exists) {
                 expect(exists).to.be.true;
             });
         });
diff --git a/test/node/operations/copyFile.spec.js b/test/node/operations/copyFile.spec.js
index d8c7557..8ba0aee 100644
--- a/test/node/operations/copyFile.spec.js
+++ b/test/node/operations/copyFile.spec.js
@@ -14,8 +14,8 @@ const {
 
 const TEST_CONTENTS = path.resolve(__dirname, "../../testContents");
 
-describe("copyFile", function () {
-    beforeEach(function () {
+describe("copyFile", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -26,38 +26,40 @@ describe("copyFile", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("copies files from one directory to another", function () {
-        return this.client.copyFile("/alrighty.jpg", "/sub1/alrighty.jpg").then(function () {
+    it("copies files from one directory to another", function() {
+        return this.client.copyFile("/alrighty.jpg", "/sub1/alrighty.jpg").then(function() {
             expect(fileExists(path.join(TEST_CONTENTS, "./alrighty.jpg"))).to.be.true;
             expect(fileExists(path.join(TEST_CONTENTS, "./sub1/alrighty.jpg"))).to.be.true;
         });
     });
 
-    it("copies directories from one directory to another", function () {
-        return this.client.copyFile("/webdav", "/sub1/webdav").then(function () {
+    it("copies directories from one directory to another", function() {
+        return this.client.copyFile("/webdav", "/sub1/webdav").then(function() {
             expect(directoryExists(path.join(TEST_CONTENTS, "./webdav"))).to.be.true;
             expect(directoryExists(path.join(TEST_CONTENTS, "./sub1/webdav"))).to.be.true;
         });
     });
 
-    it("copies files with special characters", function () {
-        return this.client.copyFile("/sub1/ยากจน #1.txt", "/sub1/ยากจน #2.txt").then(function () {
+    it("copies files with special characters", function() {
+        return this.client.copyFile("/sub1/ยากจน #1.txt", "/sub1/ยากจน #2.txt").then(function() {
             expect(fileExists(path.join(TEST_CONTENTS, "./sub1/ยากจน #2.txt"))).to.be.true;
         });
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.copyFile("/alrighty.jpg", "/sub1/alrighty.jpg", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 });
diff --git a/test/node/operations/createDirectory.spec.js b/test/node/operations/createDirectory.spec.js
index a448861..60125b3 100644
--- a/test/node/operations/createDirectory.spec.js
+++ b/test/node/operations/createDirectory.spec.js
@@ -11,8 +11,8 @@ const {
     useRequestSpy
 } = require("../../helpers.node.js");
 
-describe("createDirectory", function () {
-    beforeEach(function () {
+describe("createDirectory", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -23,50 +23,52 @@ describe("createDirectory", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("creates directories", async function () {
+    it("creates directories", async function() {
         const newDir = path.resolve(__dirname, "../../testContents/sub2");
         expect(directoryExists(newDir)).to.be.false;
         await this.client.createDirectory("/sub2");
         expect(directoryExists(newDir)).to.be.true;
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.createDirectory("/sub2", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 
-    it("adds the trailing slash to the directory name if missing", async function () {
+    it("adds the trailing slash to the directory name if missing", async function() {
         await this.client.createDirectory("/subdirectory-1122");
         const [requestOptions] = this.requestSpy.firstCall.args;
         expect(requestOptions.url).to.satisfy(url => url.endsWith("/"));
     });
 
-    describe("with recursive option", function () {
-        it("supports creating deep directories", async function () {
+    describe("with recursive option", function() {
+        it("supports creating deep directories", async function() {
             const newDir = path.resolve(__dirname, "../../testContents/a/b/c/d/e");
             expect(directoryExists(newDir)).to.be.false;
             await this.client.createDirectory("/a/b/c/d/e", { recursive: true });
             expect(directoryExists(newDir)).to.be.true;
         });
 
-        it("supports creating deep directories which partially exist", async function () {
+        it("supports creating deep directories which partially exist", async function() {
             const newDir = path.resolve(__dirname, "../../testContents/sub1/a/b");
             expect(directoryExists(newDir)).to.be.false;
             await this.client.createDirectory("/sub1/a/b", { recursive: true });
             expect(directoryExists(newDir)).to.be.true;
         });
 
-        it("has no effect when all paths exist", async function () {
+        it("has no effect when all paths exist", async function() {
             await this.client.createDirectory("/a/b/c", { recursive: true });
             await this.client.createDirectory("/a/b/c", { recursive: true });
             await this.client.createDirectory("/a", { recursive: true });
diff --git a/test/node/operations/createReadStream.spec.js b/test/node/operations/createReadStream.spec.js
index af81e87..7cc8dc0 100644
--- a/test/node/operations/createReadStream.spec.js
+++ b/test/node/operations/createReadStream.spec.js
@@ -12,18 +12,18 @@ const {
 
 function streamToBuffer(stream) {
     const buffs = [];
-    return new Promise(function (resolve) {
-        stream.on("data", function (d) {
+    return new Promise(function(resolve) {
+        stream.on("data", function(d) {
             buffs.push(d);
         });
-        stream.on("end", function () {
+        stream.on("end", function() {
             resolve(Buffer.concat(buffs));
         });
     });
 }
 
-describe("createReadStream", function () {
-    beforeEach(function () {
+describe("createReadStream", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -34,19 +34,19 @@ describe("createReadStream", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("streams contents of a remote file", async function () {
+    it("streams contents of a remote file", async function() {
         const stream = this.client.createReadStream("/alrighty.jpg");
         expect(stream instanceof ReadableStream).to.be.true;
         const buff = await streamToBuffer(stream);
         expect(buff.length).to.equal(52130);
     });
 
-    it("streams portions (ranges) of a remote file", async function () {
+    it("streams portions (ranges) of a remote file", async function() {
         const stream1 = this.client.createReadStream("/alrighty.jpg", {
             range: { start: 0, end: 24999 }
         });
@@ -61,7 +61,7 @@ describe("createReadStream", function () {
         expect(part2.length).to.equal(27130);
     });
 
-    it("streams a partial file when only the start is provided", async function () {
+    it("streams a partial file when only the start is provided", async function() {
         const stream = this.client.createReadStream("/alrighty.jpg", {
             range: { start: 25000 }
         });
@@ -69,17 +69,19 @@ describe("createReadStream", function () {
         expect(buff.length).to.equal(27130);
     });
 
-    it("streams contents of a remote file", async function () {
+    it("streams contents of a remote file", async function() {
         this.client.createReadStream("/alrighty.jpg", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 
-    it("calls callback with response", function (done) {
+    it("calls callback with response", function(done) {
         const stream = this.client.createReadStream("/notes.txt", {
             callback: response => {
                 expect(response).to.have.property("status", 200);
diff --git a/test/node/operations/createWriteStream.spec.js b/test/node/operations/createWriteStream.spec.js
index 7eece31..d090085 100644
--- a/test/node/operations/createWriteStream.spec.js
+++ b/test/node/operations/createWriteStream.spec.js
@@ -18,7 +18,7 @@ const IMAGE_SOURCE = path.join(TEST_CONTENTS, "./alrighty.jpg");
 const TEXT_SOURCE = path.join(TEST_CONTENTS, "./notes.txt");
 
 function waitOnFile(filename) {
-    return new Promise(function (resolve, reject) {
+    return new Promise(function(resolve, reject) {
         waitOn(
             {
                 resources: [filename],
@@ -26,7 +26,7 @@ function waitOnFile(filename) {
                 timeout: 500,
                 window: 0
             },
-            function (err) {
+            function(err) {
                 if (err) {
                     return reject(err);
                 }
@@ -36,8 +36,8 @@ function waitOnFile(filename) {
     });
 }
 
-describe("createWriteStream", function () {
-    beforeEach(function () {
+describe("createWriteStream", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -48,7 +48,7 @@ describe("createWriteStream", function () {
         return this.server.start();
     });
 
-    afterEach(async function () {
+    afterEach(async function() {
         restoreRequests();
         await new Promise(resolve => {
             setTimeout(resolve, 500);
@@ -56,13 +56,13 @@ describe("createWriteStream", function () {
         return this.server.stop();
     });
 
-    it("writes the file to the remote", function () {
+    it("writes the file to the remote", function() {
         const targetFile = path.join(TEST_CONTENTS, "./alrighty2.jpg");
         const writeStream = this.client.createWriteStream("/alrighty2.jpg");
         const readStream = fs.createReadStream(IMAGE_SOURCE);
         expect(writeStream instanceof PassThrough).to.be.true;
-        return new Promise(function (resolve, reject) {
-            writeStream.on("end", function () {
+        return new Promise(function(resolve, reject) {
+            writeStream.on("end", function() {
                 // stupid stream needs time to close probably..
                 waitOnFile(targetFile).then(resolve, reject);
             });
@@ -71,7 +71,7 @@ describe("createWriteStream", function () {
         });
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         const writeStream = this.client.createWriteStream("/alrighty2.jpg", {
             headers: {
                 "X-test": "test"
@@ -79,10 +79,12 @@ describe("createWriteStream", function () {
         });
         fs.createReadStream(TEXT_SOURCE).pipe(writeStream);
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 
-    it("calls the callback function with the response", function (done) {
+    it("calls the callback function with the response", function(done) {
         const readStream = fs.createReadStream(TEXT_SOURCE);
         const writeStream = this.client.createWriteStream("/test.txt", undefined, response => {
             expect(response).to.have.property("status", 201);
diff --git a/test/node/operations/customRequest.spec.js b/test/node/operations/customRequest.spec.js
index 2bec6f3..2c0a865 100644
--- a/test/node/operations/customRequest.spec.js
+++ b/test/node/operations/customRequest.spec.js
@@ -8,8 +8,8 @@ const {
 } = require("../../helpers.node.js");
 const { parseStat, parseXML } = require("../../../dist/node/index.js");
 
-describe("custom", function () {
-    beforeEach(function () {
+describe("custom", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -19,11 +19,11 @@ describe("custom", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         return this.server.stop();
     });
 
-    it("send and parse stat custom request", async function () {
+    it("send and parse stat custom request", async function() {
         let response = null;
         const resp = await this.client.customRequest("/alrighty.jpg", {
             method: "PROPFIND",
diff --git a/test/node/operations/deleteFile.spec.js b/test/node/operations/deleteFile.spec.js
index d6b2f48..03304b2 100644
--- a/test/node/operations/deleteFile.spec.js
+++ b/test/node/operations/deleteFile.spec.js
@@ -15,8 +15,8 @@ const {
 const localFilePath = path.resolve(__dirname, "../../testContents/text document.txt");
 const localDirPath = path.resolve(__dirname, "../../testContents/sub1");
 
-describe("deleteFile", function () {
-    beforeEach(function () {
+describe("deleteFile", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -27,39 +27,41 @@ describe("deleteFile", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("deletes a remote file", function () {
+    it("deletes a remote file", function() {
         expect(fileExists(localFilePath)).to.be.true;
         return this.client.deleteFile("/text document.txt").then(() => {
             expect(fileExists(localFilePath)).to.be.false;
         });
     });
 
-    it("deletes a remote file", function () {
+    it("deletes a remote file", function() {
         expect(fileExists(localFilePath)).to.be.true;
         return this.client.deleteFile("/text document.txt").then(() => {
             expect(fileExists(localFilePath)).to.be.false;
         });
     });
 
-    it("deletes a remote directory", function () {
+    it("deletes a remote directory", function() {
         expect(directoryExists(localDirPath)).to.be.true;
         return this.client.deleteFile("/sub1").then(() => {
             expect(directoryExists(localDirPath)).to.be.false;
         });
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.deleteFile("/text document.txt", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 });
diff --git a/test/node/operations/exists.spec.js b/test/node/operations/exists.spec.js
index f3f96a9..3f03c75 100644
--- a/test/node/operations/exists.spec.js
+++ b/test/node/operations/exists.spec.js
@@ -9,8 +9,8 @@ const {
     useRequestSpy
 } = require("../../helpers.node.js");
 
-describe("exists", function () {
-    beforeEach(function () {
+describe("exists", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -21,36 +21,38 @@ describe("exists", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("correctly detects existing files", function () {
+    it("correctly detects existing files", function() {
         return this.client.exists("/two%20words/file2.txt").then(doesExist => {
             expect(doesExist).to.be.true;
         });
     });
 
-    it("correctly detects existing directories", function () {
+    it("correctly detects existing directories", function() {
         return this.client.exists("/webdav/server").then(doesExist => {
             expect(doesExist).to.be.true;
         });
     });
 
-    it("correctly responds for non-existing paths", function () {
+    it("correctly responds for non-existing paths", function() {
         return this.client.exists("/webdav/this/is/not/here.txt").then(doesExist => {
             expect(doesExist).to.be.false;
         });
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.exists("/test.txt", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 });
diff --git a/test/node/operations/getDirectoryContents.spec.js b/test/node/operations/getDirectoryContents.spec.js
index 9ac503c..223c2a7 100644
--- a/test/node/operations/getDirectoryContents.spec.js
+++ b/test/node/operations/getDirectoryContents.spec.js
@@ -11,8 +11,8 @@ const {
     useRequestSpy
 } = require("../../helpers.node.js");
 
-describe("getDirectoryContents", function () {
-    beforeEach(async function () {
+describe("getDirectoryContents", function() {
+    beforeEach(async function() {
         clean();
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
@@ -23,22 +23,22 @@ describe("getDirectoryContents", function () {
         await this.server.start();
     });
 
-    afterEach(async function () {
+    afterEach(async function() {
         await this.server.stop();
         restoreRequests();
         clean();
     });
 
-    it("returns an array of items", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
+    it("returns an array of items", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
             expect(contents).to.be.an("array");
             expect(contents[0]).to.be.an("object");
         });
     });
 
-    it("returns correct directory results", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct directory results", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "sub1";
             });
             expect(sub1.filename).to.equal("/sub1");
@@ -47,24 +47,24 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns results not including base directory", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns results not including base directory", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "sub1";
             });
             expect(sub1).to.be.undefined;
         });
     });
 
-    it("returns only expected results when using trailing slash", function () {
-        return this.client.getDirectoryContents("/webdav/").then(function (contents) {
+    it("returns only expected results when using trailing slash", function() {
+        return this.client.getDirectoryContents("/webdav/").then(function(contents) {
             const items = contents.map(item => item.filename);
             expect(items).to.deep.equal(["/webdav/server"]);
         });
     });
 
-    it("returns correct file results", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
+    it("returns correct file results", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
             const sub1 = contents.find(item => item.basename === "alrighty.jpg");
             const sub2 = contents.find(item => item.basename === "file&name.txt");
             expect(sub1.filename).to.equal("/alrighty.jpg");
@@ -74,9 +74,9 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns correct file results in sub-directory", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct file results in sub-directory", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "irrelephant.jpg";
             });
             expect(sub1.filename).to.equal("/sub1/irrelephant.jpg");
@@ -85,46 +85,46 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns correct file results for files with special characters", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct file results for files with special characters", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "ยากจน #1.txt";
             });
             expect(sub1.filename).to.equal("/sub1/ยากจน #1.txt");
         });
     });
 
-    it("returns the contents of a directory with repetitive naming", function () {
-        return this.client.getDirectoryContents("/webdav/server").then(function (contents) {
+    it("returns the contents of a directory with repetitive naming", function() {
+        return this.client.getDirectoryContents("/webdav/server").then(function(contents) {
             expect(contents).to.be.an("array");
             expect(contents[0]).to.be.an("object");
             expect(contents[0]).to.have.property("basename", "notreal.txt");
         });
     });
 
-    it("returns only the directory contents (issue #68)", function () {
-        return this.client.getDirectoryContents("/two words").then(function (contents) {
+    it("returns only the directory contents (issue #68)", function() {
+        return this.client.getDirectoryContents("/two words").then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].basename).to.equal("file.txt");
         });
     });
 
-    it("returns only the directory contents for directory with & in name", function () {
-        return this.client.getDirectoryContents("/with & in path").then(function (contents) {
+    it("returns only the directory contents for directory with & in name", function() {
+        return this.client.getDirectoryContents("/with & in path").then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].basename).to.equal("file.txt");
         });
     });
 
-    it("returns correct directory contents when path contains encoded sequences (issue #93)", function () {
+    it("returns correct directory contents when path contains encoded sequences (issue #93)", function() {
         return this.client.getDirectoryContents("/two%20words").then(contents => {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].basename).to.equal("file2.txt");
         });
     });
 
-    it("returns correct names for directories that contain % in the name", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
+    it("returns correct names for directories that contain % in the name", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
             const noPercent = contents.find(item => item.basename === "two words");
             const percent = contents.find(item => item.basename === "two%20words");
             expect(noPercent).to.have.property("type", "directory");
@@ -132,41 +132,45 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.getDirectoryContents("/", {
             headers: {
                 "X-test": "test"
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 
-    describe("when using details: true", function () {
-        it("returns data and headers properties", function () {
-            return this.client
-                .getDirectoryContents("/", { details: true })
-                .then(function (details) {
-                    expect(details).to.have.property("data").that.is.an("array");
-                    expect(details).to.have.property("headers").that.is.an("object");
-                });
+    describe("when using details: true", function() {
+        it("returns data and headers properties", function() {
+            return this.client.getDirectoryContents("/", { details: true }).then(function(details) {
+                expect(details)
+                    .to.have.property("data")
+                    .that.is.an("array");
+                expect(details)
+                    .to.have.property("headers")
+                    .that.is.an("object");
+            });
         });
 
-        it("returns props on each directory item", function () {
-            return this.client
-                .getDirectoryContents("/", { details: true })
-                .then(function (details) {
-                    const alrightyJpg = details.data.find(item => item.basename === "alrighty.jpg");
-                    expect(alrightyJpg).to.have.property("props").that.is.an("object");
-                    expect(alrightyJpg.props)
-                        .to.have.property("getlastmodified")
-                        .that.matches(/GMT$/);
-                });
+        it("returns props on each directory item", function() {
+            return this.client.getDirectoryContents("/", { details: true }).then(function(details) {
+                const alrightyJpg = details.data.find(item => item.basename === "alrighty.jpg");
+                expect(alrightyJpg)
+                    .to.have.property("props")
+                    .that.is.an("object");
+                expect(alrightyJpg.props)
+                    .to.have.property("getlastmodified")
+                    .that.matches(/GMT$/);
+            });
         });
     });
 
-    describe("when connected to Seafile server", function () {
-        beforeEach(function () {
+    describe("when connected to Seafile server", function() {
+        beforeEach(function() {
             this.client = createWebDAVClient("https://cloud.ascal-strasbg.fr/seafdav", {
                 username: SERVER_USERNAME,
                 password: SERVER_PASSWORD
@@ -174,12 +178,12 @@ describe("getDirectoryContents", function () {
             useCustomXmlResponse("seafile-propfind");
         });
 
-        afterEach(function () {
+        afterEach(function() {
             restoreRequests();
         });
 
-        it("returns the correct response", function () {
-            return this.client.getDirectoryContents("/").then(function (contents) {
+        it("returns the correct response", function() {
+            return this.client.getDirectoryContents("/").then(function(contents) {
                 expect(contents).to.be.an("array");
                 expect(contents).to.deep.equal([
                     {
@@ -195,8 +199,8 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    describe("when fetching an empty multistatus", function () {
-        beforeEach(function () {
+    describe("when fetching an empty multistatus", function() {
+        beforeEach(function() {
             this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
                 username: SERVER_USERNAME,
                 password: SERVER_PASSWORD
@@ -204,31 +208,31 @@ describe("getDirectoryContents", function () {
             useCustomXmlResponse("empty-multistatus");
         });
 
-        afterEach(function () {
+        afterEach(function() {
             restoreRequests();
         });
 
-        it("returns the correct response", function () {
-            return this.client.getDirectoryContents("/").then(function (contents) {
+        it("returns the correct response", function() {
+            return this.client.getDirectoryContents("/").then(function(contents) {
                 expect(contents).to.be.an("array");
                 expect(contents).to.deep.equal([]);
             });
         });
     });
 
-    it("supports globbing files", function () {
+    it("supports globbing files", function() {
         const options = {
             deep: true,
             glob: "/webdav/**/*.txt"
         };
-        return this.client.getDirectoryContents("/", options).then(function (contents) {
+        return this.client.getDirectoryContents("/", options).then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].filename).to.equal("/webdav/server/notreal.txt");
         });
     });
 
-    describe("using Digest authentication", function () {
-        beforeEach(async function () {
+    describe("using Digest authentication", function() {
+        beforeEach(async function() {
             await this.server.stop();
             this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
                 username: SERVER_USERNAME,
@@ -239,13 +243,13 @@ describe("getDirectoryContents", function () {
             await this.server.start();
         });
 
-        afterEach(async function () {
+        afterEach(async function() {
             await this.server.stop();
             clean();
         });
 
-        it("returns an array of results", function () {
-            return this.client.getDirectoryContents("/").then(function (contents) {
+        it("returns an array of results", function() {
+            return this.client.getDirectoryContents("/").then(function(contents) {
                 expect(contents).to.be.an("array");
                 expect(contents[0]).to.be.an("object");
             });
diff --git a/test/node/operations/getFileContents.spec.js b/test/node/operations/getFileContents.spec.js
index 74525b2..fb6d7dc 100644
--- a/test/node/operations/getFileContents.spec.js
+++ b/test/node/operations/getFileContents.spec.js
@@ -15,8 +15,8 @@ const {
 const SOURCE_BIN = path.resolve(__dirname, "../../testContents/alrighty.jpg");
 const SOURCE_TXT = path.resolve(__dirname, "../../testContents/text document.txt");
 
-describe("getFileContents", function () {
-    beforeEach(function () {
+describe("getFileContents", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -27,25 +27,29 @@ describe("getFileContents", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
         return this.server.stop();
     });
 
-    it("reads a remote file into a buffer", async function () {
+    it("reads a remote file into a buffer", async function() {
         const bufferRemote = await this.client.getFileContents("/alrighty.jpg");
         expect(bufferRemote).to.be.an.instanceof(Buffer);
         const bufferLocal = fs.readFileSync(SOURCE_BIN);
         expect(bufferEquals(bufferRemote, bufferLocal)).to.be.true;
     });
 
-    it("supports returning detailed results (buffer)", async function () {
+    it("supports returning detailed results (buffer)", async function() {
         const details = await this.client.getFileContents("/alrighty.jpg", { details: true });
-        expect(details).to.have.property("data").that.is.an.instanceof(Buffer);
-        expect(details).to.have.property("headers").that.is.an("object");
+        expect(details)
+            .to.have.property("data")
+            .that.is.an.instanceof(Buffer);
+        expect(details)
+            .to.have.property("headers")
+            .that.is.an("object");
     });
 
-    it("reads a remote file into a string", async function () {
+    it("reads a remote file into a string", async function() {
         const stringRemote = await this.client.getFileContents("/text document.txt", {
             format: "text"
         });
@@ -53,16 +57,20 @@ describe("getFileContents", function () {
         expect(stringRemote).to.equal(stringLocal);
     });
 
-    it("supports returning detailed results (string)", async function () {
+    it("supports returning detailed results (string)", async function() {
         const details = await this.client.getFileContents("/text document.txt", {
             format: "text",
             details: true
         });
-        expect(details).to.have.property("data").that.is.a("string");
-        expect(details).to.have.property("headers").that.is.an("object");
+        expect(details)
+            .to.have.property("data")
+            .that.is.a("string");
+        expect(details)
+            .to.have.property("headers")
+            .that.is.an("object");
     });
 
-    it("allows specifying custom headers", async function () {
+    it("allows specifying custom headers", async function() {
         await this.client.getFileContents("/text document.txt", {
             format: "text",
             headers: {
@@ -70,10 +78,12 @@ describe("getFileContents", function () {
             }
         });
         const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions).to.have.property("headers").that.has.property("X-test", "test");
+        expect(requestOptions)
+            .to.have.property("headers")
+            .that.has.property("X-test", "test");
     });
 
-    it("can retrieve JSON files as text (#267)", async function () {
+    it("can retrieve JSON files as text (#267)", async function() {
         const contents = await this.client.getFileContents("/format.json", {
             format: "text"
         });
diff --git a/test/node/operations/getFileDownloadLink.spec.js b/test/node/operations/getFileDownloadLink.spec.js
index 04dd721..e4dcbee 100644
--- a/test/node/operations/getFileDownloadLink.spec.js
+++ b/test/node/operations/getFileDownloadLink.spec.js
@@ -1,8 +1,8 @@
 const { AuthType } = require("../../../dist/node/index.js");
 const { createWebDAVClient } = require("../../helpers.node.js");
 
-describe("getFileDownloadLink", function () {
-    beforeEach(function () {
+describe("getFileDownloadLink", function() {
+    beforeEach(function() {
         this.clientPub = createWebDAVClient("http://test.com");
         this.clientAuth = createWebDAVClient("https://test.com", {
             username: "user",
@@ -10,17 +10,17 @@ describe("getFileDownloadLink", function () {
         });
     });
 
-    it("generates authenticated links", function () {
+    it("generates authenticated links", function() {
         const link = this.clientAuth.getFileDownloadLink("/test/file.txt");
         expect(link).to.equal("https://user:pass@test.com/test/file.txt");
     });
 
-    it("generates unauthenticated links", function () {
+    it("generates unauthenticated links", function() {
         const link = this.clientPub.getFileDownloadLink("/test/file.txt");
         expect(link).to.equal("http://test.com/test/file.txt");
     });
 
-    it("throws for digest authentication", function () {
+    it("throws for digest authentication", function() {
         this.client = createWebDAVClient("https://test.com", {
             username: "user",
             password: "pass",
diff --git a/test/node/operations/getFileUploadLink.spec.js b/test/node/operations/getFileUploadLink.spec.js
index 3a2188b..e7001e1 100644
--- a/test/node/operations/getFileUploadLink.spec.js
+++ b/test/node/operations/getFileUploadLink.spec.js
@@ -3,8 +3,8 @@ const { createWebDAVClient } = require("../../helpers.node.js");
 
 const CONTENT_TYPE_SUFFIX = "?Content-Type=application/octet-stream";
 
-describe("getFileUploadLink", function () {
-    beforeEach(function () {
+describe("getFileUploadLink", function() {
+    beforeEach(function() {
         this.clientPub = createWebDAVClient("http://test.com");
         this.clientAuth = createWebDAVClient("https://test.com", {
             username: "user",
@@ -12,17 +12,17 @@ describe("getFileUploadLink", function () {
         });
     });
 
-    it("generates authenticated links", function () {
+    it("generates authenticated links", function() {
         const link = this.clientAuth.getFileUploadLink("/test/file.txt");
         expect(link).to.equal(`https://user:pass@test.com/test/file.txt${CONTENT_TYPE_SUFFIX}`);
     });
 
-    it("generates unauthenticated links", function () {
+    it("generates unauthenticated links", function() {
         const link = this.clientPub.getFileUploadLink("/test/file.txt");
         expect(link).to.equal(`http://test.com/test/file.txt${CONTENT_TYPE_SUFFIX}`);
     });
 
-    it("throws for digest authentication", function () {
+    it("throws for digest authentication", function() {
         this.client = createWebDAVClient("https://test.com", {
             username: "user",
             password: "pass",
diff --git a/test/node/operations/getQuota.spec.js b/test/node/operations/getQuota.spec.js
index a90bb3e..8ab31b3 100644
--- a/test/node/operations/getQuota.spec.js
+++ b/test/node/operations/getQuota.spec.js
@@ -4,12 +4,9 @@ const {
     SERVER_PASSWORD,
     SERVER_PORT,
     SERVER_USERNAME,
-    clean,
     createWebDAVClient,
-    createWebDAVServer,
     restoreRequests,
-    returnFakeResponse,
-    useRequestSpy
+    returnFakeResponse
 } = require("../../helpers.node.js");
 
 function useInvalidQuota() {
@@ -24,60 +21,51 @@ function useValidQuota() {
     );
 }
 
-describe("getQuota", function () {
-    beforeEach(function () {
+describe("getQuota", function() {
+    beforeEach(function() {
         // fake client, not actually used when mocking responses
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
         });
-        clean();
-        this.server = createWebDAVServer();
-        this.requestSpy = useRequestSpy();
-        return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         restoreRequests();
-        return this.server.stop();
     });
 
-    it("returns correct available amount", function () {
+    it("returns correct available amount", function() {
         useValidQuota();
-        return this.client.getQuota().then(function (quotaInfo) {
+        return this.client.getQuota().then(function(quotaInfo) {
             expect(quotaInfo).to.be.an("object");
             expect(quotaInfo).to.have.property("available", "unlimited");
         });
     });
 
-    it("returns correct used amount", function () {
+    it("returns correct used amount", function() {
         useValidQuota();
-        return this.client.getQuota().then(function (quotaInfo) {
+        return this.client.getQuota().then(function(quotaInfo) {
             expect(quotaInfo).to.be.an("object");
             expect(quotaInfo).to.have.property("used", 6864755191);
         });
     });
 
-    it("returns null for invalid quotas", function () {
+    it("returns null for invalid quotas", function() {
         useInvalidQuota();
-        return this.client.getQuota().then(function (quotaInfo) {
+        return this.client.getQuota().then(function(quotaInfo) {
             expect(quotaInfo).to.be.null;
         });
     });
 
-    it("supports returning detailed results", function () {
+    it("supports returning detailed results", function() {
         useValidQuota();
-        return this.client.getQuota({ details: true }).then(function (details) {
-            expect(details).to.have.property("data").that.is.an("object");
-            expect(details).to.have.property("headers").that.is.an("object");
+        return this.client.getQuota({ details: true }).then(function(details) {
+            expect(details)
+                .to.have.property("data")
+                .that.is.an("object");
+            expect(details)
+                .to.have.property("headers")
+                .that.is.an("object");
         });
     });
-
-    it("supports path option", async function () {
-        await this.client.getQuota({ path: "sub1" });
-        const [requestOptions] = this.requestSpy.firstCall.args;
-        expect(requestOptions)
-            .to.have.property("url")
-            .that.matches(/webdav\/server\/sub1$/);
-    });
 });
diff --git a/test/node/operations/lock.spec.js b/test/node/operations/lock.spec.js
index 6417880..5f15b39 100644
--- a/test/node/operations/lock.spec.js
+++ b/test/node/operations/lock.spec.js
@@ -7,8 +7,8 @@ const {
     createWebDAVServer
 } = require("../../helpers.node.js");
 
-describe("lock", function () {
-    beforeEach(function () {
+describe("lock", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -18,23 +18,23 @@ describe("lock", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         return this.server.stop();
     });
 
-    it("locks files and returns a token", async function () {
+    it("locks files and returns a token", async function() {
         const lock = await this.client.lock("/notes.txt");
         expect(lock)
             .to.have.property("token")
             .that.matches(/^[a-z0-9]+:.+/i);
     });
 
-    it("supports unlocking", async function () {
+    it("supports unlocking", async function() {
         const lock = await this.client.lock("/notes.txt");
         await this.client.unlock("/notes.txt", lock.token);
     });
 
-    it("fails unlocking if token invalid", async function () {
+    it("fails unlocking if token invalid", async function() {
         const lock = await this.client.lock("/notes.txt");
         let err;
         try {
diff --git a/test/node/operations/moveFile.spec.js b/test/node/operations/moveFile.spec.js
index 00ee011..d11cf6a 100644
--- a/test/node/operations/moveFile.spec.js
+++ b/test/node/operations/moveFile.spec.js
@@ -12,8 +12,8 @@ const {
 
 const TEST_CONTENTS = path.resolve(__dirname, "../../testContents");
 
-describe("moveFile", function () {
-    beforeEach(function () {
+describe("moveFile", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -23,26 +23,26 @@ describe("moveFile", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         return this.server.stop();
     });
 
-    it("moves files from one directory to another", function () {
-        return this.client.moveFile("/alrighty.jpg", "/sub1/alrighty.jpg").then(function () {
+    it("moves files from one directory to another", function() {
+        return this.client.moveFile("/alrighty.jpg", "/sub1/alrighty.jpg").then(function() {
             expect(fileExists(path.join(TEST_CONTENTS, "./alrighty.jpg"))).to.be.false;
             expect(fileExists(path.join(TEST_CONTENTS, "./sub1/alrighty.jpg"))).to.be.true;
         });
     });
 
-    it("moves directories from one directory to another", function () {
-        return this.client.moveFile("/webdav", "/sub1/webdav").then(function () {
+    it("moves directories from one directory to another", function() {
+        return this.client.moveFile("/webdav", "/sub1/webdav").then(function() {
             expect(directoryExists(path.join(TEST_CONTENTS, "./webdav"))).to.be.false;
             expect(directoryExists(path.join(TEST_CONTENTS, "./sub1/webdav"))).to.be.true;
         });
     });
 
-    it("moves files from one name to another", function () {
-        return this.client.moveFile("/alrighty.jpg", "/renamed.jpg").then(function () {
+    it("moves files from one name to another", function() {
+        return this.client.moveFile("/alrighty.jpg", "/renamed.jpg").then(function() {
             expect(fileExists(path.join(TEST_CONTENTS, "./alrighty.jpg"))).to.be.false;
             expect(fileExists(path.join(TEST_CONTENTS, "./renamed.jpg"))).to.be.true;
         });
diff --git a/test/node/operations/putFileContents.spec.js b/test/node/operations/putFileContents.spec.js
index 27946aa..d62fcb0 100644
--- a/test/node/operations/putFileContents.spec.js
+++ b/test/node/operations/putFileContents.spec.js
@@ -15,8 +15,8 @@ const TARGET_BIN = path.resolve(__dirname, "../../testContents/sub1/alrighty.jpg
 const TARGET_TXT = path.resolve(__dirname, "../../testContents/newFile.txt");
 const TARGET_TXT_CHARS = path.resolve(__dirname, "../../testContents/จะทำลาย.txt");
 
-describe("putFileContents", function () {
-    beforeEach(function () {
+describe("putFileContents", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -26,27 +26,27 @@ describe("putFileContents", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         return this.server.stop();
     });
 
-    it("writes binary files", function () {
+    it("writes binary files", function() {
         const imgBin = fs.readFileSync(SOURCE_BIN);
-        return this.client.putFileContents("/sub1/alrighty.jpg", imgBin).then(function () {
+        return this.client.putFileContents("/sub1/alrighty.jpg", imgBin).then(function() {
             const written = fs.readFileSync(TARGET_BIN);
             expect(bufferEquals(written, imgBin)).to.be.true;
         });
     });
 
-    it("writes text files", function () {
+    it("writes text files", function() {
         const text = "this is\nsome text\ncontent\t...\n";
-        return this.client.putFileContents("/newFile.txt", text).then(function () {
+        return this.client.putFileContents("/newFile.txt", text).then(function() {
             const written = fs.readFileSync(TARGET_TXT, "utf8");
             expect(written).to.equal(text);
         });
     });
 
-    it("writes streams", async function () {
+    it("writes streams", async function() {
         const readStream = fs.createReadStream(SOURCE_BIN);
         await this.client.putFileContents("/sub1/alrighty.jpg", readStream);
         // Check result
@@ -55,9 +55,9 @@ describe("putFileContents", function () {
         expect(bufferEquals(written, source)).to.be.true;
     });
 
-    it("writes files with non-latin characters in the filename", function () {
+    it("writes files with non-latin characters in the filename", function() {
         const text = "this is\nsome text\ncontent\t...\n";
-        return this.client.putFileContents("/จะทำลาย.txt", text).then(function () {
+        return this.client.putFileContents("/จะทำลาย.txt", text).then(function() {
             const written = fs.readFileSync(TARGET_TXT_CHARS, "utf8");
             expect(written).to.equal(text);
         });
diff --git a/test/node/operations/stat.spec.js b/test/node/operations/stat.spec.js
index 0b7393f..43a7770 100644
--- a/test/node/operations/stat.spec.js
+++ b/test/node/operations/stat.spec.js
@@ -9,8 +9,8 @@ const {
     restoreRequests
 } = require("../../helpers.node.js");
 
-describe("stat", function () {
-    beforeEach(function () {
+describe("stat", function() {
+    beforeEach(function() {
         this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
             username: SERVER_USERNAME,
             password: SERVER_PASSWORD
@@ -20,12 +20,12 @@ describe("stat", function () {
         return this.server.start();
     });
 
-    afterEach(function () {
+    afterEach(function() {
         return this.server.stop();
     });
 
-    it("correctly stats files", function () {
-        return this.client.stat("/alrighty.jpg").then(function (stat) {
+    it("correctly stats files", function() {
+        return this.client.stat("/alrighty.jpg").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/alrighty.jpg");
             expect(stat).to.have.property("basename", "alrighty.jpg");
@@ -36,24 +36,24 @@ describe("stat", function () {
         });
     });
 
-    it("correctly stats files with '%' in the path (#221)", function () {
-        return this.client.stat("/file % name.txt").then(function (stat) {
+    it("correctly stats files with '%' in the path (#221)", function() {
+        return this.client.stat("/file % name.txt").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/file % name.txt");
             expect(stat).to.have.property("basename", "file % name.txt");
         });
     });
 
-    it("correctly stats directories with '%' in the path (#221)", function () {
-        return this.client.stat("/two%20words").then(function (stat) {
+    it("correctly stats directories with '%' in the path (#221)", function() {
+        return this.client.stat("/two%20words").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/two%20words");
             expect(stat).to.have.property("basename", "two%20words");
         });
     });
 
-    it("correctly stats directories", function () {
-        return this.client.stat("/webdav/server").then(function (stat) {
+    it("correctly stats directories", function() {
+        return this.client.stat("/webdav/server").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/webdav/server");
             expect(stat).to.have.property("basename", "server");
@@ -63,8 +63,8 @@ describe("stat", function () {
         });
     });
 
-    it("stats the root", function () {
-        return this.client.stat("/").then(function (stat) {
+    it("stats the root", function() {
+        return this.client.stat("/").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/");
             expect(stat).to.have.property("basename", "");
@@ -74,14 +74,14 @@ describe("stat", function () {
         });
     });
 
-    it("throws 404 on non-existent file", function () {
+    it("throws 404 on non-existent file", function() {
         return expect(
             this.client.stat("/does-not-exist")
         ).to.eventually.be.rejected.and.have.property("status", 404);
     });
 
-    describe("when requesting stat from NGinx webdav server", function () {
-        beforeEach(function () {
+    describe("when requesting stat from NGinx webdav server", function() {
+        beforeEach(function() {
             this.client = createWebDAVClient(`http://localhost:${SERVER_PORT}/webdav/server`, {
                 username: SERVER_USERNAME,
                 password: SERVER_PASSWORD
@@ -89,38 +89,46 @@ describe("stat", function () {
             useCustomXmlResponse("nginx-not-found");
         });
 
-        afterEach(function () {
+        afterEach(function() {
             restoreRequests();
         });
 
-        it("throws 404 on non-existent file", function () {
+        it("throws 404 on non-existent file", function() {
             return expect(
                 this.client.stat("/does-not-exist")
             ).to.eventually.be.rejected.and.have.property("status", 404);
         });
     });
 
-    describe("with details: true", function () {
-        it("returns data property", function () {
-            return this.client.stat("/", { details: true }).then(function (result) {
-                expect(result).to.have.property("data").that.is.an("object");
+    describe("with details: true", function() {
+        it("returns data property", function() {
+            return this.client.stat("/", { details: true }).then(function(result) {
+                expect(result)
+                    .to.have.property("data")
+                    .that.is.an("object");
             });
         });
 
-        it("returns headers", function () {
-            return this.client.stat("/", { details: true }).then(function (result) {
-                expect(result).to.have.property("headers").that.is.an("object");
+        it("returns headers", function() {
+            return this.client.stat("/", { details: true }).then(function(result) {
+                expect(result)
+                    .to.have.property("headers")
+                    .that.is.an("object");
             });
         });
 
-        it("returns props", function () {
-            return this.client.stat("/", { details: true }).then(function (result) {
-                expect(result.data).to.have.property("props").that.is.an("object");
-                expect(result.data.props).to.have.property("getlastmodified").that.matches(/GMT$/);
+        it("returns props", function() {
+            return this.client.stat("/", { details: true }).then(function(result) {
+                expect(result.data)
+                    .to.have.property("props")
+                    .that.is.an("object");
+                expect(result.data.props)
+                    .to.have.property("getlastmodified")
+                    .that.matches(/GMT$/);
             });
         });
 
-        it("allows requesting a custom set of properties", function () {
+        it("allows requesting a custom set of properties", function() {
             return this.client
                 .stat("/alrighty.jpg", {
                     data: `<?xml version="1.0"?>
@@ -131,8 +139,10 @@ describe("stat", function () {
                     </d:propfind>`,
                     details: true
                 })
-                .then(function (result) {
-                    expect(result).to.have.nested.property("data.props").that.is.an("object");
+                .then(function(result) {
+                    expect(result)
+                        .to.have.nested.property("data.props")
+                        .that.is.an("object");
                     expect(Object.keys(result.data.props)).to.deep.equal(["getlastmodified"]);
                 });
         });
diff --git a/test/node/tools/headers.spec.js b/test/node/tools/headers.spec.js
index 667f1a2..bbf323e 100644
--- a/test/node/tools/headers.spec.js
+++ b/test/node/tools/headers.spec.js
@@ -1,7 +1,7 @@
 const { mergeHeaders } = require("../../../dist/node/tools/headers.js");
 
-describe("mergeHeaders", function () {
-    it("merges headers with different cases", function () {
+describe("mergeHeaders", function() {
+    it("merges headers with different cases", function() {
         expect(
             mergeHeaders(
                 {
diff --git a/test/node/tools/size.spec.js b/test/node/tools/size.spec.js
new file mode 100644
index 0000000..a7c7445
--- /dev/null
+++ b/test/node/tools/size.spec.js
@@ -0,0 +1,8 @@
+const { calculateDataLength } = require("../../../dist/node/tools/size.js");
+
+describe("calculateDataLength", () => {
+    it("Correctly calculates length for utf-8 string", () => {
+        const utf8String = "řeřicha";
+        expect(calculateDataLength(utf8String)).to.equal(9);
+    });
+});
diff --git a/test/server.web.js b/test/server.web.js
index 2d970fa..bef9b74 100644
--- a/test/server.web.js
+++ b/test/server.web.js
@@ -11,11 +11,11 @@ server.start().then(() => {
     console.log("Server started");
 });
 
-process.on("SIGTERM", function () {
+process.on("SIGTERM", function() {
     server.stop();
     process.exit(0);
 });
-process.on("SIGINT", function () {
+process.on("SIGINT", function() {
     server.stop();
     process.exit(0);
 });
diff --git a/test/server/index.js b/test/server/index.js
index 0f803c5..a72052d 100644
--- a/test/server/index.js
+++ b/test/server/index.js
@@ -37,15 +37,15 @@ function createServer(dir, authType) {
     // console.log(`Created server on localhost with port: 9988, and authType: ${authType}`);
     return {
         start: function start() {
-            return new Promise(function (resolve) {
-                server.setFileSystem("/webdav/server", new ws.PhysicalFileSystem(dir), function () {
+            return new Promise(function(resolve) {
+                server.setFileSystem("/webdav/server", new ws.PhysicalFileSystem(dir), function() {
                     server.start(resolve);
                 });
             });
         },
 
         stop: function stop() {
-            return new Promise(function (resolve) {
+            return new Promise(function(resolve) {
                 server.stop(resolve);
             });
         }
diff --git a/test/web/exists.spec.js b/test/web/exists.spec.js
index 56b858a..6a8b27c 100644
--- a/test/web/exists.spec.js
+++ b/test/web/exists.spec.js
@@ -1,27 +1,27 @@
 const { createClient } = require("../../source/index.ts");
 const { PASSWORD, PORT, USERNAME } = require("../server/credentials.js");
 
-describe("exists", function () {
-    beforeEach(function () {
+describe("exists", function() {
+    beforeEach(function() {
         this.client = createClient(`http://localhost:${PORT}/webdav/server`, {
             username: USERNAME,
             password: PASSWORD
         });
     });
 
-    it("correctly detects existing files", function () {
+    it("correctly detects existing files", function() {
         return this.client.exists("/two%20words/file2.txt").then(doesExist => {
             expect(doesExist).to.be.true;
         });
     });
 
-    it("correctly detects existing directories", function () {
+    it("correctly detects existing directories", function() {
         return this.client.exists("/webdav/server").then(doesExist => {
             expect(doesExist).to.be.true;
         });
     });
 
-    it("correctly responds for non-existing paths", function () {
+    it("correctly responds for non-existing paths", function() {
         return this.client.exists("/webdav/this/is/not/here.txt").then(doesExist => {
             expect(doesExist).to.be.false;
         });
diff --git a/test/web/getDirectoryContents.spec.js b/test/web/getDirectoryContents.spec.js
index efde5b7..62fa480 100644
--- a/test/web/getDirectoryContents.spec.js
+++ b/test/web/getDirectoryContents.spec.js
@@ -1,24 +1,24 @@
 const { createClient } = require("../../source/index.ts");
 const { PASSWORD, PORT, USERNAME } = require("../server/credentials.js");
 
-describe("getDirectoryContents", function () {
-    beforeEach(function () {
+describe("getDirectoryContents", function() {
+    beforeEach(function() {
         this.client = createClient(`http://localhost:${PORT}/webdav/server`, {
             username: USERNAME,
             password: PASSWORD
         });
     });
 
-    it("returns an array of items", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
+    it("returns an array of items", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
             expect(contents).to.be.an("array");
             expect(contents[0]).to.be.an("object");
         });
     });
 
-    it("returns correct directory results", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct directory results", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "sub1";
             });
             expect(sub1.filename).to.equal("/sub1");
@@ -27,19 +27,19 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns results not including base directory", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns results not including base directory", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "sub1";
             });
             expect(sub1).to.be.undefined;
         });
     });
 
-    it("returns only expected results when using trailing slash", function () {
-        return this.client.getDirectoryContents("/webdav/").then(function (contents) {
+    it("returns only expected results when using trailing slash", function() {
+        return this.client.getDirectoryContents("/webdav/").then(function(contents) {
             const items = contents
-                .map(function (item) {
+                .map(function(item) {
                     return item.filename;
                 })
                 .join(",");
@@ -47,9 +47,9 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns correct file results", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct file results", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "alrighty.jpg";
             });
             expect(sub1.filename).to.equal("/alrighty.jpg");
@@ -58,9 +58,9 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns correct file results in sub-directory", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct file results in sub-directory", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "irrelephant.jpg";
             });
             expect(sub1.filename).to.equal("/sub1/irrelephant.jpg");
@@ -69,48 +69,48 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("returns correct file results for files with special characters", function () {
-        return this.client.getDirectoryContents("/sub1").then(function (contents) {
-            const sub1 = contents.find(function (item) {
+    it("returns correct file results for files with special characters", function() {
+        return this.client.getDirectoryContents("/sub1").then(function(contents) {
+            const sub1 = contents.find(function(item) {
                 return item.basename === "ยากจน #1.txt";
             });
             expect(sub1.filename).to.equal("/sub1/ยากจน #1.txt");
         });
     });
 
-    it("returns the contents of a directory with repetitive naming", function () {
-        return this.client.getDirectoryContents("/webdav/server").then(function (contents) {
+    it("returns the contents of a directory with repetitive naming", function() {
+        return this.client.getDirectoryContents("/webdav/server").then(function(contents) {
             expect(contents).to.be.an("array");
             expect(contents[0]).to.be.an("object");
             expect(contents[0]).to.have.property("basename", "notreal.txt");
         });
     });
 
-    it("returns only the directory contents (issue #68)", function () {
-        return this.client.getDirectoryContents("/two words").then(function (contents) {
+    it("returns only the directory contents (issue #68)", function() {
+        return this.client.getDirectoryContents("/two words").then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].basename).to.equal("file.txt");
         });
     });
 
-    it("returns correct directory contents when path contains encoded sequences (issue #93)", function () {
-        return this.client.getDirectoryContents("/two%20words").then(function (contents) {
+    it("returns correct directory contents when path contains encoded sequences (issue #93)", function() {
+        return this.client.getDirectoryContents("/two%20words").then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].basename).to.equal("file2.txt");
         });
     });
 
-    it("returns etags from propfind", function () {
-        return this.client.getDirectoryContents("/").then(function (contents) {
+    it("returns etags from propfind", function() {
+        return this.client.getDirectoryContents("/").then(function(contents) {
             expect(contents[0])
                 .to.have.property("etag")
                 .that.matches(/^[a-f0-9]{32}$/);
         });
     });
 
-    describe("when using 'deep' option", function () {
-        it("returns all directory contents from the entire file tree", function () {
-            return this.client.getDirectoryContents("/", { deep: true }).then(function (contents) {
+    describe("when using 'deep' option", function() {
+        it("returns all directory contents from the entire file tree", function() {
+            return this.client.getDirectoryContents("/", { deep: true }).then(function(contents) {
                 expect(contents.find(item => item.filename === "/alrighty.jpg")).to.be.an("object");
                 expect(contents.find(item => item.filename === "/sub1/ยากจน #1.txt")).to.be.an(
                     "object"
@@ -119,12 +119,12 @@ describe("getDirectoryContents", function () {
         });
     });
 
-    it("supports globbing files", function () {
+    it("supports globbing files", function() {
         const options = {
             deep: true,
             glob: "/webdav/**/*.txt"
         };
-        return this.client.getDirectoryContents("/", options).then(function (contents) {
+        return this.client.getDirectoryContents("/", options).then(function(contents) {
             expect(contents).to.have.lengthOf(1);
             expect(contents[0].filename).to.equal("/webdav/server/notreal.txt");
         });
diff --git a/test/web/getFileContents.spec.js b/test/web/getFileContents.spec.js
index a636381..9abea05 100644
--- a/test/web/getFileContents.spec.js
+++ b/test/web/getFileContents.spec.js
@@ -1,33 +1,33 @@
 const { createClient } = require("../../source/index.ts");
 const { PASSWORD, PORT, USERNAME } = require("../server/credentials.js");
 
-describe("getDirectoryContents", function () {
+describe("getDirectoryContents", function() {
     function arrayBufferToString(buf) {
         return String.fromCharCode.apply(null, new Uint8Array(buf));
     }
 
-    beforeEach(function () {
+    beforeEach(function() {
         this.client = createClient(`http://localhost:${PORT}/webdav/server`, {
             username: USERNAME,
             password: PASSWORD
         });
     });
 
-    it("reads a remote text file into a buffer", function () {
+    it("reads a remote text file into a buffer", function() {
         return this.client.getFileContents("/text document.txt").then(bufferRemote => {
             expect(bufferRemote).to.be.an.instanceof(ArrayBuffer);
             expect(arrayBufferToString(bufferRemote)).to.contain("This is my cool file.");
         });
     });
 
-    it("reads a remote binary file into a buffer", function () {
+    it("reads a remote binary file into a buffer", function() {
         return this.client.getFileContents("/alrighty.jpg").then(bufferRemote => {
             expect(bufferRemote).to.be.an.instanceof(ArrayBuffer);
             expect(bufferRemote.byteLength).to.equal(52130);
         });
     });
 
-    it("reads a remote file into a string", function () {
+    it("reads a remote file into a string", function() {
         return this.client
             .getFileContents("/text document.txt", { format: "text" })
             .then(stringRemote => {
@@ -35,16 +35,20 @@ describe("getDirectoryContents", function () {
             });
     });
 
-    it("supports returning detailed results (string)", function () {
+    it("supports returning detailed results (string)", function() {
         return this.client
             .getFileContents("/text document.txt", { format: "text", details: true })
             .then(details => {
-                expect(details).to.have.property("data").that.is.a("string");
-                expect(details).to.have.property("headers").that.is.an("object");
+                expect(details)
+                    .to.have.property("data")
+                    .that.is.a("string");
+                expect(details)
+                    .to.have.property("headers")
+                    .that.is.an("object");
             });
     });
 
-    it("can retrieve JSON files as text (#267)", function () {
+    it("can retrieve JSON files as text (#267)", function() {
         return this.client.getFileContents("/format.json", { format: "text" }).then(contents => {
             expect(contents).to.be.a("string");
             expect(contents).to.contain(`{"test":true}`);
diff --git a/test/web/stat.spec.js b/test/web/stat.spec.js
index fadd450..612d504 100644
--- a/test/web/stat.spec.js
+++ b/test/web/stat.spec.js
@@ -1,16 +1,16 @@
 const { createClient } = require("../../source/index.ts");
 const { PASSWORD, PORT, USERNAME } = require("../server/credentials.js");
 
-describe("stat", function () {
-    beforeEach(function () {
+describe("stat", function() {
+    beforeEach(function() {
         this.client = createClient(`http://localhost:${PORT}/webdav/server`, {
             username: USERNAME,
             password: PASSWORD
         });
     });
 
-    it("correctly stats files", function () {
-        return this.client.stat("/alrighty.jpg").then(function (stat) {
+    it("correctly stats files", function() {
+        return this.client.stat("/alrighty.jpg").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/alrighty.jpg");
             expect(stat).to.have.property("basename", "alrighty.jpg");
@@ -21,24 +21,24 @@ describe("stat", function () {
         });
     });
 
-    it("correctly stats files with '%' in the path (#221)", function () {
-        return this.client.stat("/file % name.txt").then(function (stat) {
+    it("correctly stats files with '%' in the path (#221)", function() {
+        return this.client.stat("/file % name.txt").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/file % name.txt");
             expect(stat).to.have.property("basename", "file % name.txt");
         });
     });
 
-    it("correctly stats directories with '%' in the path (#221)", function () {
-        return this.client.stat("/two%20words").then(function (stat) {
+    it("correctly stats directories with '%' in the path (#221)", function() {
+        return this.client.stat("/two%20words").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/two%20words");
             expect(stat).to.have.property("basename", "two%20words");
         });
     });
 
-    it("correctly stats directories", function () {
-        return this.client.stat("/webdav/server").then(function (stat) {
+    it("correctly stats directories", function() {
+        return this.client.stat("/webdav/server").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/webdav/server");
             expect(stat).to.have.property("basename", "server");
@@ -48,8 +48,8 @@ describe("stat", function () {
         });
     });
 
-    it("stats the root", function () {
-        return this.client.stat("/").then(function (stat) {
+    it("stats the root", function() {
+        return this.client.stat("/").then(function(stat) {
             expect(stat).to.be.an("object");
             expect(stat).to.have.property("filename", "/");
             expect(stat).to.have.property("basename", "");